fix(iam): 用户接口异常捕获
This commit is contained in:
+20
@@ -2,6 +2,7 @@ package com.jero.modules.system.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.aliyun.oss.ServiceException;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -469,6 +470,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
//step.1 保存用户
|
||||
// 对手机号、邮箱进行加密处理
|
||||
this.proceedUserInfoEncrypt(user);
|
||||
// 唯一性校验
|
||||
this.uniqueCheckout(user);
|
||||
this.save(user);
|
||||
//step.2 保存角色
|
||||
if(oConvertUtils.isNotEmpty(selectedRoles)) {
|
||||
@@ -488,6 +491,23 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
}
|
||||
}
|
||||
|
||||
private void uniqueCheckout(SysUser user) {
|
||||
// 账号唯一性校验
|
||||
if (StringUtils.isNotBlank(user.getUsername())) {
|
||||
Integer count = userMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, user.getUsername()));
|
||||
if (count > 0) {
|
||||
throw new ServiceException("工号【" + user.getUsername() + "】已存在!");
|
||||
}
|
||||
}
|
||||
// 手机号唯一校验
|
||||
if (StringUtils.isNotBlank(user.getPhone())) {
|
||||
Integer count = userMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhone, user.getPhone()));
|
||||
if (count > 0) {
|
||||
throw new ServiceException("电话【" + PasswordUtil.decrypt(user.getPhone()) + "】已存在!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Remarks: 对手机号、邮箱进行加密处理
|
||||
**/
|
||||
|
||||
+5
-5
@@ -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);
|
||||
}
|
||||
|
||||
+80
-50
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+11
-8
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user