fix(iam): 用户接口异常捕获

This commit is contained in:
yjz
2023-11-15 15:59:24 +08:00
parent 01fc01d914
commit 4b7ae5fe79
4 changed files with 116 additions and 63 deletions
@@ -28,7 +28,7 @@ public class TestClient {
public static void main(String[] args) throws JsonProcessingException {
TestClient testClient = new TestClient();
// testClient.sendSchemaService(); // 字段映射接口测试
for (int i = 0; i < 100; i++) {
for (int i = 0; i < 1; i++) {
System.out.println(i);
testClient.sendUserCreate(i);
}
@@ -112,7 +112,7 @@ public class TestClient {
iamUserAcceptDto.setSrmsCompanyCode("123");
iamUserAcceptDto.setSrmsOrgCode("123/321");
iamUserAcceptDto.setSrmsTypeId("001");
iamUserAcceptDto.setSrmsUsername((1000 + i) +"");
iamUserAcceptDto.setSrmsUsername((108088 + i) +"");
iamUserAcceptDto.setSrmsRealname("测试" + i);
iamUserAcceptDto.setSrmsPassword("1qaz@WSX");
iamUserAcceptDto.setSrmsSex("1"); // 男
@@ -122,7 +122,7 @@ public class TestClient {
iamUserAcceptDto.setSrmsPostStatus("1"); // 在岗,srms不解析,直接存
iamUserAcceptDto.setSrmsStatus("1"); // 1在册,0离职
iamUserAcceptDto.setSrmsOfficePhone("022-87648762");
// iamUserAcceptDto.setSrmsPhone("13811112222");
iamUserAcceptDto.setSrmsPhone("13811112232");
iamUserAcceptDto.setSrmsEmail("test@sinotruk.com");
iamUserAcceptDto.setSrmsCreateTime("2023-10-15 10:35:20");
@@ -140,8 +140,8 @@ public class TestClient {
String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity);
// 发送数据
// String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService";
String url = "laws-test.sinotruk.com/laws-sinotruk/sync/iam/UserCreateService";
String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService";
// String url = "laws-test.sinotruk.com/laws-sinotruk/sync/iam/UserCreateService";
String response = HttpUtil.post(url, sendPoDataJson);
System.out.println("用户创建接口响应:" + response);
}
@@ -1,6 +1,7 @@
package com.jero.modules.docking.iam.controller;
import cn.hutool.core.text.CharSequenceUtil;
import com.aliyun.oss.ServiceException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -85,6 +86,8 @@ public class SyncIamController {
public SendPoEncryptPo userCreateService(@RequestBody AcceptEncryptPo iamUserInfo) throws JsonProcessingException {
log.info("进入账号创建");
IamUserAcceptDto userAcceptDto = null;
IamUserCreateResponse iamUserCreateResponse = new IamUserCreateResponse();
SendPoEncryptPo sendPoEncryptPo = new SendPoEncryptPo();
try {
if (iamUserInfo == null
|| iamUserInfo.getMessageEncryptTabels() == null
@@ -102,75 +105,102 @@ public class SyncIamController {
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(userAcceptDto);
iamUserCreateResponse.setBimRequestId(userAcceptDto.getBimRequestId());
// 处理业务逻辑,存储用户,返回用户id
IamUserCreateResponse iamUserCreateResponse = this.syncIamService.userCreateService(userAcceptDto);
// 处理统一响应PO层,并加密业务字段
MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader();
SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamUserCreateResponse);
return sendPoEncryptPo;
} catch (Exception e) {
log.error("数据库值重复:{}", e.getMessage());
throw new IamGlobalException(null, "未知异常,请联系管理员");
iamUserCreateResponse = this.syncIamService.userCreateService(userAcceptDto);
} catch (ServiceException e) {
iamUserCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
String message = e.getErrorMessage();
iamUserCreateResponse.setMessage(message);
log.error(iamUserCreateResponse.getMessage());
}catch (Exception e){
iamUserCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
iamUserCreateResponse.setMessage("操作失败" + e.getMessage());
log.error(iamUserCreateResponse.getMessage());
}
// 处理统一响应PO层,并加密业务字段
MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader();
sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamUserCreateResponse);
return sendPoEncryptPo;
}
@PostMapping({"/UserUpdateService"})
public SendPoEncryptPo userUpdateService(@RequestBody AcceptEncryptPo iamUserInfo) throws JsonProcessingException {
if (iamUserInfo == null
|| iamUserInfo.getMessageEncryptTabels() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader().getData() == null){
throw new IamGlobalException(null, "参数传递错误,未收到参数");
IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto();
try {
if (iamUserInfo == null
|| iamUserInfo.getMessageEncryptTabels() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader().getData() == null){
throw new IamGlobalException(null, "参数传递错误,未收到参数");
}
// 对核心数据解密
String bodyParam = iamUserInfo.getMessageEncryptTabels().getHeader().getData();
String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
ObjectMapper objectMapper = new ObjectMapper();
IamUserAcceptDto userAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamUserAcceptDto.class);
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(userAcceptDto);
// 处理业务逻辑,存储用户,返回用户id
iamCommonResponseDto = this.syncIamService.userUpdateService(userAcceptDto);
iamCommonResponseDto.setBimRequestId(userAcceptDto.getBimRequestId());
}catch (IamGlobalException e){
iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
String message = e.getMessage();
iamCommonResponseDto.setMessage(message);
log.error(iamCommonResponseDto.getMessage());
}catch (Exception e){
iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
iamCommonResponseDto.setMessage("操作失败" + e.getMessage());
log.error(iamCommonResponseDto.getMessage());
}
// 对核心数据解密
String bodyParam = iamUserInfo.getMessageEncryptTabels().getHeader().getData();
String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
ObjectMapper objectMapper = new ObjectMapper();
IamUserAcceptDto userAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamUserAcceptDto.class);
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(userAcceptDto);
// 处理业务逻辑,存储用户,返回用户id
IamCommonResponseDto iamCommonResponseDto = this.syncIamService.userUpdateService(userAcceptDto);
// 处理统一响应PO层,并加密业务字段
MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader();
SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto);
return sendPoEncryptPo;
}
@PostMapping({"/UserDeleteService"})
public SendPoEncryptPo userDeleteService(@RequestBody AcceptEncryptPo iamUserInfo) throws JsonProcessingException {
if (iamUserInfo == null
|| iamUserInfo.getMessageEncryptTabels() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader().getData() == null){
throw new IamGlobalException(null, "参数传递错误,未收到参数");
IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto();
try {
if (iamUserInfo == null
|| iamUserInfo.getMessageEncryptTabels() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader() == null
|| iamUserInfo.getMessageEncryptTabels().getHeader().getData() == null){
throw new IamGlobalException(null, "参数传递错误,未收到参数");
}
// 对核心数据解密
String bodyParam = iamUserInfo.getMessageEncryptTabels().getHeader().getData();
String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
ObjectMapper objectMapper = new ObjectMapper();
IamUserAcceptDto userAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamUserAcceptDto.class);
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(userAcceptDto);
// 处理业务逻辑,存储用户,返回用户id
iamCommonResponseDto = this.syncIamService.userDeleteService(userAcceptDto);
iamCommonResponseDto.setBimRequestId(userAcceptDto.getBimRequestId());
}catch (IamGlobalException e){
iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
String message = e.getMessage();
iamCommonResponseDto.setMessage(message);
log.error(iamCommonResponseDto.getMessage());
}catch (Exception e){
iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
iamCommonResponseDto.setMessage("操作失败" + e.getMessage());
log.error(iamCommonResponseDto.getMessage());
}
// 对核心数据解密
String bodyParam = iamUserInfo.getMessageEncryptTabels().getHeader().getData();
String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
ObjectMapper objectMapper = new ObjectMapper();
IamUserAcceptDto userAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamUserAcceptDto.class);
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(userAcceptDto);
// 处理业务逻辑,存储用户,返回用户id
IamCommonResponseDto iamCommonResponseDto = this.syncIamService.userDeleteService(userAcceptDto);
// 处理统一响应PO层,并加密业务字段
MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader();
SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto);
return sendPoEncryptPo;
}
@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil;
import com.bamboocloud.codec.BamboocloudFacade;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -32,6 +33,7 @@ import com.jero.modules.docking.utils.DockingConstant;
import com.jero.modules.system.entity.*;
import com.jero.modules.system.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -215,14 +217,6 @@ public class SyncIamService {
// 获取角色(多个逗号分隔),针对大部分角用户默认写死一般用户
// (TODO 需要根据实际情况再沟通一遍角色怎么自动赋予),需要和角色接口那边沟通,确认具体情况
String selectedRoles = "123"; // 一般用户的角色ID
SysUser userByName = sysUserService.getUserByName(sysUser.getUsername());
if (!Objects.isNull(userByName)){
log.info("数据库值重复{}", userByName.getUsername());
iamUserCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE);
iamUserCreateResponse.setMessage("工号【" + userAcceptDto.getSrmsUsername() + "】已存在!");
return iamUserCreateResponse;
}
// 存储到用户表中
this.sysUserService.saveUser(sysUser, selectedRoles, selectedDeparts);
iamUserCreateResponse.setUid(sysUser.getId());
@@ -246,6 +240,15 @@ public class SyncIamService {
if (sysUser == null){
throw new IamGlobalException(userAcceptDto.getBimRequestId(), "未查询到id为(" + userAcceptDto.getBimUid() + ")用户,无法更新");
}
// 手机号唯一校验
if (StringUtils.isNotBlank(userAcceptDto.getSrmsPhone())){
int count = this.sysUserService.count(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getPhone, PasswordUtil.encrypt(userAcceptDto.getSrmsPhone()))
.ne(SysUser::getId, userAcceptDto.getBimUid()));
if (count > 0){
throw new IamGlobalException(userAcceptDto.getBimRequestId(), "手机号【" + userAcceptDto.getSrmsPhone() + "】已存在!");
}
}
if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsUsername())){
sysUser.setUsername(userAcceptDto.getSrmsUsername());