Browse Source

Merge branch 'dev_voice_share_point' into dev

master
sunyuchao 5 years ago
parent
commit
098b8c2a08
  1. 6
      epmet-module/epmet-job/epmet-job-server/pom.xml
  2. 12
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/TopicAutoAuditService.java
  3. 24
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/TopicAutoAuditServiceImpl.java
  4. 31
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/TopicAutoAuditTask.java
  5. 4
      epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.4__addNewRuleTemplate.sql
  6. 4
      epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.5__editResiGroupRuleCode.sql
  7. 4
      epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.6__editResiGroupRuleUpLimitDesc.sql
  8. 2
      epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.7__updateAllRuleLimitDesc.sql
  9. 13
      epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.8__updateRuleDesc.sql
  10. 16
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  11. 4
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueShareLinkRecordServiceImpl.java
  12. 2
      epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.10__add_colum_to_share_link_visit.sql
  13. 0
      epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.9__issue_share.sql
  14. 18
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java
  15. 5
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/FileDTO.java
  16. 25
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/ShareLinkTypeFormDTO.java
  17. 45
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/TopicEventFormDTO.java
  18. 6
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/DraftDetailResultDTO.java
  19. 31
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/MemberRelationBetweenGroupAndGridResultDTO.java
  20. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/TopicBelongGroupResultDTO.java
  21. 20
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java
  22. 17
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java
  23. 16
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java
  24. 3
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  25. 14
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java
  26. 12
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/TopicDraftController.java
  27. 17
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/TopicShareLinkRecordController.java
  28. 12
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/TopicDraftScanTaskDao.java
  29. 9
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/ResiTopicService.java
  30. 12
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicDraftScanTaskService.java
  31. 9
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicDraftService.java
  32. 11
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicShareLinkRecordService.java
  33. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicShareLinkVisitRecordService.java
  34. 21
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java
  35. 160
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  36. 23
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftScanTaskServiceImpl.java
  37. 328
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftServiceImpl.java
  38. 75
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicShareLinkRecordServiceImpl.java
  39. 7
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicShareLinkVisitRecordServiceImpl.java
  40. 2
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicAttachmentDao.xml
  41. 5
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml
  42. 16
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicDraftDao.xml
  43. 17
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicDraftScanTaskDao.xml

6
epmet-module/epmet-job/epmet-job-server/pom.xml

@ -79,6 +79,12 @@
<artifactId>feign-httpclient</artifactId>
<version>10.3.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>resi-group-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

12
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/TopicAutoAuditService.java

@ -0,0 +1,12 @@
package com.epmet.service;
import com.epmet.commons.tools.utils.Result;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/29 17:45
*/
public interface TopicAutoAuditService {
Result autoAudit();
}

24
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/TopicAutoAuditServiceImpl.java

@ -0,0 +1,24 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.utils.Result;
import com.epmet.resi.group.feign.ResiGroupOpenFeignClient;
import com.epmet.service.TopicAutoAuditService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/29 17:46
*/
@Service
public class TopicAutoAuditServiceImpl implements TopicAutoAuditService {
@Autowired
private ResiGroupOpenFeignClient resiGroupOpenFeignClient;
@Override
public Result autoAudit() {
return resiGroupOpenFeignClient.autoAudit();
}
}

31
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/TopicAutoAuditTask.java

@ -0,0 +1,31 @@
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.service.TopicAutoAuditService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/29 17:43
*/
@Slf4j
@Component("topicAutoAuditTask")
public class TopicAutoAuditTask implements ITask {
@Autowired
private TopicAutoAuditService topicAutoAuditService;
@Override
public void run(String params) {
log.info("TopicAutoAuditTask定时任务正在执行,参数为:{}", params);
Result result = topicAutoAuditService.autoAudit();
if (result.success()) {
log.info("TopicAutoAuditTask定时任务执行成功");
} else {
log.error("TopicAutoAuditTask定时任务执行失败:" + result.getMsg());
}
}
}

4
epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.4__addNewRuleTemplate.sql

@ -23,13 +23,13 @@ INSERT INTO point_rule_default (
VALUES
(
'3','发布话题',
'对小组内话题进行15字以上评论','publish_one_topic',
'楼院小组内通过我有话说功能发布话题','publish_one_topic',
'1','plus',
15,'每天上限为15分',null,'day',5,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'4','参与话题',
'楼院小组内通过我有话说功能发布话题','participate_one_topic',
'对小组内话题进行15字以上评论','participate_one_topic',
'1','plus',
6,'每天上限为6分',null,'day',2,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),

4
epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.5__editResiGroupRuleCode.sql

@ -0,0 +1,4 @@
update `point_rule_default` set event_code = 'invite_new_into_group' where event_code = 'invite_new_resident_into_group';
update `point_rule_default` set event_code = 'invite_resi_into_group' where event_code = 'invite_resident_into_group';
update `point_rule_default` set event_code = 'topic_to_issue' where event_code = 'topic_shifted_to_issue';
update `point_rule_default` set event_code = 'topic_to_project' where event_code = 'topic_shifted_to_project';

4
epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.6__editResiGroupRuleUpLimitDesc.sql

@ -0,0 +1,4 @@
update `point_rule_default` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限' where event_code = 'publish_one_topic';
update `point_rule_default` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限' where event_code = 'participate_one_topic';
update `point_rule_default` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限' where event_code = 'shift_topic_to_issue';
update `point_rule_default` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限' where event_code = 'invite_resi_into_group';

2
epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.7__updateAllRuleLimitDesc.sql

@ -0,0 +1,2 @@
update `point_rule_default` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限';
update `point_rule` set up_limit_desc = '每日该项所得积分总和上限,为0时表示没有积分上限'

13
epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.8__updateRuleDesc.sql

@ -0,0 +1,13 @@
update `point_rule_default` set rule_desc = '通过话题/议题分享链接邀请新用户入组,且注册居民成功入组' where event_code = 'invite_new_into_group' and rule_name = '邀请新人入组';
update `point_rule_default` set rule_desc = '通过话题/议题分享链接邀请已注册用户入组,且通过入组审核' where event_code = 'invite_resi_into_group' and rule_name = '邀请入组';
update `point_rule_default` set rule_desc = '小组中发布的话题被组长转为议题,又被网格员转为项目' where event_code = 'topic_to_project' and rule_name = '话题被转为项目';
update `point_rule` set rule_desc = '通过话题/议题分享链接邀请新用户入组,且注册居民成功入组' where event_code = 'invite_new_into_group' and rule_name = '邀请新人入组';
update `point_rule` set rule_desc = '通过话题/议题分享链接邀请已注册用户入组,且通过入组审核' where event_code = 'invite_resi_into_group' and rule_name = '邀请入组';
update `point_rule` set rule_desc = '小组中发布的话题被组长转为议题,又被网格员转为项目' where event_code = 'topic_to_project' and rule_name = '话题被转为项目';

16
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -1,5 +1,6 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -7,6 +8,7 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EventEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
@ -26,6 +28,8 @@ import com.epmet.dao.IssueProcessDao;
import com.epmet.dao.IssueProjectRelationDao;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.form.IssueAuditionFormDTO;
import com.epmet.dto.form.IssueShiftedFromTopicFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.IssueEntity;
import com.epmet.entity.IssueProcessEntity;
@ -40,10 +44,8 @@ import com.epmet.resi.group.dto.group.result.GroupInfoResultDTO;
import com.epmet.resi.group.dto.group.result.GroupShiftProjectListResultDTO;
import com.epmet.resi.group.dto.group.result.GroupVotingListResultDTO;
import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import com.epmet.resi.group.dto.topic.form.*;
import com.epmet.resi.group.dto.topic.form.GovTopicIssueInfoFormDTO;
import com.epmet.resi.group.dto.topic.form.ResiTopicTurnIssueFromDTO;
import com.epmet.resi.group.dto.topic.form.TopicIdListFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicInfoFormDTO;
import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO;
import com.epmet.resi.group.feign.ResiGroupOpenFeignClient;
import com.epmet.service.*;
@ -862,6 +864,14 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
}catch(RenException e){
logger.error(e.getInternalMsg());
}
//7:发送话题转议题积分事件
TopicEventFormDTO eventParam = new TopicEventFormDTO();
eventParam.setTopicId(entity.getSourceId());
eventParam.setEvent(EventEnum.TOPIC_SHIFTED_TO_PROJECT);
if(!resiGroupOpenFeignClient.sendEvent(eventParam).success()){
logger.warn("com.epmet.service.impl.IssueServiceImpl.shiftProject,话题被转为项目积分事件发送失败,参数:{}", JSON.toJSONString(formDTO));
}
}
/**

4
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueShareLinkRecordServiceImpl.java

@ -127,10 +127,10 @@ public class IssueShareLinkRecordServiceImpl extends BaseServiceImpl<IssueShareL
}
IssueShareLinkRecordEntity entity = new IssueShareLinkRecordEntity();
entity.setCustomerId(issueInfo.getCustomerId());
if (StringUtils.isBlank(topicInfo.getData().getGroupId())){
if (StringUtils.isBlank(topicInfo.getData().getGridId())){
throw new RenException(IssueShareConstant.TOPIC_BELONG_GROUP_NULL);
}
entity.setGridId(topicInfo.getData().getGroupId());
entity.setGridId(topicInfo.getData().getGridId());
entity.setIssueId(formDTO.getIssueId());
entity.setShareUserId(tokenDto.getUserId());
entity.setInviteContent(null);

2
epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.10__add_colum_to_share_link_visit.sql

@ -0,0 +1,2 @@
ALTER TABLE `issue_share_link_visit_record`
ADD COLUMN `IF_JOIN_GROUP` tinyint(1) DEFAULT '0' COMMENT '是否同意进组,1是0否,在注册完居民之后,是否同意入组,如果同意发送入组申请,不同意此项默认为0';

0
epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.7__issue_share.sql → epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.9__issue_share.sql

18
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java

@ -95,10 +95,10 @@ public interface TopicConstant {
String REJECTED = "rejected";
String APPROVED = "approved";
String SUBMIT = "submit";
String IMAGE = " image";
String VIDEO = " video";
String VOICE = " voice";
String DOC = " doc";
String IMAGE = "image";
String VIDEO = "video";
String VOICE = "voice";
String DOC = "doc";
String GROUP_INFO_FAILURE = "根据groupId未查询到组信息......";
@ -107,4 +107,14 @@ public interface TopicConstant {
String COMMENT_TOPIC_FAILURE = "评论话题加分失败......";
String GET_CUSTOMER_ID_FAILURE = "查询客户ID失败......";
/**
* 字段 附件类型 小写 驼峰
*/
String FIELD_TOPIC_ATTACHMENT_TYPE_HUMP = "attachmentType";
/**
* 字段 附件类型 大写 下划线
*/
String FIELD_TOPIC_ATTACHMENT_TYPE = "ATTACHMENT_TYPE";
}

5
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/FileDTO.java

@ -1,5 +1,6 @@
package com.epmet.resi.group.dto.topic.form;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -15,10 +16,14 @@ import java.io.Serializable;
public class FileDTO implements Serializable {
private static final long serialVersionUID = -3930520724652521552L;
@JsonIgnore
private String name;
private String url;
@JsonIgnore
private String type;
@JsonIgnore
private String format;
@JsonIgnore
private Integer size;
private Integer duration;
}

25
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/ShareLinkTypeFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.resi.group.dto.topic.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 分享链接类型和Id入参
* @ClassName ShareLinkTypefFormDTO
* @Auth wangc
* @Date 2020-12-29 14:53
*/
@Data
public class ShareLinkTypeFormDTO implements Serializable {
@NotBlank(message = "链接Id不能为空")
private String id;
@NotBlank(message = "链接类型不能为空")
private String type;
@NotBlank(message = "用户Id不能为空")
private String userId;
}

45
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/TopicEventFormDTO.java

@ -0,0 +1,45 @@
package com.epmet.resi.group.dto.topic.form;
import com.epmet.commons.tools.enums.EventEnum;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Description 话题相关积分入参dto
* @ClassName TopicEventFormDTO
* @Auth wangc
* @Date 2021-01-04 16:37
*/
@Data
public class TopicEventFormDTO implements Serializable {
private static final long serialVersionUID = 2297474207576464905L;
/**
* 话题Id
*/
@NotBlank(message = "话题Id不能为空")
private String topicId;
/**
* 话题作者Id
*/
//private String topicAuthorId;
/**
* 议题发起人Id
*/
private String issuePublisherId;
/**
* 事件枚举
*/
@NotNull(message = "楼院小组事件枚举类型不能为空")
private EventEnum event;
/**
* 后续相关参数可再添加
*/
}

6
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/DraftDetailResultDTO.java

@ -1,5 +1,6 @@
package com.epmet.resi.group.dto.topic.result;
import com.epmet.resi.group.dto.topic.form.FileDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -16,6 +17,7 @@ import java.util.List;
public class DraftDetailResultDTO implements Serializable {
private static final long serialVersionUID = -7445417689558651158L;
private String groupId;
/**
* 话题草稿id
*/
@ -54,6 +56,6 @@ public class DraftDetailResultDTO implements Serializable {
/**
* 音频附件集合
*/
private List<String> voiceList;
private List<String> videoList;
private List<FileDTO> voiceList;
private List<FileDTO> videoList;
}

31
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/MemberRelationBetweenGroupAndGridResultDTO.java

@ -0,0 +1,31 @@
package com.epmet.resi.group.dto.topic.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 通过链接进入小程序的用户与链接所在的小组与网格的关系
* @ClassName MemberRelationBetweenGroupAndGridResultDTO
* @Auth wangc
* @Date 2020-12-29 14:58
*/
@Data
public class MemberRelationBetweenGroupAndGridResultDTO implements Serializable {
private static final long serialVersionUID = -5389490307870064071L;
/**
* 是否存在入组待审核记录true存在false不存在
*/
private Boolean awaitAudit = false;
/**
* 是否在群内标志已经在群内:true, 不在群内:false
*/
private Boolean inGroup = false;
/**
* 此人有没有加入所在小组所属网格下的任何一个小组true加入false未加入
*/
private Boolean inAnyGroup = false;
}

2
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/TopicBelongGroupResultDTO.java

@ -18,4 +18,6 @@ public class TopicBelongGroupResultDTO implements Serializable {
private static final long serialVersionUID = 8180287697221964032L;
private String groupId;
private String gridId;
}

20
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java

@ -164,4 +164,24 @@ public interface ResiGroupOpenFeignClient {
*/
@PostMapping("resi/group/topicsharelinkvisitrecord/checkinviterelationship")
Result<String> checkInviteRelationship(@RequestBody SharableTopicAndInviteeFormDTO param);
/**
* 自动审核
* @author zhaoqifeng
* @date 2020/12/30 10:11
* @return com.epmet.commons.tools.utils.Result
*/
@PostMapping("resi/group/topicdraft/autoAudit")
Result autoAudit();
/**
* @Description 根据事件枚举发送积分事件
* @param param
* @return void
* @author wangc
* @date 2021.01.04 16:41
*/
@PostMapping("resi/group/topic/sendevent")
Result sendEvent(@RequestBody TopicEventFormDTO param);
}

17
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java

@ -110,4 +110,21 @@ public class ResiGroupOpenFeignClientFallback implements ResiGroupOpenFeignClien
public Result<String> checkInviteRelationship(SharableTopicAndInviteeFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "selectTopicBelongGroup", param);
}
/**
* 自动审核
*
* @return com.epmet.commons.tools.utils.Result
* @author zhaoqifeng
* @date 2020/12/30 10:11
*/
@Override
public Result autoAudit() {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "autoAudit");
}
@Override
public Result sendEvent(TopicEventFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "sendEvent",param);
}
}

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

@ -48,6 +48,7 @@ import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.entity.GroupMemeberOperationEntity;
import com.epmet.modules.member.entity.ResiGroupMemberEntity;
import com.epmet.modules.member.redis.GroupMemeberOperationRedis;
import com.epmet.modules.member.redis.ResiGroupMemberRedis;
import com.epmet.modules.member.service.GroupMemeberOperationService;
import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.modules.topic.dao.ResiTopicDao;
@ -64,6 +65,7 @@ import com.epmet.resi.group.dto.group.ResiGroupDTO;
import com.epmet.resi.group.dto.group.ResiGroupInfoRedisDTO;
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.JoinGroupByShareLinkFormDTO;
import com.epmet.resi.group.dto.member.form.RemoveMemberFormDTO;
import com.epmet.resi.group.dto.member.result.JoinGroupApplyRealTimeResultDTO;
@ -107,6 +109,8 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl<GroupMemeb
@Autowired
private ResiGroupRedis groupRedis;
@Autowired
private ResiGroupMemberRedis memberRedis;
@Autowired
private EpmetUserOpenFeignClient userClient;
@Autowired
private TopicShareLinkVisitRecordDao topicShareLinkVisitRecordDao;
@ -274,8 +278,12 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl<GroupMemeb
groupMemeberOperation.setEnterGroupType(StringUtils.equals("topic",param.getShareLinkType()) ? ModuleConstant.ENTER_GROUP_TYPE_TOPIC_LINK : ModuleConstant.ENTER_GROUP_TYPE_ISSUE_LINK);
groupMemeberOperation.setGroupInvitationId(param.getShareLinkId());
groupMemeberOperation.setOperateUserId(param.getUserId());
groupMemeberOperation.setOperateDes(StringUtils.equals("topic",param.getShareLinkType()) ? "通过话题分享链接申请入组" : "通过议题分享链接申请入组");
ResiGroupMemberInfoRedisDTO memberInfo = memberRedis.get(groupId, inviter);
if(null != memberInfo && StringUtils.isNotBlank(memberInfo.getUserShowName()))
groupMemeberOperation.setOperateDes(String.format("通过%s的",memberInfo.getUserShowName())
+ (StringUtils.equals("topic",param.getShareLinkType()) ? "话题" : "议题" )+ "分享加入小组");
else
groupMemeberOperation.setOperateDes(StringUtils.equals("topic",param.getShareLinkType()) ? "通过话题分享申请入组" : "通过议题分享申请入组" );
//入组审核开关是开启状态则需要组长审核
if (StringUtils.equals(GroupStateConstant.AUDIT_SWITCH_OPEN , resiGroupDTO.getAuditSwitch())) {
groupMemeberOperation.setOperateStatus(MemberStateConstant.UNDER_AUDITTING);
@ -289,7 +297,6 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl<GroupMemeb
UserRoleDTO userRoleDTO = getUserRoleDTO(userRoleResponse.getData());
//新增一条邀请入群、直接审核通过的入群记录
groupMemeberOperation.setOperateStatus(MemberStateConstant.APPROVED);
groupMemeberOperation.setOperateDes("通过分享链接入组,入组审核开关关闭,直接入组");
save(groupMemeberOperation);
result.setStatus("entered");
//发送积分事件
@ -333,10 +340,11 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl<GroupMemeb
Result<List<UserBaseInfoResultDTO>> userResponse = userClient.queryUserBaseInfo(userParam);
if(userResponse.success() && !CollectionUtils.isEmpty(userResponse.getData())){
UserBaseInfoResultDTO user = userResponse.getData().get(NumConstant.ZERO);
pointEventMsg.setRemark( new StringBuilder("邀请").append("加入")
pointEventMsg.setRemark( new StringBuilder("邀请")
.append(user.getStreet()).append("-").append(user.getSurname())
.append(StringUtils.equals(NumConstant.ONE_STR,user.getGender()) ? "先生" :
StringUtils.equals(NumConstant.TWO_STR,user.getGender()) ? "女士" : "先生/女士")
.append("加入")
.append(resiGroupDTO.getGroupName()).append("小组").toString());
}
pointEventMsgList.add(pointEventMsg);

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

@ -545,10 +545,11 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
Result<List<UserBaseInfoResultDTO>> userResponse = userOpenFeignClient.queryUserBaseInfo(userParam);
if(userResponse.success() && !CollectionUtils.isEmpty(userResponse.getData())){
UserBaseInfoResultDTO user = userResponse.getData().get(NumConstant.ZERO);
pointEventMsg.setRemark( new StringBuilder("邀请").append("加入")
pointEventMsg.setRemark( new StringBuilder("邀请")
.append(user.getStreet()).append("-").append(user.getSurname())
.append(StringUtils.equals(NumConstant.ONE_STR,user.getGender()) ? "先生" :
StringUtils.equals(NumConstant.TWO_STR,user.getGender()) ? "女士" : "先生/女士")
.append("加入")
.append(resiGroupDTO.getGroupName()).append("小组").toString());
}

14
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java

@ -402,4 +402,18 @@ public class ResiTopicController {
return new Result<TopicAttachmentResultDTO>().ok(topicService.topicAttachmentList(formDTO));
}
/**
* @Description 根据事件枚举发送积分事件
* @param param
* @return void
* @author wangc
* @date 2021.01.04 16:41
*/
@PostMapping("sendevent")
public Result sendEvent(@RequestBody TopicEventFormDTO param){
ValidatorUtils.validateEntity(param);
topicService.sendTopicPointEventByEventType(param);
return new Result();
}
}

12
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/TopicDraftController.java

@ -180,4 +180,16 @@ public class TopicDraftController {
formDTO.setUserId(tokenDto.getUserId());
return new Result<List<MyAuditingListResultDTO>>().ok(topicDraftService.myAuditingList(formDTO));
}
/**
* 自动审核
* @author zhaoqifeng
* @date 2020/12/30 10:11
* @return com.epmet.commons.tools.utils.Result
*/
@PostMapping("autoAudit")
public Result autoAudit() {
topicDraftService.autoAudit();
return new Result();
}
}

17
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/TopicShareLinkRecordController.java

@ -10,11 +10,14 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.modules.topic.service.TopicShareLinkRecordService;
import com.epmet.modules.topic.service.TopicShareLinkVisitRecordService;
import com.epmet.resi.group.dto.topic.TopicShareLinkRecordDTO;
import com.epmet.resi.group.dto.topic.form.CreateUrlFormDTO;
import com.epmet.resi.group.dto.topic.form.ShareLinkTypeFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicBelongGroupFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicVisitFormDTO;
import com.epmet.resi.group.dto.topic.result.CreateUrlResultDTO;
import com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicBelongGroupResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicVisitResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
@ -108,4 +111,18 @@ public class TopicShareLinkRecordController {
return new Result<TopicVisitResultDTO>().ok(topicShareLinkRecordService.topicVisit(formDTO,tokenDto));
}
/**
* @Description 根据链接信息查询被邀请人在组/网格内的状态
* @param param
* @return com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO
* @author wangc
* @date 2020.12.29 15:01
*/
@PostMapping("getstatus")
public Result<MemberRelationBetweenGroupAndGridResultDTO> getStatus(@LoginUser TokenDto token, @RequestBody ShareLinkTypeFormDTO param){
param.setUserId(token.getUserId());
ValidatorUtils.validateEntity(param);
return new Result<MemberRelationBetweenGroupAndGridResultDTO>().ok(topicShareLinkRecordService.getStatusByLinkAndInvitee(param));
}
}

12
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/TopicDraftScanTaskDao.java

@ -19,7 +19,9 @@ package com.epmet.modules.topic.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.modules.topic.entity.TopicDraftScanTaskEntity;
import com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 话题附件检测任务表
@ -29,5 +31,15 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface TopicDraftScanTaskDao extends BaseDao<TopicDraftScanTaskEntity> {
void updateByTask(TopicDraftScanTaskEntity entity);
/**
* 获取检测任务信息
* @author zhaoqifeng
* @date 2020/12/29 14:30
* @param taskId
* @return com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO
*/
TopicDraftScanTaskDTO selectScanByTask(@Param("taskId") String taskId);
}

9
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/ResiTopicService.java

@ -331,4 +331,13 @@ public interface ResiTopicService extends BaseService<ResiTopicEntity> {
* @Description 获取话题附件信息
**/
TopicAttachmentResultDTO topicAttachmentList(TopicAttachmentFormDTO formDTO);
/**
* @Description 根据事件枚举发送积分事件
* @param param
* @return void
* @author wangc
* @date 2021.01.04 16:41
*/
void sendTopicPointEventByEventType(TopicEventFormDTO param);
}

12
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicDraftScanTaskService.java

@ -94,4 +94,16 @@ public interface TopicDraftScanTaskService extends BaseService<TopicDraftScanTas
void delete(String[] ids);
void updateByTask(TopicDraftScanTaskDTO dto);
TopicDraftScanTaskDTO getScanByTask(String taskId);
/**
* 获取审核中的数据
* @author zhaoqifeng
* @date 2020/12/29 17:57
* @param draftId
* @param status
* @return java.util.List<com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO>
*/
List<TopicDraftScanTaskDTO> getScanTaskList(String draftId, String status);
}

9
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicDraftService.java

@ -153,4 +153,13 @@ public interface TopicDraftService extends BaseService<TopicDraftEntity> {
* @Description 个人中心-我发表的话题-审核中列表
**/
List<MyAuditingListResultDTO> myAuditingList(MyAuditingListFormDTO formDTO);
/**
* 自动审核
* @author zhaoqifeng
* @date 2020/12/29 17:51
* @param
* @return void
*/
void autoAudit();
}

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

@ -6,9 +6,11 @@ import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.modules.topic.entity.TopicShareLinkRecordEntity;
import com.epmet.resi.group.dto.topic.TopicShareLinkRecordDTO;
import com.epmet.resi.group.dto.topic.form.CreateUrlFormDTO;
import com.epmet.resi.group.dto.topic.form.ShareLinkTypeFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicBelongGroupFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicVisitFormDTO;
import com.epmet.resi.group.dto.topic.result.CreateUrlResultDTO;
import com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicBelongGroupResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicVisitResultDTO;
@ -107,4 +109,13 @@ public interface TopicShareLinkRecordService extends BaseService<TopicShareLinkR
* @date 2020/12/18 下午3:34
*/
TopicVisitResultDTO topicVisit(TopicVisitFormDTO formDTO,TokenDto tokenDto);
/**
* @Description 根据链接信息查询被邀请人在组/网格内的状态
* @param param
* @return com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO
* @author wangc
* @date 2020.12.29 15:01
*/
MemberRelationBetweenGroupAndGridResultDTO getStatusByLinkAndInvitee(ShareLinkTypeFormDTO param);
}

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicShareLinkVisitRecordService.java

@ -5,6 +5,8 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.modules.topic.entity.TopicShareLinkVisitRecordEntity;
import com.epmet.resi.group.dto.topic.TopicShareLinkVisitRecordDTO;
import com.epmet.resi.group.dto.topic.form.SharableTopicAndInviteeFormDTO;
import com.epmet.resi.group.dto.topic.form.ShareLinkTypeFormDTO;
import com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO;
import java.util.List;
import java.util.Map;

21
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java

@ -43,6 +43,7 @@ import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.modules.comment.entity.ResiTopicCommentEntity;
import com.epmet.modules.constant.ResiGroupRedisKeys;
import com.epmet.modules.feign.EpmetUserFeignClient;
import com.epmet.modules.group.redis.ResiGroupRedis;
import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.redis.ResiGroupMemberRedis;
import com.epmet.modules.member.service.ResiGroupMemberService;
@ -63,6 +64,7 @@ import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import com.epmet.resi.group.dto.topic.form.ResiPublishCommentFormDTO;
import com.epmet.resi.group.dto.topic.result.IssueGridResultDTO;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
import com.google.common.base.CharMatcher;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@ -97,6 +99,9 @@ public class ResiTopicCommentServiceImpl extends BaseServiceImpl<ResiTopicCommen
@Autowired
ResiGroupMemberRedis resiGroupMemberRedis;
@Autowired
ResiGroupRedis groupRedis;
@Autowired
ResiGroupMemberDao resiGroupMemberDao;
@ -229,7 +234,7 @@ public class ResiTopicCommentServiceImpl extends BaseServiceImpl<ResiTopicCommen
// 话题评论前3次,加积分【对小组内话题进行15字以上评论】
Integer commentCount = baseDao.selectCommentCountByUserId(tokenDto.getUserId());
if (null != commentCount && commentCount <= NumConstant.THREE){
if (null == commentCount || commentCount <= NumConstant.THREE){
if (StringUtils.isNotBlank(commentContent) && commentContent.length() > NumConstant.FIFTEEN){
//mq的事件类型
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
@ -248,6 +253,20 @@ public class ResiTopicCommentServiceImpl extends BaseServiceImpl<ResiTopicCommen
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
pointEventMsg.setEventTag(mqBaseMsgDTO.getEventTag());
//某某小组中评论话题“某某某…”
StringBuilder builder = new StringBuilder(groupRedis.get(topic.getGroupId()).getGroupName()).append("小组中评论");
String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent());
if(StringUtils.isNotBlank(content)){
builder.append("话题");
builder.append("\"");
builder.append(
content.length() > NumConstant.TEN ?
(content.substring(NumConstant.ZERO,NumConstant.TEN) + "…") :
content);
builder.append("\"");
}else builder.append("语音话题");
pointEventMsg.setRemark(builder.toString());
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));

160
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java

@ -91,10 +91,12 @@ import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO;
import com.epmet.resi.group.dto.topic.result.*;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.base.CharMatcher;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jsoup.helper.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -697,6 +699,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
QueryWrapper<ResiTopicAttachmentEntity> wrapper = new QueryWrapper<>();
wrapper.eq(FieldConstant.DEL_FLAG,NumConstant.ZERO_STR);
wrapper.eq(TopicConstant.TOPIC_ID,topicId);
wrapper.eq(TopicConstant.FIELD_TOPIC_ATTACHMENT_TYPE,"image");
wrapper.orderByAsc(TopicConstant.SORT);
List<ResiTopicAttachmentEntity> attachments = resiTopicAttachmentDao.selectList(wrapper);
List<String> attachmentUrls = new ArrayList<>();
@ -1247,6 +1250,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
QueryWrapper<ResiTopicAttachmentEntity> wrapper = new QueryWrapper<>();
wrapper.eq(FieldConstant.DEL_FLAG,NumConstant.ZERO_STR);
wrapper.eq(TopicConstant.TOPIC_ID,formDTO.getTopicId());
wrapper.eq(TopicConstant.FIELD_TOPIC_ATTACHMENT_TYPE,"image");
wrapper.orderByAsc(TopicConstant.SORT);
List<ResiTopicAttachmentEntity> attachments = resiTopicAttachmentDao.selectList(wrapper);
if (attachments.size() != NumConstant.ZERO){
@ -1580,8 +1584,56 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
}
//发送积分
ResiTopicEntity topic = baseDao.selectById(topicTurnIssueFromDTO.getTopicId());
//mq的事件类型
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
mqBaseMsgDTO.setEventClass("resi_group");
//事件code 因为楼院小组的事件回调统一入口,外层的EventTag不能够判断具体的事件
//因为可能会一次发送多个事件集合,需要对集合里的对象逐个判断
mqBaseMsgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag());
List<BasePointEventMsg> pointEventMsgList = new ArrayList<>();
//1.话题被转为议题 组内成员
BasePointEventMsg pointEventMsg = new BasePointEventMsg();
pointEventMsg.setCustomerId(groupCache.getCustomerId());
pointEventMsg.setUserId(group.getTopicAuthorId());
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
pointEventMsg.setEventTag(EventEnum.TOPIC_SHIFTED_TO_ISSUE.getEventTag());
//某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为议题
String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent());
pointEventMsg.setRemark(new StringBuilder(groupCache.getGroupName()).append("小组中发布的")
.append(
StringUtils.isBlank(content)
|| StringUtils.equals("语音话题",content)? "语音话题" :
"话题\"" +
content
.substring(NumConstant.ZERO,content.length() < NumConstant.TEN ? content.length() : NumConstant.TEN)
+ (NumConstant.TEN > content.length() ? "\"" : "…\"")
).append("被转为议题").toString());
pointEventMsgList.add(pointEventMsg);
//2.转话题为议题 组长
BasePointEventMsg pointEventMsg2 = new BasePointEventMsg();
pointEventMsg2.setCustomerId(groupCache.getCustomerId());
pointEventMsg2.setUserId(topicTurnIssueFromDTO.getUserId());
pointEventMsg2.setActionFlag(MqConstant.PLUS);
pointEventMsg2.setIsCommon(false);
pointEventMsg2.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag());
//将话题“某某某…” (前十个字后面省略号) 转为议题
pointEventMsg2.setRemark(new StringBuilder("将")
.append(
new StringBuilder(new StringBuilder(pointEventMsg.getRemark().replaceFirst(new StringBuilder(groupCache.getGroupName()).append("小组中发布的").toString(),""))
.reverse().toString()
.replaceFirst("题议为转被","")).reverse()
).append("转为议题").toString());
pointEventMsgList.add(pointEventMsg2);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
if(!SendMqMsgUtils.sendMsg(mqBaseMsgDTO).success()){
log.error("话题转议题事件发送失败,参数:{}",JSON.toJSONString(topicTurnIssueFromDTO));
}
}
else {
ValidatorUtils.validateEntity(result, FirstTopicShiftedToIssueApplicationResultDTO.AllowAuditionGroup.class);
@ -1664,10 +1716,61 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
);
resiGroupRedis.set(groupCache);
}
//发送积分
//mq的事件类型
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
mqBaseMsgDTO.setEventClass("resi_group");
//事件code 因为楼院小组的事件回调统一入口,外层的EventTag不能够判断具体的事件
//因为可能会一次发送多个事件集合,需要对集合里的对象逐个判断
mqBaseMsgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag());
List<BasePointEventMsg> pointEventMsgList = new ArrayList<>();
//1.话题被转为议题 组内成员
BasePointEventMsg pointEventMsg = new BasePointEventMsg();
pointEventMsg.setCustomerId(groupCache.getCustomerId());
pointEventMsg.setUserId(group.getTopicAuthorId());
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
pointEventMsg.setEventTag(EventEnum.TOPIC_SHIFTED_TO_ISSUE.getEventTag());
//某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为议题
String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent());
pointEventMsg.setRemark(new StringBuilder(groupCache.getGroupName()).append("小组中发布的")
.append(
StringUtils.isBlank(content)
|| StringUtils.equals("语音话题",content)? "语音话题" :
"话题\"" +
content
.substring(NumConstant.ZERO,content.length() < NumConstant.TEN ? content.length() : NumConstant.TEN)
+ (NumConstant.TEN > content.length() ? "\"" : "…\"")
).append("被转为议题").toString());
pointEventMsgList.add(pointEventMsg);
//2.转话题为议题 组长
BasePointEventMsg pointEventMsg2 = new BasePointEventMsg();
pointEventMsg2.setCustomerId(groupCache.getCustomerId());
pointEventMsg2.setUserId(param.getUserId());
pointEventMsg2.setActionFlag(MqConstant.PLUS);
pointEventMsg2.setIsCommon(false);
pointEventMsg2.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag());
//将话题“某某某…” (前十个字后面省略号) 转为议题
pointEventMsg2.setRemark(new StringBuilder("将")
.append(
new StringBuilder(new StringBuilder(pointEventMsg.getRemark().replaceFirst(new StringBuilder(groupCache.getGroupName()).append("小组中发布的").toString(),"")).reverse()
.toString().replaceFirst("题议为转被","")).reverse()
).append("转为议题").toString());
pointEventMsgList.add(pointEventMsg2);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
if(!SendMqMsgUtils.sendMsg(mqBaseMsgDTO).success()){
log.error("话题转议题事件发送失败,参数:{}",JSON.toJSONString(param));
}
}
return issueInfo;
}
/**
* @Description 政府端查看议题详情时的话题相关信息
* @param govTopicIssueInfoFormDTO
@ -1896,6 +1999,61 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
return resultDTO;
}
/**
* @Description 根据事件枚举发送积分事件
* @param param
* @return void
* @author wangc
* @date 2021.01.04 16:41
*/
@Override
public void sendTopicPointEventByEventType(TopicEventFormDTO param) {
ResiTopicEntity topic = baseDao.selectById(param.getTopicId());
if(null == topic){
log.error("com.epmet.modules.topic.service.impl.ResiTopicServiceImpl.sendTopicPointEventByEventType,根据话题Id没有找到对应的话题信息,参数:{}",JSON.toJSONString(param
));
return;
}
ResiGroupInfoRedisDTO group = resiGroupRedis.get(topic.getGroupId());
if(null == group){
log.error("com.epmet.modules.topic.service.impl.ResiTopicServiceImpl.sendTopicPointEventByEventType,根据组Id没有找到对应的小组信息,组Id:{}",topic.getGroupId());
return;
}
//某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为项目
if(EventEnum.TOPIC_SHIFTED_TO_PROJECT == param.getEvent()){
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
mqBaseMsgDTO.setEventClass("resi_group");
mqBaseMsgDTO.setEventTag(EventEnum.TOPIC_SHIFTED_TO_PROJECT.getEventTag());
List<BasePointEventMsg> pointEventMsgList = new ArrayList<>();
//话题被转为项目 话题作者
BasePointEventMsg pointEventMsg = new BasePointEventMsg();
pointEventMsg.setCustomerId(group.getCustomerId());
pointEventMsg.setUserId(topic.getCreatedBy());
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
pointEventMsg.setEventTag(EventEnum.TOPIC_SHIFTED_TO_PROJECT.getEventTag());
//某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为议题
String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent());
pointEventMsg.setRemark(new StringBuilder(group.getGroupName()).append("小组中发布的")
.append(
StringUtils.isBlank(content) ||
StringUtils.equals("语音话题",content) ? "语音话题" :
"话题\"" +
content
.substring(NumConstant.ZERO,content.length() < NumConstant.TEN ? content.length() : NumConstant.TEN)
+ (NumConstant.TEN > content.length() ? "\"" : "…\"")
).append("被转为项目").toString());
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
if(!SendMqMsgUtils.sendMsg(mqBaseMsgDTO).success()){
log.error("话题转议题事件发送失败,参数:{}",JSON.toJSONString(param));
}
}
}
}

23
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftScanTaskServiceImpl.java

@ -26,6 +26,7 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.modules.topic.dao.TopicDraftScanTaskDao;
import com.epmet.modules.topic.entity.TopicDraftScanTaskEntity;
import com.epmet.modules.topic.service.TopicDraftScanTaskService;
import com.epmet.resi.group.constant.TopicConstant;
import com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -102,4 +103,26 @@ public class TopicDraftScanTaskServiceImpl extends BaseServiceImpl<TopicDraftSca
baseDao.updateByTask(entity);
}
@Override
public TopicDraftScanTaskDTO getScanByTask(String taskId) {
return baseDao.selectScanByTask(taskId);
}
/**
* 获取审核中的数据
*
* @return java.util.List<com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO>
* @author zhaoqifeng
* @date 2020/12/29 17:57
*/
@Override
public List<TopicDraftScanTaskDTO> getScanTaskList(String draftId, String status) {
QueryWrapper<TopicDraftScanTaskEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(draftId), "TOPIC_DRAFT_ID", draftId);
wrapper.eq(StringUtils.isNotBlank(status),"STATUS", status);
List<TopicDraftScanTaskEntity> entityList = baseDao.selectList(wrapper);
return ConvertUtils.sourceToTarget(entityList, TopicDraftScanTaskDTO.class);
}
}

328
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftServiceImpl.java

@ -72,6 +72,7 @@ import com.epmet.resi.group.dto.topic.form.*;
import com.epmet.resi.group.dto.topic.result.DraftDetailResultDTO;
import com.epmet.resi.group.dto.topic.result.MyAuditingListResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicAuditResultDTO;
import com.google.common.base.CharMatcher;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -239,6 +240,110 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
return list;
}
/**
* 自动审核
*
* @return void
* @author zhaoqifeng
* @date 2020/12/29 17:51
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void autoAudit() {
List<TopicDraftScanTaskDTO> taskList = topicDraftScanTaskService.getScanTaskList(null, TopicConstant.AUDITING);
if (CollectionUtils.isNotEmpty(taskList)) {
List<String> taskIds = taskList.stream().map(TopicDraftScanTaskDTO :: getTaskId).collect(Collectors.toList());
List<String> draftIds = taskList.stream().map(TopicDraftScanTaskDTO :: getTopicDraftId).collect(Collectors.toList());
Result<List<VoiceResultDTO>> voiceResults = ScanContentUtils.voiceResults(scanApiUrl.concat(voiceResultsMethod), taskIds);
if (voiceResults.success()) {
List<VoiceResultDTO> list = voiceResults.getData();
for (VoiceResultDTO item : list) {
TopicDraftScanTaskDTO taskDTO = topicDraftScanTaskService.getScanByTask(item.getTaskId());
if (TopicConstant.REVIEW.equals(item.getSuggestion())) {
//结果不确定
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(taskDTO.getTopicDraftAttachmentId());
dto.setStatus(TopicConstant.REVIEW);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
taskDTO.setStatus(TopicConstant.REVIEW);
topicDraftScanTaskService.update(taskDTO);
} else if (TopicConstant.BLOCK.equals(item.getSuggestion())) {
//结果违规
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(taskDTO.getTopicDraftAttachmentId());
dto.setStatus(TopicConstant.BLOCK);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
taskDTO.setStatus(TopicConstant.BLOCK);
topicDraftScanTaskService.update(taskDTO);
} else {
//审核通过
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(taskDTO.getTopicDraftAttachmentId());
dto.setStatus(TopicConstant.AUTO_PASSED);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
taskDTO.setStatus(TopicConstant.AUTO_PASSED);
topicDraftScanTaskService.update(taskDTO);
}
}
//判断草稿是否审核完成
draftIds.forEach(draftId -> {
List<TopicDraftScanTaskDTO> tasks = topicDraftScanTaskService.getScanTaskList(draftId, null);
String status = TopicConstant.AUTO_PASSED;
for (TopicDraftScanTaskDTO task : tasks) {
if (TopicConstant.AUDITING.equals(task.getStatus())) {
status = TopicConstant.AUDITING;
break;
} else if(TopicConstant.BLOCK.equals(task.getStatus())) {
status = TopicConstant.BLOCK;
} else if(TopicConstant.REVIEW.equals(task.getStatus())) {
if (!TopicConstant.BLOCK.equals(status)) {
status = TopicConstant.REVIEW;
}
} else {
if (!TopicConstant.BLOCK.equals(status) && !TopicConstant.REVIEW.equals(status)) {
status = TopicConstant.AUTO_PASSED;
}
}
}
if (TopicConstant.BLOCK.equals(status)) {
//草稿状态更新为block
TopicDraftEntity draftEntity = new TopicDraftEntity();
draftEntity.setId(draftId);
draftEntity.setDraftStatus(TopicConstant.BLOCK);
draftEntity.setDraftReason("语音存在违规内容");
baseDao.updateById(draftEntity);
} else if(TopicConstant.REVIEW.equals(status)) {
//草稿状态更新为review
TopicDraftEntity draftEntity = new TopicDraftEntity();
draftEntity.setId(draftId);
draftEntity.setDraftStatus(TopicConstant.REVIEW);
draftEntity.setDraftReason("需要人工审核");
baseDao.updateById(draftEntity);
} else if(TopicConstant.AUTO_PASSED.equals(status)) {
//草稿状态更新为auto_passed
AuditDraftTopicFormDTO formDTO = new AuditDraftTopicFormDTO();
formDTO.setTopicDraftId(draftId);
formDTO.setAuditType(TopicConstant.AUTO_PASSED);
audit(null, formDTO);
}
});
}
}
}
/**
* 发布话题
*
@ -251,7 +356,7 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
@Override
@Transactional(rollbackFor = Exception.class)
public void createTopic(TokenDto tokenDto, CreateTopicFormDTO formDTO) {
if(StringUtils.isEmpty(formDTO.getTopicContent()) && CollectionUtils.isEmpty(formDTO.getVideoList())) {
if(StringUtils.isBlank(formDTO.getTopicContent()) && CollectionUtils.isEmpty(formDTO.getVoiceList())) {
//话题内容和语音不能同时为空
log.error(ModuleConstant.TOPIC_CONTENT_AND_VOICE_IS_NULL);
throw new RenException(ModuleConstant.TOPIC_CONTENT_AND_VOICE_IS_NULL);
@ -265,6 +370,9 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
}
TopicDraftEntity topic = ConvertUtils.sourceToTarget(formDTO,TopicDraftEntity.class);
if (CollectionUtils.isNotEmpty(formDTO.getVoiceList()) && StringUtils.isBlank(formDTO.getTopicContent())) {
topic.setTopicContent("语音话题");
}
topic.setCreatedBy(tokenDto.getUserId());
topic.setDraftStatus(TopicConstant.AUDITING);
topic.setIsSee(NumConstant.ZERO_STR);
@ -278,9 +386,9 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
}
List<ImgTaskDTO> imageDTOList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(formDTO.getImageList())){
TopicDraftAttachmentDTO attachment = new TopicDraftAttachmentDTO();
int sort = 0;
for(String url : formDTO.getImageList()){
TopicDraftAttachmentDTO attachment = new TopicDraftAttachmentDTO();
attachment.setCustomerId(formDTO.getCustomerId());
attachment.setAttachmentUrl(url);
attachment.setTopicDraftId(topic.getId());
@ -298,10 +406,10 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
}
}
List<VoiceTaskDTO> voiceDTOList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(formDTO.getVideoList())){
TopicDraftAttachmentDTO attachment = new TopicDraftAttachmentDTO();
if(CollectionUtils.isNotEmpty(formDTO.getVoiceList())){
int sort = 0;
for(FileDTO file : formDTO.getVideoList()){
for(FileDTO file : formDTO.getVoiceList()){
TopicDraftAttachmentDTO attachment = new TopicDraftAttachmentDTO();
attachment.setCustomerId(formDTO.getCustomerId());
attachment.setAttachmentUrl(file.getUrl());
attachment.setTopicDraftId(topic.getId());
@ -309,6 +417,7 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
attachment.setAttachmentFormat(file.getUrl().substring(file.getUrl().lastIndexOf(".") + NumConstant.ONE).toLowerCase());
attachment.setSort(sort++);
attachment.setAttachmentType("voice");
attachment.setDuration(file.getDuration());
attachment.setStatus(TopicConstant.AUDITING);
topicDraftAttachmentService.save(attachment);
@ -428,68 +537,67 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
return taskEntity;
}).collect(Collectors.toList());
topicDraftScanTaskService.insertBatch(scanTaskEntityList);
//轮询
threadPool.submit(() -> {
while (true) {
Result<List<VoiceResultDTO>> voiceResults = ScanContentUtils.voiceResults(scanApiUrl.concat(voiceResultsMethod), taskIds);
if (voiceResults.success()) {
boolean isAllPass = true;
List<VoiceResultDTO> list = voiceResults.getData();
for (VoiceResultDTO item : list) {
if (TopicConstant.REVIEW.equals(item.getSuggestion())) {
//结果不确定
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(item.getDataId());
dto.setStatus(TopicConstant.REVIEW);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
TopicDraftScanTaskDTO taskDTO = new TopicDraftScanTaskDTO();
taskDTO.setTaskId(item.getTaskId());
taskDTO.setStatus(TopicConstant.REVIEW);
topicDraftScanTaskService.updateByTask(taskDTO);
isAllPass = false;
} else if (TopicConstant.BLOCK.equals(item.getSuggestion())) {
//结果违规
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(item.getDataId());
dto.setStatus(TopicConstant.BLOCK);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
TopicDraftScanTaskDTO taskDTO = new TopicDraftScanTaskDTO();
taskDTO.setTaskId(item.getTaskId());
taskDTO.setStatus(TopicConstant.BLOCK);
topicDraftScanTaskService.updateByTask(taskDTO);
isAllPass = false;
} else {
//审核通过
TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
dto.setId(item.getDataId());
dto.setStatus(TopicConstant.AUTO_PASSED);
dto.setReason(item.getLabelDesc());
topicDraftAttachmentService.update(dto);
TopicDraftScanTaskDTO taskDTO = new TopicDraftScanTaskDTO();
taskDTO.setTaskId(item.getTaskId());
taskDTO.setStatus(TopicConstant.AUTO_PASSED);
topicDraftScanTaskService.updateByTask(taskDTO);
}
//审核通过,发布话题
if(isAllPass) {
saveTopic(tokenDto, formDTO, topic.getId());
}
}
break;
}
try {
Thread.sleep(600000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// Result<List<VoiceResultDTO>> voiceResults = ScanContentUtils.voiceResults(scanApiUrl.concat(voiceResultsMethod), taskIds);
// if (voiceResults.success()) {
// boolean isAllPass = true;
// List<VoiceResultDTO> list = voiceResults.getData();
// for (VoiceResultDTO item : list) {
// TopicDraftScanTaskDTO taskDTO = topicDraftScanTaskService.getScanByTask(item.getTaskId());
// if (TopicConstant.REVIEW.equals(item.getSuggestion())) {
// //结果不确定
// TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
// dto.setId(taskDTO.getTopicDraftAttachmentId());
// dto.setStatus(TopicConstant.REVIEW);
// dto.setReason(item.getLabelDesc());
// topicDraftAttachmentService.update(dto);
//
// taskDTO.setStatus(TopicConstant.REVIEW);
// topicDraftScanTaskService.update(taskDTO);
//
// TopicDraftEntity draftEntity = new TopicDraftEntity();
// draftEntity.setId(topic.getId());
// draftEntity.setDraftStatus(TopicConstant.REVIEW);
// draftEntity.setDraftReason("需要人工审核");
// baseDao.updateById(draftEntity);
//
// isAllPass = false;
// } else if (TopicConstant.BLOCK.equals(item.getSuggestion())) {
// //结果违规
// TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
// dto.setId(taskDTO.getTopicDraftAttachmentId());
// dto.setStatus(TopicConstant.BLOCK);
// dto.setReason(item.getLabelDesc());
// topicDraftAttachmentService.update(dto);
//
// taskDTO.setStatus(TopicConstant.BLOCK);
// topicDraftScanTaskService.update(taskDTO);
//
// TopicDraftEntity draftEntity = new TopicDraftEntity();
// draftEntity.setId(topic.getId());
// draftEntity.setDraftStatus(TopicConstant.BLOCK);
// draftEntity.setDraftReason(item.getLabelDesc());
// baseDao.updateById(draftEntity);
//
// isAllPass = false;
// } else {
// //审核通过
// TopicDraftAttachmentDTO dto = new TopicDraftAttachmentDTO();
// dto.setId(taskDTO.getTopicDraftAttachmentId());
// dto.setStatus(TopicConstant.AUTO_PASSED);
// dto.setReason(item.getLabelDesc());
// topicDraftAttachmentService.update(dto);
//
// taskDTO.setStatus(TopicConstant.AUTO_PASSED);
// topicDraftScanTaskService.update(taskDTO);
// }
// //审核通过,发布话题
// if (isAllPass) {
// saveTopic(tokenDto, formDTO, topic.getId());
// }
// }
//
// }
}
} else {
@ -560,6 +668,7 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
result.setReleaseTime(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE).format(entity.getCreatedTime()));
result.setTopicContent(entity.getTopicContent());
result.setReleaseAddress(entity.getAddress());
result.setReason(entity.getDraftReason());
if (TopicConstant.AUDITING.equals(entity.getDraftStatus()) || TopicConstant.REVIEW.equals(entity.getDraftStatus())) {
result.setStatus(TopicConstant.AUDITING);
} else if (TopicConstant.BLOCK.equals(entity.getDraftStatus()) || TopicConstant.REJECTED.equals(entity.getDraftStatus())) {
@ -571,7 +680,13 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
result.setImageList(imageUrls);
//3.查询话题音频附件
List<String> voiceUrls = topicDraftAttachmentService.getFileList(formDTO.getTopicDraftId(), TopicConstant.VOICE).stream().map(TopicDraftAttachmentDTO::getAttachmentUrl).collect(Collectors.toList());
List<FileDTO> voiceUrls =
topicDraftAttachmentService.getFileList(formDTO.getTopicDraftId(), TopicConstant.VOICE).stream().map(item ->{
FileDTO fileDTO = new FileDTO();
fileDTO.setUrl(item.getAttachmentUrl());
fileDTO.setDuration(item.getDuration());
return fileDTO;
}).collect(Collectors.toList());
result.setVoiceList(voiceUrls);
//3.拿取用户信息
@ -594,6 +709,7 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
* @date 2020/12/18 14:58
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDraft(DraftDetailFormDTO formDTO) {
TopicDraftEntity entity = new TopicDraftEntity();
entity.setId(formDTO.getTopicDraftId());
@ -610,35 +726,58 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
* @date 2020/12/18 15:06
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void audit(TokenDto tokenDto, AuditDraftTopicFormDTO formDTO) {
TopicDraftEntity entity = new TopicDraftEntity();
entity.setId(formDTO.getTopicDraftId());
entity.setDraftReason(formDTO.getReason());
entity.setDraftStatus(formDTO.getAuditType());
baseDao.updateById(entity);
if (TopicConstant.APPROVED.equals(formDTO.getAuditType())) {
if (TopicConstant.APPROVED.equals(formDTO.getAuditType()) || TopicConstant.AUTO_PASSED.equals(formDTO.getAuditType())) {
TopicDraftEntity draft = baseDao.selectById(formDTO.getTopicDraftId());
//将草稿存入话题表
ResiTopicEntity resiTopic = ConvertUtils.sourceToTarget(entity, ResiTopicEntity.class);
ResiTopicEntity resiTopic = ConvertUtils.sourceToTarget(draft, ResiTopicEntity.class);
resiTopic.setId(null);
resiTopic.setStatus(TopicConstant.PUBLISHMENT);
resiTopic.setCreatedTime(null);
resiTopic.setUpdatedBy(draft.getCreatedBy());
resiTopic.setUpdatedTime(null);
resiTopicDao.insert(resiTopic);
entity = new TopicDraftEntity();
entity.setId(formDTO.getTopicDraftId());
entity.setTopicId(resiTopic.getId());
baseDao.updateById(entity);
//将草稿附件存入附件表
List<TopicDraftAttachmentDTO> attachmentList = topicDraftAttachmentService.getFileList(formDTO.getTopicDraftId(), null);
List<ResiTopicAttachmentEntity> topicAttachments = ConvertUtils.sourceToTarget(attachmentList, ResiTopicAttachmentEntity.class);
topicAttachments.forEach(item -> {
item.setId(null);
item.setTopicId(resiTopic.getId());
item.setCreatedBy(draft.getCreatedBy());
item.setUpdatedBy(draft.getCreatedBy());
});
resiTopicAttachmentDao.insertBatch(topicAttachments);
//将音频状态改为approved
List<TopicDraftAttachmentDTO> voiceList =
attachmentList.stream().filter(item -> TopicConstant.VOICE.equals(item.getAttachmentType()) && TopicConstant.REVIEW.equals(item.getStatus())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(voiceList)) {
voiceList.forEach(item -> item.setStatus(TopicConstant.APPROVED));
topicDraftAttachmentService.updateBatchById(ConvertUtils.sourceToTarget(voiceList, TopicDraftAttachmentEntity.class));
if (TopicConstant.APPROVED.equals(formDTO.getAuditType())) {
List<TopicDraftAttachmentDTO> voiceList =
attachmentList.stream().filter(item -> TopicConstant.VOICE.equals(item.getAttachmentType()) && TopicConstant.REVIEW.equals(item.getStatus())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(voiceList)) {
voiceList.forEach(item -> item.setStatus(TopicConstant.APPROVED));
topicDraftAttachmentService.updateBatchById(ConvertUtils.sourceToTarget(voiceList, TopicDraftAttachmentEntity.class));
}
}
//发送积分
sendMqMsg(draft.getCreatedBy(), draft.getCustomerId());
StringBuilder breviary = new StringBuilder();
String content = CharMatcher.WHITESPACE.trimFrom(draft.getTopicContent());
if(!StringUtils.isBlank(content)){
breviary.append("\"");
breviary.append(content.length() > NumConstant.TEN ? (content.substring(NumConstant.TEN) + "…") : content);
breviary.append("\"");
}else {
breviary.append("话题");
}
sendMqMsg(draft.getCreatedBy(), draft.getCustomerId(),draft.getCreatedTime(),resiGroupRedis.get(draft.getGroupId()).getGroupName(),breviary.toString());
}
//记录操作记录
entity = baseDao.selectById(formDTO.getTopicDraftId());
@ -646,7 +785,7 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
operationDTO.setCustomerId(entity.getCustomerId());
operationDTO.setTopicDraftId(formDTO.getTopicDraftId());
operationDTO.setOperateType(formDTO.getAuditType());
operationDTO.setCreatedBy(tokenDto.getUserId());
operationDTO.setCreatedBy(null != tokenDto ? tokenDto.getUserId() : "APP_USER");
topicDraftOperationService.save(operationDTO);
}
@ -671,6 +810,9 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
Date currentTime = new Date();
//2.创建话题
ResiTopicEntity topic = ConvertUtils.sourceToTarget(formDTO,ResiTopicEntity.class);
if (CollectionUtils.isNotEmpty(formDTO.getVoiceList()) && StringUtils.isBlank(formDTO.getTopicContent())) {
topic.setTopicContent("语音话题");
}
topic.setCreatedBy(tokenDto.getUserId());
topic.setStatus(TopicConstant.PUBLISHMENT);
resiTopicDao.insertOne(topic);
@ -680,9 +822,9 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
throw new RenException(ModuleConstant.NO_PRIMARY_KEY_RETURNED);
}
if(CollectionUtils.isNotEmpty(formDTO.getImageList())){
ResiTopicAttachmentEntity attachment = new ResiTopicAttachmentEntity();
int sort = 0;
for(String url : formDTO.getImageList()){
ResiTopicAttachmentEntity attachment = new ResiTopicAttachmentEntity();
attachment.setAttachmentUrl(url);
attachment.setTopicId(topic.getId());
attachment.setCreatedBy(tokenDto.getUserId());
@ -694,14 +836,15 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
}
if(CollectionUtils.isNotEmpty(formDTO.getVoiceList())){
ResiTopicAttachmentEntity attachment = new ResiTopicAttachmentEntity();
int sort = 0;
for(FileDTO file : formDTO.getVoiceList()){
ResiTopicAttachmentEntity attachment = new ResiTopicAttachmentEntity();
attachment.setAttachmentUrl(file.getUrl());
attachment.setTopicId(topic.getId());
attachment.setCreatedBy(tokenDto.getUserId());
attachment.setAttachmentFormat(file.getUrl().substring(file.getUrl().lastIndexOf(".") + NumConstant.ONE).toLowerCase());
attachment.setSort(sort++);
attachment.setDuration(file.getDuration());
attachment.setAttachmentType("voice");
resiTopicAttachmentDao.insertOne(attachment);
}
@ -747,12 +890,33 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
TopicDraftEntity draftEntity = new TopicDraftEntity();
draftEntity.setId(draftId);
draftEntity.setTopicId(topic.getId());
draftEntity.setDraftStatus(TopicConstant.AUTO_PASSED);
baseDao.updateById(draftEntity);
sendMqMsg(tokenDto.getUserId(), formDTO.getCustomerId());
TopicDraftEntity draft = baseDao.selectById(draftId);
StringBuilder breviary = new StringBuilder();
String content = CharMatcher.WHITESPACE.trimFrom(draft.getTopicContent());
if(!StringUtils.isBlank(content) && !StringUtils.equals("语音话题",content)){
breviary.append("话题\"");
breviary.append(content.length() > NumConstant.TEN ? (content.substring(NumConstant.ZERO,NumConstant.TEN) + "…") : content);
breviary.append("\"");
}else breviary.append("语音话题");
sendMqMsg(tokenDto.getUserId(), formDTO.getCustomerId(),draft.getCreatedTime(),resiGroupRedis.get(draft.getGroupId()).getGroupName(),breviary.toString());
}
private void sendMqMsg(String userId, String customerId) {
/**
* @Description 发送积分事件
* @param userId
* @param customerId
* @param targetDate 可为空
* @param groupName
* @param topicBreviary 话题内容摘要"内容…" 如果没有文字则是"语音话题"
* @return void
* @author wangc
* @date 2020.12.25 15:45
*/
private void sendMqMsg(String userId, String customerId, Date targetDate, String groupName, String topicBreviary) {
//6.发送积分
MqBaseMsgDTO mqBaseMsgDTO=new MqBaseMsgDTO();
//mq的事件类型
@ -765,6 +929,9 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
actPointEventMsg.setUserId(userId);
actPointEventMsg.setActionFlag(MqConstant.PLUS);
actPointEventMsg.setIsCommon(false);
actPointEventMsg.setRemark(new StringBuilder(groupName).append("小组中发布").append(topicBreviary).toString());
actPointEventMsg.setTargetDate(targetDate);
actPointEventMsg.setEventTag(EventEnum.PUBLISH_ONE_TOPIC.getEventTag());
actPointEventMsgList.add(actPointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(actPointEventMsgList));
@ -838,5 +1005,4 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
}
}
}

75
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicShareLinkRecordServiceImpl.java

@ -9,25 +9,37 @@ import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IssueShareLinkRecordDTO;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.modules.group.dao.ResiGroupDao;
import com.epmet.modules.group.entity.ResiGroupEntity;
import com.epmet.modules.member.dao.GroupMemeberOperationDao;
import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.topic.dao.ResiTopicDao;
import com.epmet.modules.topic.dao.TopicShareLinkRecordDao;
import com.epmet.modules.topic.dao.TopicShareLinkVisitRecordDao;
import com.epmet.modules.topic.entity.TopicShareLinkRecordEntity;
import com.epmet.modules.topic.entity.TopicShareLinkVisitRecordEntity;
import com.epmet.modules.topic.service.TopicShareLinkRecordService;
import com.epmet.modules.utils.ModuleConstant;
import com.epmet.resi.group.constant.TopicShareConstant;
import com.epmet.resi.group.dto.member.GroupMemeberOperationDTO;
import com.epmet.resi.group.dto.topic.TopicShareLinkRecordDTO;
import com.epmet.resi.group.dto.topic.form.CreateUrlFormDTO;
import com.epmet.resi.group.dto.topic.form.ShareLinkTypeFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicBelongGroupFormDTO;
import com.epmet.resi.group.dto.topic.form.TopicVisitFormDTO;
import com.epmet.resi.group.dto.topic.result.CreateUrlResultDTO;
import com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicBelongGroupResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicVisitResultDTO;
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.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
@ -40,6 +52,7 @@ import java.util.Map;
* @since v1.0.0 2020-12-18
*/
@Service
@Slf4j
public class TopicShareLinkRecordServiceImpl extends BaseServiceImpl<TopicShareLinkRecordDao, TopicShareLinkRecordEntity> implements TopicShareLinkRecordService {
@Autowired
@ -48,7 +61,12 @@ public class TopicShareLinkRecordServiceImpl extends BaseServiceImpl<TopicShareL
private ResiGroupMemberDao resiGroupMemberDao;
@Autowired
private GroupMemeberOperationDao groupMemeberOperationDao;
@Autowired
private GovIssueOpenFeignClient issueClient;
@Autowired
private ResiTopicDao topicDao;
@Autowired
private ResiGroupDao groupDao;
@Override
public PageData<TopicShareLinkRecordDTO> page(Map<String, Object> params) {
IPage<TopicShareLinkRecordEntity> page = baseDao.selectPage(
@ -146,6 +164,7 @@ public class TopicShareLinkRecordServiceImpl extends BaseServiceImpl<TopicShareL
}
TopicBelongGroupResultDTO resultDTO = new TopicBelongGroupResultDTO();
resultDTO.setGroupId(topicInfo.getGroupId());
resultDTO.setGridId(topicInfo.getGridId());
return resultDTO;
}
@ -191,4 +210,58 @@ public class TopicShareLinkRecordServiceImpl extends BaseServiceImpl<TopicShareL
return result;
}
/**
* @Description 根据链接信息查询被邀请人在组/网格内的状态
* @param param
* @return com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO
* @author wangc
* @date 2020.12.29 15:01
*/
@Override
public MemberRelationBetweenGroupAndGridResultDTO getStatusByLinkAndInvitee(ShareLinkTypeFormDTO param) {
MemberRelationBetweenGroupAndGridResultDTO relation = new MemberRelationBetweenGroupAndGridResultDTO();
String group = null;
if(StringUtils.equals("topic",param.getType())){
TopicShareLinkRecordEntity shareLinkInfo = baseDao.selectById(param.getId());
if(null != shareLinkInfo && StringUtils.isNotBlank(shareLinkInfo.getGroupId())) group = shareLinkInfo.getGroupId();
}
if(StringUtils.isBlank(group)){
Result<IssueShareLinkRecordDTO> issueShareLinkInfo = issueClient.shareLinkInfo(param.getId());
if(issueShareLinkInfo.success() && null != issueShareLinkInfo.getData()){
String issueId = issueShareLinkInfo.getData().getIssueId();
if(StringUtils.isNotBlank(issueId)){
group = topicDao.selectGroupIdByIssueId(issueId);
}
}
}
if(StringUtils.isBlank(group)) throw new RenException("根据分享链接Id没有找到对应的组Id");
String userId = param.getUserId();
GroupMemeberOperationDTO applyRecord = groupMemeberOperationDao.selectLatestRecord(group, userId);
if(null != applyRecord && StringUtils.equals(ModuleConstant.GROUP_STATUS_UNDER_AUDITTING,applyRecord.getOperateStatus())){
//under_auditing
relation.setAwaitAudit(true);
}
if(null != applyRecord && StringUtils.equals(ModuleConstant.AUDITING_OPERATION_APPROVAL,applyRecord.getOperateStatus())){
//approved
relation.setInGroup(true);
relation.setInAnyGroup(true);
}
if(!relation.getInAnyGroup()) {
ResiGroupEntity groupEntity = groupDao.selectById(group);
if(null == groupEntity || StringUtils.isBlank(groupEntity.getGridId()))
throw new RenException("没有找到相应的组记录");
List<String> groups = resiGroupMemberDao.getGroupIdByUserIdAndGridId(groupEntity.getGridId(), userId, NumConstant.ONE_STR);
if(!CollectionUtils.isEmpty(groups)){
relation.setInAnyGroup(true);
if(groups.contains(group)){
relation.setInGroup(true);
log.error("查出用户{}是组{}中成员,但是没有对应的入群记录",param.getUserId(),group);
}
}
}
return relation;
}
}

7
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicShareLinkVisitRecordServiceImpl.java

@ -6,12 +6,18 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.modules.member.dao.GroupMemeberOperationDao;
import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.topic.dao.TopicShareLinkVisitRecordDao;
import com.epmet.modules.topic.entity.TopicShareLinkVisitRecordEntity;
import com.epmet.modules.topic.service.TopicShareLinkVisitRecordService;
import com.epmet.resi.group.dto.topic.TopicShareLinkVisitRecordDTO;
import com.epmet.resi.group.dto.topic.form.SharableTopicAndInviteeFormDTO;
import com.epmet.resi.group.dto.topic.form.ShareLinkTypeFormDTO;
import com.epmet.resi.group.dto.topic.result.MemberRelationBetweenGroupAndGridResultDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -107,5 +113,4 @@ public class TopicShareLinkVisitRecordServiceImpl extends BaseServiceImpl<TopicS
public TopicShareLinkVisitRecordEntity getByLinkIdAndInvitee(String linkId, String invitee) {
return baseDao.selectRecordByLinkIdAndInvitee(linkId,invitee);
}
}

2
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicAttachmentDao.xml

@ -84,6 +84,7 @@
del_flag,
revision,
sort,
duration,
created_by,
created_time,
updated_by,
@ -100,6 +101,7 @@
#{item.delFlag},
#{item.revision},
#{item.sort},
#{item.duration},
#{item.createdBy},
now(),
#{item.updatedBy},

5
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml

@ -137,6 +137,7 @@
RESI_TOPIC_ATTACHMENT attachment
WHERE
attachment.DEL_FLAG = '0'
AND attachment.ATTACHMENT_TYPE = 'image'
GROUP BY attachment.TOPIC_ID
) attachement2
ON
@ -176,6 +177,7 @@
RESI_TOPIC_ATTACHMENT attachment
WHERE
attachment.DEL_FLAG = '0'
AND attachment.ATTACHMENT_TYPE = 'image'
GROUP BY attachment.TOPIC_ID
) attachement2
ON
@ -225,6 +227,7 @@
RESI_TOPIC_ATTACHMENT attachment
WHERE
attachment.DEL_FLAG = '0'
AND attachment.ATTACHMENT_TYPE = 'image'
GROUP BY attachment.TOPIC_ID
) attachement2
ON
@ -427,6 +430,8 @@
topic.ID = attachment.TOPIC_ID
AND
attachment.DEL_FLAG = '0'
AND
attachment.ATTACHMENT_TYPE = 'image'
WHERE
topic.DEL_FLAG = '0'
AND

16
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicDraftDao.xml

@ -28,8 +28,13 @@
<select id="selectTopicDraftByGroup" resultType="com.epmet.resi.group.dto.topic.result.TopicAuditResultDTO">
SELECT ID AS topicDraftId,
TOPIC_CONTENT AS topicContent,
CREATED_BY AS userName,
UNIX_TIMESTAMP(CREATED_TIME) AS releaseTime
<if test="status == 'review'">
UNIX_TIMESTAMP(CREATED_TIME) AS releaseTime,
</if>
<if test="status == 'rejected'">
UNIX_TIMESTAMP(UPDATED_TIME) AS releaseTime,
</if>
CREATED_BY AS userName
FROM
topic_draft
WHERE
@ -41,6 +46,13 @@
<if test="status == 'rejected'">
AND (DRAFT_STATUS = 'block' OR DRAFT_STATUS = 'rejected')
</if>
ORDER BY
<if test="status == 'review'">
CREATED_TIME DESC
</if>
<if test="status == 'rejected'">
UPDATED_TIME DESC
</if>
</select>
<select id="selectTopicDraftDetail" resultType="com.epmet.resi.group.dto.topic.result.DraftDetailResultDTO">

17
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicDraftScanTaskDao.xml

@ -23,6 +23,23 @@
`STATUS` = #{status}
WHERE TASK_ID = #{taskId}
</update>
<select id="selectScanByTask" resultType="com.epmet.resi.group.dto.topic.TopicDraftScanTaskDTO">
select ID,
CUSTOMER_ID,
TOPIC_DRAFT_ID,
TOPIC_DRAFT_ATTACHMENT_ID,
TASK_ID,
STATUS,
ATTACHMENT_TYPE,
DEL_FLAG,
REVISION,
CREATED_BY,
CREATED_TIME,
UPDATED_BY,
UPDATED_TIME
from topic_draft_scan_task
where TASK_ID = #{taskId}
</select>
</mapper>
Loading…
Cancel
Save