Browse Source

进入网格,自动注册居民

master
zhaoqifeng 3 years ago
parent
commit
f42001862c
  1. 89
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/NameUtils.java
  2. 18
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserResiInfoController.java
  3. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserResiInfoService.java
  4. 105
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

89
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/NameUtils.java

@ -0,0 +1,89 @@
package com.epmet.commons.tools.utils;
import com.epmet.commons.tools.constant.NumConstant;
import java.util.HashMap;
import java.util.Map;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/9/14 14:40
*/
public class NameUtils {
/**
* 复姓两字,国内现存81个末尾添加三字以上的部分满姓
*/
private static final String[] SURNAME_NOW = {"百里", "北堂", "北野", "北宫", "辟闾", "孛尔", "淳于", "成公", "陈生", "褚师",
"端木", "东方", "东郭", "东野", "东门", "第五", "大狐", "段干", "段阳", "带曰", "第二", "东宫", "公孙", "公冶", "公羊",
"公良", "公西", "公孟", "高堂", "高阳", "公析", "公肩", "公坚", "郭公", "谷梁", "毌将", "公乘", "毌丘", "公户", "公广",
"公仪", "公祖", "皇甫", "黄龙", "胡母", "何阳", "夹谷", "九方", "即墨", "梁丘", "闾丘", "洛阳", "陵尹", "冷富", "龙丘",
"令狐", "林彭", "南宫", "南郭", "女娲", "南伯", "南容", "南门", "南野", "欧阳", "欧侯", "濮阳", "青阳", "漆雕", "亓官",
"渠丘", "壤驷", "上官", "少室", "少叔", "司徒", "司马", "司空", "司寇", "士孙", "申屠", "申徒", "申鲜", "申叔", "夙沙",
"叔先", "叔仲", "侍其", "叔孙", "澹台", "太史", "太叔", "太公", "屠岸", "唐古", "闻人", "巫马", "微生", "王孙", "无庸",
"夏侯", "西门", "信平", "鲜于", "轩辕", "相里", "新垣", "徐离", "羊舌", "羊角", "延陵", "於陵", "伊祁", "吾丘", "乐正",
"只斤", "诸葛", "颛孙", "仲孙", "仲长", "钟离", "宗政", "主父", "中叔", "左人", "左丘", "宰父", "长儿", "仉督", "单于",
"叱干", "叱利", "车非", "车公", "车侯", "车长", "车绵", "独孤", "大野", "独吉", "达奚", "达官", "达仲", "达品", "哥舒",
"哥夜", "哥翰", "哥汗", "赫连", "呼延", "贺兰", "黑齿", "斛律", "斛粟", "贺若", "贺奴", "贺远", "贺元", "夹谷", "吉胡",
"吉利", "吉家", "可频", "慕容", "万俟", "万红", "万中", "抹捻", "纳兰", "纳西", "纳吉", "纳罕", "纳塞", "纳博", "纳称",
"纳勉", "普周", "仆固", "仆散", "蒲察", "屈突", "屈卢", "钳耳", "是云", "索卢", "厍狄", "拓跋", "同蹄", "秃发", "完颜",
"完明", "完忠", "宇文", "尉迟", "耶律", "耶红", "也先", "耶鲜", "耶闻", "长孙", "长南", "长北", "长西", "长红", "长元",
"长秋", "长寸", "长李", "长云", "萨嘛喇","赫舍里","萨克达","钮祜禄","他塔喇","喜塔腊","库雅喇","瓜尔佳","舒穆禄","索绰络",
"叶赫那拉","依尔觉罗","额尔德特","讷殷富察","叶赫那兰","爱新觉罗","依尔根觉罗"};
/**
* 获取复姓非单字姓氏未匹配上则依旧返回单字姓氏
* @param name
* @return
*/
public static String getSurNameComplex(String name){
for (String s : SURNAME_NOW) {
if (name.startsWith(s)) {
return name.substring(0, s.length());
}
}
return name.substring(0,1);
}
/**
* 获取复姓名去除姓氏后名
* @param name
* @return
*/
public static String getNameComplex(String name){
for (String s : SURNAME_NOW) {
if (name.startsWith(s)) {
return name.substring(s.length());
}
}
return name.substring(1);
}
/**
* 获取姓氏与姓名<br>
* 姓名在两字时首字为姓<br>
* 姓名大于两字时优先匹配复姓<br>
* 姓氏未匹配且姓名多于5字时姓与名均在姓氏中,名为空少于5字时则采用第一个字为姓<br>
* @param name 姓名
* @return map类型数据姓氏为key值X名字为value值M
*/
public static Map<String, String> getSurName(String name) {
Map<String,String> mapData = new HashMap<>(NumConstant.TWO);
if (name.length() > NumConstant.ZERO && name.length() <= NumConstant.TWO){
mapData.put("X", name.substring(NumConstant.ZERO, NumConstant.ONE));
mapData.put("M", name.substring(NumConstant.ONE));
} else if (name.length() > NumConstant.TWO) {
for (String s : SURNAME_NOW) {//遍历复姓数组
if (name.startsWith(s)) {
mapData.put("X", s);
mapData.put("M", name.substring(s.length()));
return mapData;
}
}
//姓氏没有匹配时采用第一个字为姓
mapData.put("X", name.substring(NumConstant.ZERO, NumConstant.ONE));
mapData.put("M", name.substring(NumConstant.ONE));
}
return mapData;
}
}

18
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserResiInfoController.java

@ -243,4 +243,22 @@ public class UserResiInfoController {
return new Result<List<StaffAndResiResultDTO>>().ok(userResiInfoService.getStaffAndResi(userIds));
}
/**
* 进入网格自动注册居民
*
* @Param tokenDto
* @Param userResiInfoDTO
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/9/14 15:34
*/
@PostMapping("autoreguser-ding")
public Result autoRegister(@LoginUser TokenDto tokenDto, @RequestBody UserResiInfoDTO userResiInfoDTO) {
userResiInfoDTO.setCustomerId(tokenDto.getCustomerId());
userResiInfoDTO.setUserId(tokenDto.getUserId());
userResiInfoDTO.setApp(tokenDto.getApp());
userResiInfoService.autoRegister(userResiInfoDTO);
return new Result();
}
}

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

@ -213,4 +213,14 @@ public interface UserResiInfoService extends BaseService<UserResiInfoEntity> {
*/
List<StaffAndResiResultDTO> getStaffAndResi(List<String> userIds);
/**
* 进入网格自动注册居民
*
* @Param userResiInfoDTO
* @Return
* @Author zhaoqifeng
* @Date 2022/9/14 14:19
*/
void autoRegister(UserResiInfoDTO userResiInfoDTO);
}

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

@ -18,6 +18,7 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.common.token.util.UserUtil;
@ -26,30 +27,28 @@ import com.epmet.commons.tools.constant.EpmetRoleKeyConstant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.enums.IdCardTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.redis.common.bean.ResiUserInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.IdCardRegexUtils;
import com.epmet.commons.tools.utils.NameUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.constant.UserConstant;
import com.epmet.constant.UserResiRegisterConstant;
import com.epmet.constant.UserRoleConstant;
import com.epmet.dao.UserCustomerDao;
import com.epmet.dao.UserResiInfoDao;
import com.epmet.dao.UserWechatDao;
import com.epmet.dao.*;
import com.epmet.dto.UserResiInfoDTO;
import com.epmet.dto.UserResiRegisterVisitDTO;
import com.epmet.dto.UserRoleDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.UserBaseInfoEntity;
import com.epmet.entity.UserResiInfoEntity;
import com.epmet.entity.UserResiRegisterVisitEntity;
import com.epmet.entity.UserWechatEntity;
import com.epmet.entity.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.redis.UserBaseInfoRedis;
@ -67,6 +66,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
/**
@ -103,9 +103,12 @@ public class UserResiInfoServiceImpl extends BaseServiceImpl<UserResiInfoDao, Us
private GovIssueOpenFeignClient govIssueClient;
@Autowired
private UserBaseInfoRedis userBaseInfoRedis;
@Autowired
private ResiPartyMemberOpenFeignClient resiPartyMemberOpenFeignClient;
@Resource
private GridLatestDao gridLatestDao;
@Resource
private UserResiRegisterVisitDao userResiRegisterVisitDao;
@Override
public PageData<UserResiInfoDTO> page(Map<String, Object> params) {
@ -551,6 +554,90 @@ public class UserResiInfoServiceImpl extends BaseServiceImpl<UserResiInfoDao, Us
return baseDao.getStaffAndResi(userIds);
}
/**
* 进入网格自动注册居民
*
* @param userResiInfoDTO
* @Param userResiInfoDTO
* @Return
* @Author zhaoqifeng
* @Date 2022/9/14 14:19
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void autoRegister(UserResiInfoDTO userResiInfoDTO) {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(userResiInfoDTO.getGridId());
if (null == gridInfo) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取网格信息失败", "获取网格信息失败");
}
//判断是否是居民
UserRoleResultDTO role = userRoleService.getUserResidentRole(userResiInfoDTO.getCustomerId(), userResiInfoDTO.getUserId());
if (null == role) {
//获取钉钉用户信息
ResiUserInfoCache userInfo = userBaseInfoService.getUserInfo(userResiInfoDTO.getUserId());
//1:visit表添加数据
UserResiRegisterVisitEntity visit = new UserResiRegisterVisitEntity();
visit.setCustomerId(userResiInfoDTO.getCustomerId());
visit.setGridId(userResiInfoDTO.getGridId());
visit.setUserId(userResiInfoDTO.getUserId());
visit.setVisitFrom("dingding");
visit.setLastOperateVisit("success");
visit.setVisitTime(new Date());
userResiRegisterVisitDao.insert(visit);
//注册信息表新增数据
userResiInfoDTO.setRegMobile(userInfo.getMobile());
userResiInfoDTO.setSurname(NameUtils.getSurNameComplex(userInfo.getRealName()));
userResiInfoDTO.setName(NameUtils.getNameComplex(userInfo.getRealName()));
userResiInfoDTO.setStreet(gridInfo.getAllParentName());
userResiInfoDTO.setResiVisitId(visit.getId());
baseDao.insert(ConvertUtils.sourceToTarget(userResiInfoDTO, UserResiInfoEntity.class));
//新增该用户在该客户下的注册状态
UserCustomerEntity userCustomer = new UserCustomerEntity();
userCustomer.setCustomerId(userResiInfoDTO.getCustomerId());
userCustomer.setUserId(userResiInfoDTO.getUserId());
userCustomer.setIsRegister(NumConstant.ONE_STR);
userCustomerDao.insert(userCustomer);
//2:角色表新增角色数据
UserRoleDTO userRoleDTO = new UserRoleDTO();
userRoleDTO.setCustomerId(userResiInfoDTO.getCustomerId());
userRoleDTO.setUserId(userResiInfoDTO.getUserId());
userRoleDTO.setApp(userResiInfoDTO.getApp());
userRoleDTO.setRoleKey(EpmetRoleKeyConstant.REGISTERED_RESI);
//居民角色对应的网格Id存默认值-all
userRoleDTO.setGridId(UserRoleConstant.DEFAULT_GRID_ID);
userRoleService.saveUserRole(userRoleDTO);
//4:保存baseInfo
UserBaseInfoEntity baseInfo = ConvertUtils.sourceToTarget(userResiInfoDTO, UserBaseInfoEntity.class);
baseInfo.setMobile(userResiInfoDTO.getRegMobile());
baseInfo.setSurname(NameUtils.getSurNameComplex(userInfo.getRealName()));
baseInfo.setName(NameUtils.getNameComplex(userInfo.getRealName()));
userBaseInfoService.insertOrUpdate(baseInfo);
//5:记录用户的注册网格register_relation
registerRelationService.saveRegisterRelation(userResiInfoDTO);
}
//6:记录用户访问的网格grid_latest
LambdaQueryWrapper<GridLatestEntity> latestWrapper = new LambdaQueryWrapper<>();
latestWrapper.eq(GridLatestEntity::getCustomerId, userResiInfoDTO.getCustomerId());
latestWrapper.eq(GridLatestEntity::getGridId, userResiInfoDTO.getGridId());
latestWrapper.eq(GridLatestEntity::getCustomerUserId, userResiInfoDTO.getUserId());
GridLatestEntity latest = gridLatestDao.selectOne(latestWrapper);
if (null == latest) {
latest = new GridLatestEntity();
latest.setCustomerId(userResiInfoDTO.getCustomerId());
latest.setGridId(userResiInfoDTO.getGridId());
latest.setCustomerUserId(userResiInfoDTO.getUserId());
latest.setAreaCode(gridInfo.getAreaCode());
latest.setPid(gridInfo.getPid());
latest.setLatestTime(new Date());
gridLatestDao.insert(latest);
} else {
GridLatestEntity latestEntity = new GridLatestEntity();
latestEntity.setId(latest.getId());
latestEntity.setLatestTime(new Date());
gridLatestDao.updateById(latestEntity);
}
}
/**
* 自动认证居民志愿者注册自动认证居民

Loading…
Cancel
Save