You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
18 KiB
392 lines
18 KiB
/**
|
|
* Copyright 2018 人人开源 https://www.renren.io
|
|
* <p>
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
* <p>
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
* <p>
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package com.epmet.redis;
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import com.epmet.commons.tools.constant.NumConstant;
|
|
import com.epmet.commons.tools.redis.RedisKeys;
|
|
import com.epmet.commons.tools.redis.RedisUtils;
|
|
import com.epmet.commons.tools.utils.ConvertUtils;
|
|
import com.epmet.commons.tools.utils.Result;
|
|
import com.epmet.dao.GridLatestDao;
|
|
import com.epmet.dao.RegisterRelationDao;
|
|
import com.epmet.dao.UserBaseInfoDao;
|
|
import com.epmet.dao.UserWechatDao;
|
|
import com.epmet.dto.form.BelongGridNameFormDTO;
|
|
import com.epmet.dto.result.BelongGridNameResultDTO;
|
|
import com.epmet.dto.result.LatestGridInfoResultDTO;
|
|
import com.epmet.dto.result.UserBaseInfoResultDTO;
|
|
import com.epmet.entity.RegisterRelationEntity;
|
|
import com.epmet.entity.UserBaseInfoEntity;
|
|
import com.epmet.entity.UserWechatEntity;
|
|
import com.epmet.feign.GovOrgOpenFeignClient;
|
|
import com.epmet.util.ModuleConstant;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
* 用户基础信息
|
|
*
|
|
* @author generator generator@elink-cn.com
|
|
* @since v1.0.0 2020-07-19
|
|
*/
|
|
@Component
|
|
public class UserBaseInfoRedis {
|
|
@Autowired
|
|
private RedisUtils redisUtils;
|
|
@Autowired
|
|
private UserBaseInfoDao userBaseInfoDao;
|
|
@Autowired
|
|
private RegisterRelationDao registerRelationDao;
|
|
@Autowired
|
|
private GovOrgOpenFeignClient govOrgOpenFeignClient;
|
|
@Autowired
|
|
private GridLatestDao gridLatestDao;
|
|
@Autowired
|
|
private UserWechatDao userWechatDao;
|
|
|
|
public void delete(Object[] ids) {
|
|
|
|
}
|
|
|
|
/**
|
|
* @Description 将用户基本信息放入缓存
|
|
* @param baseInfo
|
|
* @return
|
|
* @author wangc
|
|
* @date 2020.07.23 14:43
|
|
**/
|
|
public void set(UserBaseInfoResultDTO baseInfo){
|
|
if(StringUtils.isBlank(baseInfo.getUserId())) return;
|
|
String key = RedisKeys.getResiUserKey(baseInfo.getUserId());
|
|
//bean to map
|
|
Map<String, Object> map = BeanUtil.beanToMap(baseInfo, false, true);
|
|
//用户缓存的有效期为七天
|
|
redisUtils.hMSet(key, map,RedisUtils.DEFAULT_EXPIRE * NumConstant.SEVEN);
|
|
}
|
|
|
|
public UserBaseInfoResultDTO get(String userId){
|
|
|
|
if(StringUtils.isNotBlank(userId)) {
|
|
Map<String, Object> map = redisUtils.hGetAll(RedisKeys.getResiUserKey(userId));
|
|
if (null != map && !map.isEmpty()) {
|
|
//缓存中有数据,直接返回
|
|
return BeanUtil.mapToBean(map, UserBaseInfoResultDTO.class, true);
|
|
}
|
|
}
|
|
return null;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Description 缓存中获取用户基本信息
|
|
* @param userId
|
|
* @return
|
|
* @author wangc
|
|
* @date 2020.07.23 14:58
|
|
**/
|
|
public UserBaseInfoResultDTO getUserInfo(String userId){
|
|
if(StringUtils.isNotBlank(userId)){
|
|
//获取居民缓存key
|
|
Map<String, Object> map = redisUtils.hGetAll(RedisKeys.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.selectRegisteredGridIdByUserId(userId);
|
|
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 缓存中获取用户基本信息
|
|
* @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(RedisKeys.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 更新缓存
|
|
* @param entity
|
|
* @return
|
|
* @author wangc
|
|
* @date 2020.07.30 14:07
|
|
**/
|
|
public void updateUserCache(UserBaseInfoEntity entity){
|
|
if(null == entity || StringUtils.isBlank(entity.getUserId())) return;
|
|
|
|
UserBaseInfoResultDTO currentCache = ConvertUtils.sourceToTarget(entity,UserBaseInfoResultDTO.class);
|
|
|
|
UserBaseInfoResultDTO orientCache = get(entity.getUserId());
|
|
if(null != orientCache && StringUtils.isNotBlank(orientCache.getUserId())){
|
|
//将要更改的信息赋值到原缓存中
|
|
mergeObject(currentCache,orientCache);
|
|
//将原来的缓存对象赋值给要更新的缓存对象
|
|
//此时orientCache中包概括要更新的属性以及之前有切不更新的属性
|
|
currentCache = orientCache;
|
|
}
|
|
RegisterRelationEntity relation = registerRelationDao.selectRegisteredGridIdByUserId(entity.getUserId());
|
|
//如果没有首次注册网格,则没有网格名称(xx机关-xx网格)、显示昵称(xx网格-x先生/女士)
|
|
if(null != relation && StringUtils.isNotBlank(relation.getGridId())){
|
|
currentCache.setCustomerId(relation.getCustomerId());
|
|
BelongGridNameFormDTO gridParam = new BelongGridNameFormDTO();
|
|
gridParam.setGridId(relation.getGridId());
|
|
currentCache.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();
|
|
currentCache.setRegisteredGridName(gridFullName);
|
|
if (StringUtils.isBlank(currentCache.getGender())) currentCache.setGender(NumConstant.ZERO_STR);
|
|
if (StringUtils.isNotBlank(currentCache.getNickname())) {
|
|
StringBuffer buffer = new StringBuffer(gridFullName.split(ModuleConstant.DASH)[NumConstant.ONE]).append(ModuleConstant.DASH).append(currentCache.getSurname());
|
|
switch (currentCache.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);
|
|
}
|
|
currentCache.setShowName(buffer.toString());
|
|
}
|
|
}
|
|
}else{
|
|
//如果没有居民注册记录,说明当前用户是陌生人,需要从陌生人网格访问列表中查询所属的客户Id
|
|
LatestGridInfoResultDTO gridLatest =
|
|
gridLatestDao.selectLatestGridInfoByUserId(entity.getUserId());
|
|
if(null != gridLatest){
|
|
currentCache.setCustomerId(gridLatest.getCustomerId());
|
|
}
|
|
}
|
|
|
|
//更新缓存的入口只有1.更新微信信息,entity中一定携带微信信息,2.注册居民信息,在调用此方法之前,已经查询过微信信息并赋值到entity中
|
|
//因此以下代码不需执行
|
|
//if(StringUtils.isBlank(currentCache.getNickname()) || StringUtils.isBlank(currentCache.getHeadImgUrl())){
|
|
// UserBaseInfoResultDTO wechatInfo = userBaseInfoDao.selectListByUserIdList(entity.getUserId());
|
|
// if(null != wechatInfo){
|
|
// currentCache.setNickname(wechatInfo.getNickname());
|
|
// currentCache.setGender(wechatInfo.getGender());
|
|
// currentCache.setHeadImgUrl(wechatInfo.getHeadImgUrl());
|
|
// }
|
|
//}
|
|
|
|
set(currentCache);
|
|
|
|
}
|
|
|
|
/**
|
|
* @Description 批量清楚用户缓存信息
|
|
* @param userIds
|
|
* @return
|
|
* @author wangc
|
|
* @date 2020.08.06 14:34
|
|
**/
|
|
public void clearUserCache(List<String> userIds){
|
|
userIds.forEach(id ->{
|
|
if(StringUtils.isNotBlank(id)) {
|
|
redisUtils.delete(RedisKeys.getResiUserKey(id));
|
|
}
|
|
});
|
|
}
|
|
|
|
public <T> void mergeObject(T origin, T destination) {
|
|
if (origin == null || destination == null)
|
|
return;
|
|
if (!origin.getClass().equals(destination.getClass()))
|
|
return;
|
|
|
|
Field[] fields = origin.getClass().getDeclaredFields();
|
|
for (int i = 0; i < fields.length; i++) {
|
|
try {
|
|
fields[i].setAccessible(true);
|
|
Object value = fields[i].get(origin);
|
|
if (null != value) {
|
|
fields[i].set(destination, value);
|
|
}
|
|
fields[i].setAccessible(false);
|
|
} catch (Exception e) {
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|