Browse Source

用户注册记录查询,保证一个用户最多只返回一条数据

dev_shibei_match
wangchao 5 years ago
parent
commit
7df97b77db
  1. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/RegisterRelationDao.java
  2. 91
      epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java
  3. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/GridLatestServiceImpl.java
  4. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java
  5. 28
      epmet-user/epmet-user-server/src/main/resources/mapper/RegisterRelationDao.xml

5
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/RegisterRelationDao.java

@ -18,11 +18,11 @@
package com.epmet.dao; package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.RegisterRelationDTO;
import com.epmet.entity.RegisterRelationEntity; import com.epmet.entity.RegisterRelationEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
/** /**
@ -44,4 +44,7 @@ public interface RegisterRelationDao extends BaseDao<RegisterRelationEntity> {
* @date 2020.07.23 15:31 * @date 2020.07.23 15:31
**/ **/
RegisterRelationEntity selectRegisteredGridIdByUserId(@Param("userId") String userId); RegisterRelationEntity selectRegisteredGridIdByUserId(@Param("userId") String userId);
RegisterRelationEntity selectRegisteredGridIdByUserIdAndCustomerId(@Param("userId") String userId, @Param("customerId")String customerId);
} }

91
epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java

@ -190,6 +190,97 @@ public class UserBaseInfoRedis {
return null; return null;
} }
/**
* @Description 缓存中获取用户基本信息
* @param userId
* @return
* @author wangc
* @date 2020.07.23 14:58
**/
public UserBaseInfoResultDTO getUserInfo(String userId,String customerId){
if(StringUtils.isNotBlank(userId)){
//获取居民缓存key
Map<String,Object> map = redisUtils.hGetAll(UserRedisKeys.getResiUserKey(userId));
if(null != map && !map.isEmpty()) {
//缓存中有数据,直接返回
return BeanUtil.mapToBean(map, UserBaseInfoResultDTO.class, true);
}
//缓存中没有数据,先查数据库,放入缓存后再返回
UserBaseInfoResultDTO baseInfo = userBaseInfoDao.selectListByUserIdList(userId);
if(null != baseInfo && StringUtils.isNotBlank(baseInfo.getId())){
//如果没有首次注册网格,则没有网格名称(xx机关-xx网格)、显示昵称(xx网格-x先生/女士)
RegisterRelationEntity relation = registerRelationDao.selectRegisteredGridIdByUserIdAndCustomerId(userId,customerId);
if(null != relation && StringUtils.isNotBlank(relation.getGridId())){
baseInfo.setCustomerId(relation.getCustomerId());
BelongGridNameFormDTO gridParam = new BelongGridNameFormDTO();
gridParam.setGridId(relation.getGridId());
baseInfo.setRegisteredGridId(relation.getGridId());
Result<BelongGridNameResultDTO> gridResult =
govOrgOpenFeignClient.getGridNameByGridId(gridParam);
if(gridResult.success() && null != gridResult.getData()
&& StringUtils.isNotBlank(gridResult.getData().getBelongsGridName())){
String gridFullName = gridResult.getData().getBelongsGridName();
baseInfo.setRegisteredGridName(gridFullName);
StringBuffer buffer = new StringBuffer(gridFullName.split(ModuleConstant.DASH)[NumConstant.ONE]).append(ModuleConstant.DASH).append(baseInfo.getSurname());
switch (baseInfo.getGender()) {
case NumConstant.ONE_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_MALE);
break;
case NumConstant.TWO_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_FEMALE);
break;
default:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN);
}
baseInfo.setShowName(buffer.toString());
}
}
else{
//如果没有居民注册记录,说明当前用户是陌生人,需要从陌生人网格访问列表中查询所属的客户Id
LatestGridInfoResultDTO gridLatest =
gridLatestDao.selectLatestGridInfoByUserId(userId);
if(null != gridLatest){
baseInfo.setCustomerId(gridLatest.getCustomerId());
}
}
set(baseInfo);
return baseInfo;
}else{
//如果没有,说明这里是陌生人
//陌生人不放入缓存,也不更新用户基础信息表
baseInfo = new UserBaseInfoResultDTO();
baseInfo.setUserId(userId);
List<UserWechatEntity> wechatInfo = userWechatDao.selectByUserId(userId);
if(null != wechatInfo && !wechatInfo.isEmpty()){
baseInfo.setNickname(wechatInfo.get(NumConstant.ZERO).getNickname());
if(StringUtils.isBlank(baseInfo.getNickname())){
baseInfo.setNickname(ModuleConstant.EMPTY_STR);
}
}else{
return null;
}
RegisterRelationEntity relation = registerRelationDao.selectRegisteredGridIdByUserId(userId);
if(null != relation && StringUtils.isNotBlank(relation.getGridId())){
baseInfo.setCustomerId(relation.getCustomerId());
}else{
LatestGridInfoResultDTO gridLatest =
gridLatestDao.selectLatestGridInfoByUserId(userId);
if(null != gridLatest){
baseInfo.setCustomerId(gridLatest.getCustomerId());
}
}
}
return baseInfo;
}
return null;
}
/** /**
* @Description 更新缓存 * @Description 更新缓存
* @param entity * @param entity

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/GridLatestServiceImpl.java

@ -210,7 +210,7 @@ public class GridLatestServiceImpl extends BaseServiceImpl<GridLatestDao, GridLa
} }
allData.forEach(info -> { allData.forEach(info -> {
if(StringUtils.isNotBlank(info.getUserId())){ if(StringUtils.isNotBlank(info.getUserId())){
UserBaseInfoResultDTO cache = userBaseInfoRedis.getUserInfo(info.getUserId()); UserBaseInfoResultDTO cache = userBaseInfoRedis.getUserInfo(info.getUserId(),customerUserFormDTO.getCustomerId());
if(null != cache) { if(null != cache) {
info.setRegisteredGrid(StringUtils.isBlank(cache.getRegisteredGridName()) ? ModuleConstant.EMPTY_STR : cache.getRegisteredGridName()); info.setRegisteredGrid(StringUtils.isBlank(cache.getRegisteredGridName()) ? ModuleConstant.EMPTY_STR : cache.getRegisteredGridName());
} }

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java

@ -342,7 +342,7 @@ public class UserBadgeServiceImpl implements UserBadgeService {
//居民端 //居民端
CertificationDetailResultDTO resiResult = userBadgeDao.selectBadgeAuthRecord(tokenDto.getUserId(), certificationDetailFormDTO.getBadgeId(),certificationDetailFormDTO.getRecordId()); CertificationDetailResultDTO resiResult = userBadgeDao.selectBadgeAuthRecord(tokenDto.getUserId(), certificationDetailFormDTO.getBadgeId(),certificationDetailFormDTO.getRecordId());
if(null == resiResult){ if(null == resiResult){
UserBaseInfoResultDTO userInfo = userBaseInfoRedis.getUserInfo(tokenDto.getUserId()); UserBaseInfoResultDTO userInfo = userBaseInfoRedis.getUserInfo(tokenDto.getUserId(),certificationDetailFormDTO.getCustomerId());
resiResult = ConvertUtils.sourceToTarget(userInfo,CertificationDetailResultDTO.class); resiResult = ConvertUtils.sourceToTarget(userInfo,CertificationDetailResultDTO.class);
if(null != resiResult) resiResult.setIdcard(userInfo.getIdNum()); if(null != resiResult) resiResult.setIdcard(userInfo.getIdNum());
} }

28
epmet-user/epmet-user-server/src/main/resources/mapper/RegisterRelationDao.xml

@ -33,6 +33,7 @@
<!-- 查询用户的首次注册网格Id --> <!-- 查询用户的首次注册网格Id -->
<select id="selectRegisteredGridIdByUserId" resultType="com.epmet.entity.RegisterRelationEntity"> <select id="selectRegisteredGridIdByUserId" resultType="com.epmet.entity.RegisterRelationEntity">
SELECT SELECT
DISTINCT
GRID_ID, GRID_ID,
CUSTOMER_ID CUSTOMER_ID
FROM FROM
@ -43,6 +44,33 @@
user_id = #{userId} user_id = #{userId}
AND AND
first_register = '1' first_register = '1'
ORDER BY
CREATED_TIME desc
LIMIT 1
</select>
<!-- 查询用户的首次注册网格Id -->
<select id="selectRegisteredGridIdByUserIdAndCustomerId" resultType="com.epmet.entity.RegisterRelationEntity">
SELECT
DISTINCT
GRID_ID,
CUSTOMER_ID
FROM
register_relation
WHERE
del_flag = '0'
AND
user_id = #{userId}
AND
customer_id = #{customerId}
AND
first_register = '1'
ORDER BY
CREATED_TIME desc
LIMIT 1
</select> </select>
</mapper> </mapper>
Loading…
Cancel
Save