From 4b7ae5fe7956c90b7bf893f28f364e69a2b7cc32 Mon Sep 17 00:00:00 2001 From: yjz <3131811435@qq.com> Date: Wed, 15 Nov 2023 15:59:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(iam):=20=E7=94=A8=E6=88=B7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=82=E5=B8=B8=E6=8D=95=E8=8E=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysUserServiceImpl.java | 20 +++ .../docking/iam/client/TestClient.java | 10 +- .../iam/controller/SyncIamController.java | 130 +++++++++++------- .../docking/iam/service/SyncIamService.java | 19 +-- 4 files changed, 116 insertions(+), 63 deletions(-) diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java index a4dd9875..ecbc9927 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -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 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 impl } } + private void uniqueCheckout(SysUser user) { + // 账号唯一性校验 + if (StringUtils.isNotBlank(user.getUsername())) { + Integer count = userMapper.selectCount(new LambdaQueryWrapper().eq(SysUser::getUsername, user.getUsername())); + if (count > 0) { + throw new ServiceException("工号【" + user.getUsername() + "】已存在!"); + } + } + // 手机号唯一校验 + if (StringUtils.isNotBlank(user.getPhone())) { + Integer count = userMapper.selectCount(new LambdaQueryWrapper().eq(SysUser::getPhone, user.getPhone())); + if (count > 0) { + throw new ServiceException("电话【" + PasswordUtil.decrypt(user.getPhone()) + "】已存在!"); + } + } + } + /** * @Remarks: 对手机号、邮箱进行加密处理 **/ diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java index 3396713d..7c739d02 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java @@ -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); } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java index f8bc03b9..7d187853 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java @@ -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; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java index 05e6b52c..65273b98 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java @@ -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() + .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());