REQ-2960 重写泰州人员同步逻辑

This commit is contained in:
zhongpeng 2024-09-09 11:41:08 +08:00
parent e3f1cf21f1
commit 282e66d9b2
4 changed files with 122 additions and 63 deletions

View File

@ -110,7 +110,7 @@ public class FeignConfiguration implements RequestInterceptor {
// 调用profile对应环境的服务
switch (profile.toLowerCase()) {
case "local":
return toLocalHost(url);
// return toLocalHost(url);
case "dev":
return toRemoteHost(url, DEV_HOST);
case "test":

View File

@ -90,7 +90,7 @@ public class TaiZhouProjectPersonJob extends IJobHandler {
try {
taiZhouService.handlePerson(thirdPerson, x);
} catch (Exception e) {
log.error("同步泰州人员异常,异常泰州人员ID{},泰州姓名:{}", thirdPerson.getThirdUniquePersonId(), thirdPerson.getThirdPersonName(), e);
log.error("泰州人员:{} 处理异常对应泰州ID{}", thirdPerson.getThirdPersonName(), thirdPerson.getThirdUniquePersonId(), e);
}
});

View File

@ -41,53 +41,54 @@ public class TaiZhouClient {
@Autowired
private TaizhouApi taizhouApi;
// @Resource(name = "basisRedisTemplate")
// private RedisTemplate<String, String> redisTemplate;
@Resource(name = "basisRedisTemplate")
private RedisTemplate<String, String> redisTemplate;
public String getToken() {
ApiResult<GetTaiZhouTokenRes> result = taizhouApi.getToken();
//todo
// ApiResult<GetTaiZhouTokenRes> result = taizhouApi.getToken();
//
// log.info("从elise获取泰州token结果{}", JSON.toJSONString(result));
//
// if (result.isSuccess()) {
// return result.getData().getToken();
// } else {
// log.error("从elise获取泰州token异常{}", result.getMsg());
// return null;
// }
log.info("从elise获取泰州token结果{}", JSON.toJSONString(result));
String token = redisTemplate.opsForValue().get(taiZhouConfig.getRedisTokenName());
log.info("获取泰州redis中token{}", token);
if(taiZhouConfig.getEachTimeGetTokenFlag()){
token = null;
log.info("nacos上泰州请求开启每次获取eachTimeGetTokenFlag");
}
if (StringUtils.hasText(token)) {
log.info("redis中token{}", token);
return token;
}
String url = taiZhouConfig.getBaseUrl() + TaiZhouApiEnum.GET_TOKEN.getPath() + "?Secret=" + taiZhouConfig.getSecret();
if (result.isSuccess()) {
return result.getData().getToken();
} else {
log.error("从elise获取泰州token异常{}", result.getMsg());
RestTemplateUtils restTemplateUtils = new RestTemplateUtils(taiZhouConfig.getHttpConnectTimeout(), taiZhouConfig.getHttpReadTimeout());
ResponseEntity<String> responseEntity = restTemplateUtils.post(url, String.class);
if (responseEntity.getStatusCode() != HttpStatus.OK) {
log.info("获取泰州token异常{}", responseEntity.getStatusCode());
return null;
}
// String token = redisTemplate.opsForValue().get(taiZhouConfig.getRedisTokenName());
// log.info("获取泰州redis中token{}", token);
// if(taiZhouConfig.getEachTimeGetTokenFlag()){
// token = null;
// log.info("nacos上泰州请求开启每次获取eachTimeGetTokenFlag");
// }
// if (StringUtils.hasText(token)) {
// log.info("redis中token{}", token);
// return token;
// }
// String url = taiZhouConfig.getBaseUrl() + TaiZhouApiEnum.GET_TOKEN.getPath() + "?Secret=" + taiZhouConfig.getSecret();
//
// RestTemplateUtils restTemplateUtils = new RestTemplateUtils(taiZhouConfig.getHttpConnectTimeout(), taiZhouConfig.getHttpReadTimeout());
//
// ResponseEntity<String> responseEntity = restTemplateUtils.post(url, String.class);
//
// if (responseEntity.getStatusCode() != HttpStatus.OK) {
// log.info("获取泰州token异常{}", responseEntity.getStatusCode());
// return null;
// }
//
// TaiZhouRes<TaiZhouTokenRes> taiZhouTokenResTaiZhouRes = parseResult(responseEntity, TaiZhouTokenRes.class);
//
// log.info("请求泰州住建局token返回结果httpCode={}, body={}", responseEntity.getStatusCode(), taiZhouTokenResTaiZhouRes);
//
// //token默认43200秒12小时建议提前1小时重新获取
// redisTemplate.opsForValue().set(taiZhouConfig.getRedisTokenName(), taiZhouTokenResTaiZhouRes.getResultData().getToken(), taiZhouTokenResTaiZhouRes.getResultData().getExpireTime() - 60 * 60, TimeUnit.SECONDS);
//
// log.info("redis加入token{}", taiZhouTokenResTaiZhouRes.getResultData().getToken());
//
// return taiZhouTokenResTaiZhouRes.getResultData().getToken();
TaiZhouRes<TaiZhouTokenRes> taiZhouTokenResTaiZhouRes = parseResult(responseEntity, TaiZhouTokenRes.class);
log.info("请求泰州住建局token返回结果httpCode={}, body={}", responseEntity.getStatusCode(), taiZhouTokenResTaiZhouRes);
//token默认43200秒12小时建议提前1小时重新获取
redisTemplate.opsForValue().set(taiZhouConfig.getRedisTokenName(), taiZhouTokenResTaiZhouRes.getResultData().getToken(), taiZhouTokenResTaiZhouRes.getResultData().getExpireTime() - 60 * 60, TimeUnit.SECONDS);
log.info("redis加入token{}", taiZhouTokenResTaiZhouRes.getResultData().getToken());
return taiZhouTokenResTaiZhouRes.getResultData().getToken();
}
public ResponseEntity<String> post(String apiPath, Object paramReq, String requestBody) {

View File

@ -282,6 +282,7 @@ public class TaiZhouServiceImpl implements TaiZhouService {
@Override
public void handlePerson(ThirdPerson thirdPerson, TaiZhouProject taiZhouProject) {
log.info("泰州人员:{} 开始处理", thirdPerson.getThirdPersonName());
ThirdPerson oldThirdPerson = queryThirdPerson(thirdPerson);
//如果数据库为空则插入
if (Objects.isNull(oldThirdPerson)) {
@ -299,31 +300,32 @@ public class TaiZhouServiceImpl implements TaiZhouService {
updateDataHandle(thirdPerson, taiZhouProject, oldThirdPerson);
}
log.info("泰州人员:{} 处理结束", thirdPerson.getThirdPersonName());
}
private void updateDataHandle(ThirdPerson thirdPerson, TaiZhouProject taiZhouProject, ThirdPerson oldThirdPerson) {
log.info("泰州人员:{},开始执行业务", thirdPerson.getThirdPersonName());
//业务前置检查泰州同步关键信息不能变化身份证姓名不能有变化
taiZhouSyncBasicPersonCheck(thirdPerson, oldThirdPerson);
//如果没有绑定直接使用新手机号绑定
if (oldThirdPerson.getPersonId() == 0L) {
log.info("泰州人员:{},历史数据未绑定安心筑账号,重新执行绑定业务(根据业务条件尝试绑定,不一定会绑定)", thirdPerson.getThirdPersonName());
newDataHandle(thirdPerson, taiZhouProject);
return;
}
//手机号没有变化直接跳过处理
//数据已经绑定了且手机号没有变更不做处理
if (oldThirdPerson.getThirdPersonPhone().equals(thirdPerson.getThirdPersonPhone())) {
//数据已经绑定了且手机号没有变更不做处理
log.info("泰州人员姓名:{},手机号:{}安心筑personId{} 绑定过的信息,且信息未修改,不做处理", thirdPerson.getThirdPersonName(), thirdPerson.getThirdPersonPhone(), oldThirdPerson.getPersonId());
log.info("泰州人员:{},手机号:{}安心筑personId{} 绑定过的信息,且信息未修改,不做处理", thirdPerson.getThirdPersonName(), thirdPerson.getThirdPersonPhone(), oldThirdPerson.getPersonId());
return;
}
//如果泰州数据已经绑定过了安心筑账号且泰州手机号发生了变更
log.warn("泰州人员:{},手机号发生变化:{} -> {} ", thirdPerson.getThirdPersonName(), oldThirdPerson.getThirdPersonPhone(), thirdPerson.getThirdPersonPhone());
log.info("泰州人员:{},手机号发生变化:{} -> {} ", thirdPerson.getThirdPersonName(), oldThirdPerson.getThirdPersonPhone(), thirdPerson.getThirdPersonPhone());
//查询新手机在安心筑记录
PersonProfileDto newPerson = userCenterRpc.queryPersonByPhone(thirdPerson.getThirdPersonPhone());
@ -331,24 +333,34 @@ public class TaiZhouServiceImpl implements TaiZhouService {
//查询当前泰州信息绑定安心筑人员的信息
PersonProfileDto currentBindPerson = userCenterRpc.queryPersonByPersonId(oldThirdPerson.getPersonId());
//数据完善验证
if (Objects.isNull(currentBindPerson)) {
throw new ServiceException("已绑定安心筑账号不存在PersonID" + oldThirdPerson.getPersonId());
throw new ServiceException("泰州人员:" + thirdPerson.getThirdPersonName() + " 绑定的安心筑数据异常,已绑定安心筑账号不存在PersonID" + oldThirdPerson.getPersonId());
}
//泰州数据已经绑定过了安心筑账号但是泰州变更了手机号且新手机号没有在安心筑注册则更新安心筑手机号为泰州手机号
//更新安心筑账号的手机号场景验证
//1泰州新手机号必须在安心筑没有注册2泰州新手机号必须与当前泰州数据关联的安心筑手机号不一致3泰州数据人员信息必须与关联的安心筑人员信息一致比对姓名脱敏身份证
if (Objects.isNull(newPerson)) {
//如果泰州信息绑定的安心筑账号的现有手机号和泰州新手机号已经一致了跳过处理
if (currentBindPerson.getPhone().equals(thirdPerson.getThirdPersonPhone())) {
log.info("泰州手机号变更后,新手机号和安心筑一致,无需处理");
log.info("泰州人员:{} 手机号变更后,新手机号{}和安心筑一致,无需处理", thirdPerson.getThirdPersonName(), thirdPerson.getThirdPersonPhone());
return;
}
//历史绑定数据未实名直接修改安心筑手机号
if (!(VerifyStatus.VERIFY_SUCCESS == currentBindPerson.getVerification().getVerifyStatus())) {
log.info("泰州人员:{} 同步数据新手机号在安心筑账号为空且历史绑定数据未实名需要覆盖安心筑手机号安心筑personId{}originPhone:{},newPhone:{}", thirdPerson.getThirdPersonName(), currentBindPerson.getId(), currentBindPerson.getPhone(), thirdPerson.getThirdPersonPhone());
userCenterRpc.updateUserPhone(oldThirdPerson.getPersonId(), thirdPerson.getThirdPersonPhone());
return;
}
//实名过的数据需要比对信息一致
//泰州新手机号与绑定的安心筑手机号不一致且必须要泰州姓名身份证和安心筑一致才可以覆盖安心筑的手机号
if (comparePersonInfo(currentBindPerson, thirdPerson)) {
log.info("泰州同步数据开始覆盖安心筑手机号personId{}originPhone:{},newPhone:{}", currentBindPerson.getId(), currentBindPerson.getPhone(), thirdPerson.getThirdPersonPhone());
userCenterRpc.updateUserPhone(thirdPerson.getPersonId(), thirdPerson.getThirdPersonPhone());
log.info("泰州人员:{} 同步数据,新手机号在安心筑账号为空,且历史绑定数据实名,且与泰州信息一致,需要覆盖安心筑手机号,安心筑personId{}originPhone:{},newPhone:{}", thirdPerson.getThirdPersonName(), currentBindPerson.getId(), currentBindPerson.getPhone(), thirdPerson.getThirdPersonPhone());
userCenterRpc.updateUserPhone(oldThirdPerson.getPersonId(), thirdPerson.getThirdPersonPhone());
} else {
log.error("泰州信息和安心筑信息不一致,泰州人员名称:{}", thirdPerson.getThirdPersonName());
log.error("泰州人员:{} 基本信息和安心筑信息不一致(姓名或者脱敏身份证不一致),不修改安心筑手机号", thirdPerson.getThirdPersonName());
}
}
//泰州数据已经绑定过了安心筑账号但是泰州变更了手机号且新手机号在安心筑已经注册了
@ -358,13 +370,19 @@ public class TaiZhouServiceImpl implements TaiZhouService {
if (VerifyStatus.VERIFY_SUCCESS != currentBindPerson.getVerification().getVerifyStatus() &&
VerifyStatus.VERIFY_SUCCESS != newPerson.getVerification().getVerifyStatus()) {
log.info("泰州人员:{} 同步数据新手机号在安心筑账号不为空且新老手机号对应的安心筑账号均未实名需要修改泰州数据关联的安心筑personID安心筑personId{}->{}}", thirdPerson.getThirdPersonName(), thirdPerson.getPersonId(), newPerson.getId());
taiZhouPersonIdRepeatBindCheck(newPerson.getId());
thirdPerson.setPersonId(newPerson.getId());
//将新手机关了的安心筑账号ID更新到中间表中
//新手机号必须有对应的工人角色新手机号对应的安心筑账号是查询出来的可能没有工人角色需要补充
userCenterRpc.createNormalWorker(thirdPerson.getThirdPersonPhone());
PersonProfileDto personProfileDto = userCenterRpc.createNormalWorker(thirdPerson.getThirdPersonPhone());
if (personProfileDto.getRealName().contains("工友") || personProfileDto.getRealName().contains("工人")) {
log.info("泰州人员:{} 关联的安心筑人员姓名是默认姓名,需要修改,修改前:{},修改后:{}", thirdPerson.getThirdPersonName(), personProfileDto.getRealName(), thirdPerson.getThirdPersonName());
userCenterRpc.updateUserName(thirdPerson);
}
thirdPersonDao.lambdaUpdate()
.eq(ThirdPerson::getThirdCode, thirdPerson.getThirdCode())
.eq(ThirdPerson::getThirdUniquePersonId, thirdPerson.getThirdUniquePersonId())
@ -378,26 +396,60 @@ public class TaiZhouServiceImpl implements TaiZhouService {
if (VerifyStatus.VERIFY_SUCCESS == currentBindPerson.getVerification().getVerifyStatus() &&
VerifyStatus.VERIFY_SUCCESS != newPerson.getVerification().getVerifyStatus()) {
log.info("泰州人员:{} 同步数据,新手机号在安心筑账号关联的账号未实名,且当前关联的安心筑账号已经实名,安心筑需要合并账号,安心筑销毁账号:{},安心筑销主账号:{}}", thirdPerson.getThirdPersonName(), currentBindPerson.getId(), newPerson.getId());
taiZhouPersonIdRepeatBindCheck(newPerson.getId());
//合并账号前验证用户信息确认泰州和安心筑实名账号是同一个人
if (comparePersonInfo(currentBindPerson, thirdPerson)) {
//合并账号
userCenterRpc.mergeAccount(currentBindPerson.getId(), newPerson.getId());
if (!comparePersonInfo(currentBindPerson, thirdPerson)) {
log.error("泰州人员:{} 基本信息和安心筑信息不一致(姓名或者脱敏身份证不一致),不能合并账号", thirdPerson.getThirdPersonName());
return ;
}
//合并账号
userCenterRpc.mergeAccount(currentBindPerson.getId(), newPerson.getId());
return;
}
//如果老的关联账号没有实名新的账号实名了
if (VerifyStatus.VERIFY_SUCCESS != currentBindPerson.getVerification().getVerifyStatus() &&
VerifyStatus.VERIFY_SUCCESS == newPerson.getVerification().getVerifyStatus()) {
taiZhouPersonIdRepeatBindCheck(newPerson.getId());
//修改绑定关系
//合并账号前验证用户信息确认泰州和安心筑实名账号是同一个人
if (!comparePersonInfo(newPerson, thirdPerson)) {
log.error("泰州人员:{} 基本信息和新手机号对应的实名安心筑信息不一致(姓名或者脱敏身份证不一致),不修改绑定关系", thirdPerson.getThirdPersonName());
return ;
}
thirdPerson.setPersonId(newPerson.getId());
//将新手机关了的安心筑账号ID更新到中间表中
//新手机号必须有对应的工人角色新手机号对应的安心筑账号是查询出来的可能没有工人角色需要补充
PersonProfileDto personProfileDto = userCenterRpc.createNormalWorker(thirdPerson.getThirdPersonPhone());
if (personProfileDto.getRealName().contains("工友") || personProfileDto.getRealName().contains("工人")) {
log.info("泰州人员:{} 关联的安心筑人员姓名是默认姓名,需要修改,修改前:{},修改后:{}", thirdPerson.getThirdPersonName(), personProfileDto.getRealName(), thirdPerson.getThirdPersonName());
userCenterRpc.updateUserName(thirdPerson);
}
thirdPersonDao.lambdaUpdate()
.eq(ThirdPerson::getThirdCode, thirdPerson.getThirdCode())
.eq(ThirdPerson::getThirdUniquePersonId, thirdPerson.getThirdUniquePersonId())
.set(ThirdPerson::getPersonId, thirdPerson.getPersonId())
.update();
return;
}
//不存在2个都是实名的情况除非是2个人如果是2个人手机号必定不一样
//如果老的关联账号没有实名新的账号实名了
if (VerifyStatus.VERIFY_SUCCESS == currentBindPerson.getVerification().getVerifyStatus() &&
VerifyStatus.VERIFY_SUCCESS == newPerson.getVerification().getVerifyStatus()) {
log.error("泰州人员:{} 手机号变更,发现新老手机号对应的安心筑账号均实名,异常", thirdPerson.getThirdPersonName());
return;
}
}
}
@ -495,10 +547,12 @@ public class TaiZhouServiceImpl implements TaiZhouService {
private void createUserOrSyncUser(ThirdPerson thirdPerson) {
String phone = thirdPerson.getThirdPersonPhone();
if (Objects.isNull(phone) || phone.contains("*")) {
log.info("手机号不合法,不能进行创建用户校验,{}", phone);
log.info("泰州人员:{} 手机号不合法,不能进行创建用户校验,{}", thirdPerson.getThirdPersonName(), phone);
return;
}
log.info("泰州人员:{} 开始幂等创建安心筑工人账号,创建信息-手机号:{}", thirdPerson.getThirdPersonName(), thirdPerson.getThirdPersonPhone());
PersonProfileDto personProfileDto = userCenterRpc.createNormalWorker(thirdPerson.getThirdPersonPhone());
if (Objects.isNull(personProfileDto)) {
@ -507,17 +561,21 @@ public class TaiZhouServiceImpl implements TaiZhouService {
thirdPerson.setPersonId(personProfileDto.getId());
//先更新安心筑表中的姓名在更新三方表的记录顺序不能变
if (personProfileDto.getRealName().contains("工友") || personProfileDto.getRealName().contains("工人")) {
log.info("泰州人员:{} 关联的安心筑人员姓名是默认姓名,需要修改:修改前:{},修改后:{}", thirdPerson.getThirdPersonName(), personProfileDto.getRealName(), thirdPerson.getThirdPersonName());
userCenterRpc.updateUserName(thirdPerson);
}
taiZhouPersonIdRepeatBindCheck(personProfileDto.getId());
log.info("泰州人员:{} 开始绑定安心筑personID{}", thirdPerson.getThirdPersonName(), personProfileDto.getId());
taiZhouPersonIdRepeatBindCheck(personProfileDto.getId());
//更新安心筑关联ID
thirdPersonDao.lambdaUpdate()
.eq(ThirdPerson::getThirdCode, thirdPerson.getThirdCode())
.eq(ThirdPerson::getThirdUniquePersonId, thirdPerson.getThirdUniquePersonId())
.set(ThirdPerson::getPersonId, thirdPerson.getPersonId())
.update();
log.info("泰州人员:{} 绑定安心筑账号结束", thirdPerson.getThirdPersonName());
}