Browse Source

添加积分规则,根据积分规则给出相应积分

dev_shibei_match
wangchao 5 years ago
parent
commit
b5a86d06f2
  1. 12
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java
  2. 8
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java
  3. 2
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java
  4. 26
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java
  5. 66
      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/mapper/UserPointActionLogDao.xml
  7. 5
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueShareLinkVisitRecordDTO.java
  8. 10
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java
  9. 5
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java
  10. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueShareLinkVisitRecordController.java
  11. 22
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueShareLinkVisitRecordDao.java
  12. 4
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/entity/IssueShareLinkVisitRecordEntity.java
  13. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueShareLinkVisitRecordService.java
  14. 21
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueShareLinkVisitRecordServiceImpl.java
  15. 46
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueShareLinkVisitRecordDao.xml
  16. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/GroupMemeberOperationDTO.java
  17. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/ResiGroupMemberDTO.java
  18. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/ApplyingMemberResultDTO.java
  19. 1
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java
  20. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java
  21. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/GroupMemeberOperationEntity.java
  22. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/ResiGroupMemberEntity.java
  23. 55
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  24. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/TopicShareLinkVisitRecordController.java
  25. 1
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/ResiTopicDao.java
  26. 18
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/TopicShareLinkVisitRecordDao.java
  27. 9
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/TopicShareLinkVisitRecordService.java
  28. 21
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicShareLinkVisitRecordServiceImpl.java
  29. 10
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java
  30. 13
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml
  31. 35
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicShareLinkVisitRecordDao.xml
  32. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserResiInfoService.java
  33. 30
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

12
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java

@ -3,6 +3,7 @@ package com.epmet.commons.tools.dto.form.mq.eventmsg;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* desc积分相关事件消息体
@ -57,4 +58,13 @@ public class BasePointEventMsg implements Serializable {
* 业务id eg活动id
*/
private String sourceId;
}
/**
* 计算积分上限时的计算日期可以为空
* 场景 通过分享链接申请入组在组长审核完成后要给邀请人添加积分若被邀请人是已注册居民
* 给邀请人添加积分有上限计算上限的日期不能是组长审核的日期而是被邀请人发送入组审核的日期
* 对应的事件编码为invite_resident_into_group
* 只针对[邀请已注册的用户入组]事件生效
*/
private Date targetDate;
}

8
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java

@ -10,7 +10,13 @@ public enum EventEnum {
ACTIVE_SEND_POINT("active_send_point", "epmet_heart", "活动发放积分"),
REGISTER_VOLUNTEER("register_volunteer", "epmet_heart", "认证志愿者"),
ACTIVE_INSERT_LIVE("active_insert_live", "epmet_heart", "添加活动实况"),
PULL_NEW_RESIDENT("pull_new_resident","epmet_user","拉新用户")
INVITE_NEW_RESIDENT_INTO_GROUP("invite_new_resident_into_group","resi_group","拉新用户入组"),
INVITE_RESIDENT_INTO_GROUP("invite_resident_into_group","resi_group","邀请已注册的用户入组"),
PUBLISH_ONE_TOPIC("publish_one_topic","resi_group","发布话题"),
PARTICIPATE_ONE_TOPIC("participate_one_topic","resi_group","对小组内话题进行15字以上评论"),
TOPIC_SHIFTED_TO_ISSUE("topic_shifted_to_issue","resi_group","话题被转为议题(小组中发布的话题被组长转为议题)"),
SHIFT_TOPIC_TO_ISSUE("shift_topic_to_issue","resi_group","转话题为议题(将自建小组中话题转为议题)"),
TOPIC_SHIFTED_TO_PROJECT("topic_shifted_to_project","resi_group","话题被转为项目"),
;
private String eventClass;

2
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java

@ -52,5 +52,5 @@ public interface UserPointActionLogDao extends BaseDao<UserPointActionLogEntity>
* @author wangc
* @date 2020.07.31 15:11
**/
Integer selectSumByEvent(@Param("userId") String userId, @Param("eventId") String eventId, @Param("sourceId") String sourceId, @Param("customerId") String customerId, @Param("dateCheck") Date dateCheck);
Integer selectSumByEvent(@Param("userId") String userId, @Param("eventId") String eventId, @Param("sourceId") String sourceId, @Param("customerId") String customerId, @Param("dateCheck") Date dateCheck,@Param("right")Date right);
}

26
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java

@ -189,19 +189,24 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl<UserPointActi
@Override
@Transactional(rollbackFor = Exception.class)
public void grantPointByEvent(String eventCode,BasePointEventMsg event) {
if(!StringUtils.equals(EventEnum.REGISTER_VOLUNTEER.getEventTag(),eventCode) && !StringUtils.equals(EventEnum.ACTIVE_INSERT_LIVE.getEventTag(),eventCode)){
if(null == EventEnum.getEnum(eventCode)){
logger.error(String.format("无法识别事件类型与积分规则,消息体->【%s】", JSON.toJSON(event)));
throw new RenException("无法识别事件类型与积分规则");
}
PointRuleEntity ruleInfo = pointRuleService.getByEventCodeAndCustomerId(event.getCustomerId(),eventCode);
if(null != ruleInfo && StringUtils.equals(NumConstant.ONE_STR,ruleInfo.getEnabledFlag())){
//是否使用特定的上限日期检查日
boolean ifPastTargetDate = StringUtils.equals(EventEnum.INVITE_RESIDENT_INTO_GROUP.getEventTag(),ruleInfo.getEventCode());
Date dateCheck = null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.setTime(ifPastTargetDate ? event.getTargetDate() :new Date());
calendar.set(Calendar.HOUR_OF_DAY, NumConstant.ZERO);
calendar.set(Calendar.MINUTE, NumConstant.ZERO);
calendar.set(Calendar.SECOND, NumConstant.ZERO);
Date right = null;
//先判断周期,是否超过限值
RuleCycleEnum cycle = RuleCycleEnum.getEnum(ruleInfo.getRulePeriod());
switch(cycle){
@ -215,24 +220,33 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl<UserPointActi
case DAILY:
//今天零点
dateCheck = calendar.getTime();
calendar.add(Calendar.DATE,1);
right = calendar.getTime();
break;
case WEEKLY:
//本周第一天零点
calendar.add(Calendar.WEEK_OF_MONTH, 0);
calendar.set(Calendar.DAY_OF_WEEK, 2);
dateCheck = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH,7);
right = calendar.getTime();
break;
case MONTHLY:
//本月第一天零点
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
dateCheck = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
right = calendar.getTime();
break;
case YEARLY:
//本年第一天零点
int dayOfYear = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
calendar.add(Calendar.DAY_OF_YEAR, -dayOfYear + 1);
calendar.set(Calendar.DAY_OF_YEAR,1);
dateCheck = calendar.getTime();
calendar.add(Calendar.DAY_OF_YEAR,1);
right = calendar.getTime();
break;
default:
}
@ -251,7 +265,7 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl<UserPointActi
//校验是否达到上限
if(ruleInfo.getUpLimit() > NumConstant.ZERO){
//不按照sourceId查询,查询指定日期内的相关积分规则的总和
Integer sum = baseDao.selectSumByEvent(event.getUserId(),eventCode,null,event.getCustomerId(),dateCheck);
Integer sum = baseDao.selectSumByEvent(event.getUserId(),eventCode,null,event.getCustomerId(),dateCheck,right);
if(null == sum) sum = NumConstant.ZERO;
if(StringUtils.equals(ModuleConstant.OPERATION_TYPE_PLUS,ruleInfo.getOperateType())){
if(ruleInfo.getPoint() < NumConstant.ZERO){
@ -270,7 +284,7 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl<UserPointActi
}
//这里sum一定是正数
if(ruleInfo.getUpLimit() < sum){
log.info(String.format("该用户获取此类事件的积分已达上限,详细数据->【%s】", JSON.toJSON(event)));
log.warn(String.format("该用户获取此类事件的积分已达上限,详细数据->【%s】", JSON.toJSON(event)));
return ;
}
}
@ -290,7 +304,7 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl<UserPointActi
}else{
//如果不是添加实况和志愿者注册
//则统一使用EventEnum中的eventDesc作为eventStatement,eventTag作为eventId
eventName = EventEnum.getEnum(eventCode).getEventDesc();
eventName = ruleInfo.getRuleName();
eventStatement = event.getRemark();
}

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

@ -0,0 +1,66 @@
INSERT INTO point_rule_default (
`ID`,
`RULE_NAME`,
`RULE_DESC`,
`EVENT_CODE`,
`FUNCTION_ID`,
`OPERATE_TYPE`,
`UP_LIMIT`,
`UP_LIMIT_DESC`,
`UP_LIMIT_PREFIX`,
`RULE_PERIOD`,
`POINT`,
`POINT_UNIT`,
`ENABLED_FLAG`,
`DEL_FLAG`,
`REVISION`,
`CREATED_BY`,
`CREATED_TIME`,
`UPDATED_BY`,
`UPDATED_TIME`
)
VALUES
(
'3','发布话题',
'对小组内话题进行15字以上评论','publish_one_topic',
'43addd0735230c01eedbb38d721076b0','plus',
15,'每天上限为15分',null,'day',5,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'4','参与话题',
'楼院小组内通过我有话说功能发布话题','participate_one_topic',
'43addd0735230c01eedbb38d721076b0','plus',
6,'每天上限为6分',null,'day',2,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'5','话题被转为议题',
'小组中发布的话题被组长转为议题','topic_shifted_to_issue',
'43addd0735230c01eedbb38d721076b0','plus',
0,'无上限',null,'day',15,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'6','话题被转为项目',
'小组中发布的话题被组长转为议题 又被网格员转为项目','topic_shifted_to_project',
'43addd0735230c01eedbb38d721076b0','plus',
0,'无上限',null,'day',30,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'7','转话题为议题',
'将自建小组中话题转为议题','shift_topic_to_issue',
'43addd0735230c01eedbb38d721076b0','plus',
15,'每天上限为15分',null,'day',5,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'8','邀请新人入组',
'通过话题/议题分享链接邀请新用户入组,需注册居民成功入组方能获得','invite_new_resident_into_group',
'43addd0735230c01eedbb38d721076b0','plus',
0,'无上限',null,'day',30,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
),
(
'9','邀请入组',
'通过话题/议题分享链接邀请已注册用户入组,需通过入组审核方能获得','invite_resident_into_group',
'43addd0735230c01eedbb38d721076b0','plus',
25,'每天上限为25分',null,'day',5,'time','0','0',0,'APP_USER',now(),'APP_USER',now()
)

4
epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointActionLogDao.xml

@ -61,6 +61,8 @@
<if test="null != dateCheck">
AND CREATED_TIME <![CDATA[ >= ]]> #{dateCheck}
</if>
<if test="null != right">
AND CREATED_TIME <![CDATA[ < ]]> #{right}
</if>
</select>
</mapper>

5
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueShareLinkVisitRecordDTO.java

@ -63,6 +63,11 @@ public class IssueShareLinkVisitRecordDTO implements Serializable {
*/
private Integer isInviteRegister;
/**
* 是否同意进组,1是0否在注册完居民之后是否同意入组如果同意发送入组申请不同意此项默认为0
*/
private Integer ifJoinGroup;
/**
* 删除状态0:正常1删除
*/

10
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java

@ -223,4 +223,14 @@ public interface GovIssueOpenFeignClient {
*/
@PostMapping("/gov/issue/issuesharelinkvisitrecord/checkinviterelationship")
Result<String> checkInviteRelationship(@RequestBody SharableIssueAndInviteeFormDTO param);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:27
*/
@PostMapping("/gov/issue/issuesharelinkvisitrecord/inviter")
Result<Map<String,String>> inviter(@RequestParam("invitee")String invitee,@RequestParam("issues")List<String> issues);
}

5
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java

@ -198,4 +198,9 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient
public Result<String> checkInviteRelationship(SharableIssueAndInviteeFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "checkInviteRelationship", param);
}
@Override
public Result<Map<String,String>> inviter(String invitee,List<String> issues) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "inviter", invitee,issues);
}
}

13
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueShareLinkVisitRecordController.java

@ -13,6 +13,7 @@ import com.epmet.service.IssueShareLinkVisitRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@ -82,4 +83,16 @@ public class IssueShareLinkVisitRecordController {
ValidatorUtils.validateEntity(param);
return new Result<String>().ok(issueShareLinkVisitRecordService.checkInviteRelationship(param));
}
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:27
*/
@PostMapping("inviter")
public Result<Map<String,String>> inviter(@RequestParam("invitee")String invitee,@RequestParam("issues") List<String> issues){
return new Result<Map<String,String>>().ok(issueShareLinkVisitRecordService.getInviter(invitee,issues));
}
}

22
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueShareLinkVisitRecordDao.java

@ -22,6 +22,8 @@ import com.epmet.entity.IssueShareLinkVisitRecordEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 议题分享链接访问记录表
*
@ -50,4 +52,24 @@ public interface IssueShareLinkVisitRecordDao extends BaseDao<IssueShareLinkVisi
* @date 2020.12.18 15:50
*/
int updateInviteRegister(@Param("linkId") String linkId, @Param("invitee") String invitee);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @param issues 同一个组下的所有议题Id
* @return java.lang.String
* @author wangc
* @date 2020.12.21 16:27
*/
String selectInviterByNewInvitee(@Param("invitee") String invitee,@Param("issues") List<String> issues);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @param issues 同一个组下的所有议题Id
* @return java.lang.String
* @author wangc
* @date 2020.12.21 16:27
*/
String selectInviterByRegisteredInvitee(@Param("invitee") String invitee,@Param("issues") List<String> issues);
}

4
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/entity/IssueShareLinkVisitRecordEntity.java

@ -63,4 +63,8 @@ public class IssueShareLinkVisitRecordEntity extends BaseEpmetEntity {
*/
private Integer isInviteRegister;
/**
* 是否同意进组,1是0否在注册完居民之后是否同意入组如果同意发送入组申请不同意此项默认为0
*/
private Integer ifJoinGroup;
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueShareLinkVisitRecordService.java

@ -101,4 +101,13 @@ public interface IssueShareLinkVisitRecordService extends BaseService<IssueShare
* @date 2020.12.18 15:24
*/
String checkInviteRelationship(SharableIssueAndInviteeFormDTO param);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:27
*/
Map<String,String> getInviter(String invitee,List<String> issues);
}

21
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueShareLinkVisitRecordServiceImpl.java

@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -111,4 +112,24 @@ public class IssueShareLinkVisitRecordServiceImpl extends BaseServiceImpl<IssueS
return inviterId;
}
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:27
*/
@Override
public Map<String,String> getInviter(String invitee,List<String> issues) {
Map<String,String> result = new HashMap<>();
String inviterInvitedNewResident = baseDao.selectInviterByNewInvitee(invitee,issues);
if(StringUtils.isNotBlank(inviterInvitedNewResident)) result.put("new",inviterInvitedNewResident);
else{
String inviterInvitedRegisteredResident = baseDao.selectInviterByRegisteredInvitee(invitee,issues);
if(StringUtils.isNotBlank(inviterInvitedRegisteredResident)) result.put("registered",inviterInvitedRegisteredResident);
}
return result;
}
}

46
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueShareLinkVisitRecordDao.xml

@ -14,7 +14,7 @@
AND
invitee_user_id = #{invitee}
AND
is_invite_register = 0
is_invite_register = 1
LIMIT 1
</select>
@ -22,7 +22,7 @@
UPDATE
issue_share_link_visit_record
SET
is_invite_register = '1'
is_invite_register = 0
WHERE
del_flag = '0'
AND
@ -30,4 +30,46 @@
AND
invitee_user_id = #{invitee}
</update>
<select id="selectInviterByNewInvitee" resultType="string">
SELECT
visit.share_user_id
FROM issue_share_link_visit_record visit
INNER JOIN issue_share_link_record link
ON visit.shareLinkRecId = link.ID AND link.del_flag = '0'
<foreach collection="issues" item="issueId" open="AND (" separator=" OR " close=" )">
link.issue_id = #{issueId}
</foreach>
INNER
WHERE
visit.del_flag = '0'
AND
visit.invitee_user_id = #{invitee}
AND
visit.is_invite_register = 0
AND
visit.if_join_group = 1
LIMIT 1
</select>
<select id="selectInviterByRegisteredInvitee" resultType="string">
SELECT
visit.share_user_id
FROM issue_share_link_visit_record visit
INNER JOIN issue_share_link_record link
ON visit.shareLinkRecId = link.ID AND link.del_flag = '0'
<foreach collection="issues" item="issueId" open="AND (" separator=" OR " close=" )">
link.issue_id = #{issueId}
</foreach>
INNER
WHERE
visit.del_flag = '0'
AND
visit.invitee_user_id = #{invitee}
AND
visit.is_invite_register = 1
AND
visit.if_join_group = 1
LIMIT 1
</select>
</mapper>

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群主创建群自动进入群扫码入群 - scancode
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群扫码入群 - scancode话题分享链接 - topic_share_link议题分享链接 - issue_share_link
*/
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群主创建群自动进入群扫码入群 - scancode
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群扫码入群 - scancode话题分享链接 - topic_share_link议题分享链接 - issue_share_link
*/
private String enterGroupType;

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

@ -48,7 +48,7 @@ public class ApplyingMemberResultDTO implements Serializable {
private String status;
/**
* invited通过链接加入 join申请加入scancode通过扫码加入
* invited通过链接加入 join申请加入scancode通过扫码加入话题分享链接 - topic_share_link议题分享链接 - issue_share_link
*/
private String enterGroupType;

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

@ -18,6 +18,7 @@ import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.HashMap;
import java.util.List;

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

@ -108,6 +108,6 @@ public class ResiGroupOpenFeignClientFallback implements ResiGroupOpenFeignClien
@Override
public Result<String> checkInviteRelationship(SharableTopicAndInviteeFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "selectTopicBelongGroup",param);
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "selectTopicBelongGroup", param);
}
}

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扫码入群 - scancode
* 入群方式受邀请入群 - invited 主动加入 - join扫码入群 - scancode话题分享链接 - topic_share_link议题分享链接 - issue_share_link
*/
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扫码入群 - scancode
* 入群方式受邀请入群 - invited 主动加入 - join扫码入群 - scancode话题分享链接 - topic_share_link议题分享链接 - issue_share_link
*/
private String enterGroupType;

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

@ -21,20 +21,22 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.constant.ServiceConstant;
import com.epmet.commons.tools.constant.*;
import com.epmet.commons.tools.dto.form.mq.MqBaseMsgDTO;
import com.epmet.commons.tools.dto.form.mq.eventmsg.BasePointEventMsg;
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;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.SendMqMsgUtils;
import com.epmet.constant.ReadFlagConstant;
import com.epmet.dto.form.*;
import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.modules.constant.GroupMemberConstant;
import com.epmet.modules.constant.UserMessageConstant;
import com.epmet.modules.feign.EpmetUserFeignClient;
@ -48,7 +50,9 @@ import com.epmet.modules.member.entity.ResiGroupMemberEntity;
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;
import com.epmet.modules.topic.service.ResiTopicService;
import com.epmet.modules.topic.service.TopicShareLinkVisitRecordService;
import com.epmet.modules.utils.ModuleConstant;
import com.epmet.resi.group.constant.EnterGroupTypeConstant;
import com.epmet.resi.group.constant.LeaderFlagConstant;
@ -111,7 +115,8 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
@Autowired
private ResiTopicService resiTopicService;
@Autowired
private ResiTopicDao topicDao;
@Autowired
private ResiGroupMemberRedis resiGroupMemberRedis;
@ -121,6 +126,10 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
private ResiGroupDao resiGroupDao;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private GovIssueOpenFeignClient issueClient;
@Autowired
private TopicShareLinkVisitRecordService topicShareLinkVisitRecordService;
@Override
public PageData<ResiGroupMemberDTO> page(Map<String, Object> params) {
@ -484,6 +493,42 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
}
resiGroupRedis.set(groupCache);
}
//9、查询当前入组申请人是否是通过话题/议题链接入组,如果是,要给邀请人发送积分事件
Map<String,String> inviterMap = null;
if(StringUtils.equals(groupMemeberOperationDTO.getEnterGroupType(),ModuleConstant.ENTER_GROUP_TYPE_TOPIC_LINK)){
inviterMap = topicShareLinkVisitRecordService.getInviter(groupMemeberOperationDTO.getCustomerUserId(),groupMemeberOperationDTO.getGroupId());
}else if(StringUtils.equals(groupMemeberOperationDTO.getEnterGroupType(),ModuleConstant.ENTER_GROUP_TYPE_ISSUE_LINK)){
List<String> issues = topicDao.selectIssueIdsByGroupId(groupMemeberOperationDTO.getGroupId());
if(!CollectionUtils.isEmpty(issues)){
Result<Map<String,String>> inviterResult = issueClient.inviter(groupMemeberOperationDTO.getCustomerUserId(),issues);
if(inviterResult.success() && !CollectionUtils.isEmpty(inviterResult.getData())) inviterMap = inviterResult.getData();
}
}
if(!CollectionUtils.isEmpty(inviterMap)){
//groupMemeberOperationDTO.getCreatedTime()
boolean isNew = StringUtils.isBlank(inviterMap.get("new"));
//mq的事件类型
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
//事件code
mqBaseMsgDTO.setEventTag(isNew ? EventEnum.INVITE_NEW_RESIDENT_INTO_GROUP.getEventTag() : EventEnum.INVITE_RESIDENT_INTO_GROUP.getEventTag());
List<BasePointEventMsg> pointEventMsgList = new ArrayList<>();
BasePointEventMsg pointEventMsg = new BasePointEventMsg();
pointEventMsg.setCustomerId(groupCache.getCustomerId());
pointEventMsg.setUserId(isNew ? inviterMap.get("new") : inviterMap.get("register"));
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
if(!isNew) pointEventMsg.setTargetDate(groupMemeberOperationDTO.getCreatedTime());
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
Result result= SendMqMsgUtils.sendMsg(mqBaseMsgDTO);
if(!result.success()){
logger.error((isNew ? "拉新用户入组事件发送失败" : "邀请已注册用户入组事件发送失败").concat(",参数:%s"),JSON.toJSONString(agreeApplyFormDTO));
}
}
}
/**

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

@ -80,4 +80,4 @@ public class TopicShareLinkVisitRecordController {
public Result<String> checkInviteRelationship(@RequestBody SharableTopicAndInviteeFormDTO param){
return new Result<String>().ok(topicShareLinkVisitRecordService.checkInviteRelationship(param));
}
}
}

1
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/ResiTopicDao.java

@ -193,4 +193,5 @@ public interface ResiTopicDao extends BaseDao<ResiTopicEntity> {
*/
List<String> selectTopicIdsByGroup(@Param("groupId") String groupId);
List<String> selectIssueIdsByGroupId(@Param("groupId")String groupId);
}

18
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/TopicShareLinkVisitRecordDao.java

@ -33,4 +33,22 @@ public interface TopicShareLinkVisitRecordDao extends BaseDao<TopicShareLinkVisi
* @date 2020.12.18 15:46
*/
int updateInviteRegister(@Param("linkId") String linkId, @Param("invitee") String invitee);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return java.lang.String
* @author wangc
* @date 2020.12.21 16:29
*/
String selectInviterByNewInvitee(@Param("invitee") String invitee,@Param("groupId")String groupId);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return java.lang.String
* @author wangc
* @date 2020.12.21 16:29
*/
String selectInviterByRegisteredInvitee(@Param("invitee") String invitee,@Param("groupId")String groupId);
}

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

@ -85,4 +85,13 @@ public interface TopicShareLinkVisitRecordService extends BaseService<TopicShare
* @date 2020.12.18 13:56
*/
String checkInviteRelationship(SharableTopicAndInviteeFormDTO param);
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:29
*/
Map<String,String> getInviter(String invitee,String groupId);
}

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

@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -94,4 +95,24 @@ public class TopicShareLinkVisitRecordServiceImpl extends BaseServiceImpl<TopicS
return inviterId;
}
/**
* @Description 通过被邀请人锁定其是通过哪一条链接进的组查询出该链接的邀请人Id
* @param invitee
* @return Map<String,String> key : new | registered
* @author wangc
* @date 2020.12.21 16:29
*/
@Override
public Map<String,String> getInviter(String invitee,String groupId) {
Map<String,String> result = new HashMap<>();
String inviterInvitedNewResident = baseDao.selectInviterByNewInvitee(invitee,groupId);
if(StringUtils.isBlank(inviterInvitedNewResident)){
String inviterInvitedRegisteredResident = baseDao.selectInviterByRegisteredInvitee(invitee,groupId);
if(StringUtils.isNotBlank(inviterInvitedRegisteredResident))
result.put("registered",inviterInvitedRegisteredResident);
}else
result.put("new",inviterInvitedNewResident);
return result;
}
}

10
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java

@ -370,4 +370,14 @@ public interface ModuleConstant extends Constant {
String CODE_INVITE_PAGE = "pages/group/group/invitation/invitation";
String TOPIC_CONTENT_AND_VOICE_IS_NULL = "请输入话题内容或语音";
/**
* 通过话题分享链接进组
*/
String ENTER_GROUP_TYPE_TOPIC_LINK = "topic_share_link";
/**
* 通过议题分享链接进组
*/
String ENTER_GROUP_TYPE_ISSUE_LINK = "issue_share_link";
}

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

@ -527,5 +527,18 @@
AND GROUP_ID = #{groupId}
AND STATUS != 'hidden'
</select>
<select id="selectIssueIdsByGroupId" resultType="string">
SELECT
issue_id
FROM
resi_topic
WHERE
del_flag = '0'
AND
groupId = #{groupId}
AND
shift_issue = 1
</select>
</mapper>

35
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/TopicShareLinkVisitRecordDao.xml

@ -14,7 +14,7 @@
AND
invitee_user_id = #{invitee}
AND
is_invite_register = 0
is_invite_register = 1
LIMIT 1
</select>
@ -22,7 +22,7 @@
UPDATE
topic_share_link_visit_record
SET
is_invite_register = '1'
is_invite_register = 0
WHERE
del_flag = '0'
AND
@ -30,4 +30,35 @@
AND
invitee_user_id = #{invitee}
</update>
<select id="selectInviterByNewInvitee" resultType="string">
SELECT
visit.share_user_id
FROM topic_share_link_visit_record visit
INNER JOIN topic_share_link_record link
ON visit.share_link_rec_id = link.ID AND link.del_flag = '0' AND link.group_id = #{groupId}
WHERE
visit.del_flag = '0'
AND
visit.invitee_user_id = #{invitee}
AND
visit.is_invite_register = 0
LIMIT 1
</select>
<select id="selectInviterByRegisteredInvitee" resultType="string">
SELECT
visit.share_user_id
FROM topic_share_link_visit_record visit
INNER JOIN topic_share_link_record link
ON visit.share_link_rec_id = link.ID AND link.del_flag = '0' AND link.group_id = #{groupId}
WHERE
visit.del_flag = '0'
AND
visit.invitee_user_id = #{invitee}
AND
visit.is_invite_register = 1
LIMIT 1
</select>
</mapper>

4
epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserResiInfoService.java

@ -179,8 +179,8 @@ public interface UserResiInfoService extends BaseService<UserResiInfoEntity> {
/**
* @Description 在分享链接之后完成注册居民之后调用的接口
* 作用
* 给邀请人加积分
* 更改邀请浏览记录里"是否通过邀请链接注册居民"
*
* 更改邀请浏览记录里"是否通过邀请链接注册居民"
* @param param
* @return void
* @author wangc

30
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

@ -412,8 +412,8 @@ public class UserResiInfoServiceImpl extends BaseServiceImpl<UserResiInfoDao, Us
/**
* @Description 在分享链接之后完成注册居民之后调用的接口
* 作用
* 给邀请人加积分
* 更改邀请浏览记录里"是否通过邀请链接注册居民"
*
* 更改邀请浏览记录里"是否通过邀请链接注册居民"
* @param param
* @return void
* @author wangc
@ -421,33 +421,11 @@ public class UserResiInfoServiceImpl extends BaseServiceImpl<UserResiInfoDao, Us
*/
@Override
public void submitInLink(AfterRegisterResidentInSharableLinkFormDTO param) {
Result<String> response;
if(StringUtils.equals(ModuleConstant.SHARABLE_LINK_FROM_ISSUE,param.getLinkType()))
response = govIssueClient.checkInviteRelationship(ConvertUtils.sourceToTarget(param,SharableIssueAndInviteeFormDTO.class));
govIssueClient.checkInviteRelationship(ConvertUtils.sourceToTarget(param,SharableIssueAndInviteeFormDTO.class));
else
response = resiGroupClient.checkInviteRelationship(ConvertUtils.sourceToTarget(param, SharableTopicAndInviteeFormDTO.class));
if(null == response || !response.success() || StringUtils.isBlank(response.getData())){
//mq的事件类型
MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO();
//事件code
mqBaseMsgDTO.setEventTag(EventEnum.PULL_NEW_RESIDENT.getEventTag());
List<BasePointEventMsg> pointEventMsgList = new ArrayList<>();
BasePointEventMsg pointEventMsg = new BasePointEventMsg();
pointEventMsg.setCustomerId(userCustomerDao.selectByUserId(response.getData()).getCustomerId());
pointEventMsg.setUserId(response.getData());
pointEventMsg.setActionFlag(MqConstant.PLUS);
pointEventMsg.setIsCommon(false);
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
Result result= SendMqMsgUtils.sendMsg(mqBaseMsgDTO);
if(!result.success()){
log.error("拉新用户事件发送失败");
}
}
resiGroupClient.checkInviteRelationship(ConvertUtils.sourceToTarget(param, SharableTopicAndInviteeFormDTO.class));
}
}

Loading…
Cancel
Save