From c365c7b5fd635ba69981383d956e5596e3eb1c00 Mon Sep 17 00:00:00 2001 From: zer0Black <694429613@qq.com> Date: Thu, 5 Oct 2023 12:39:19 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=B7=BB=E5=8A=A0=E3=80=91=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=9B=E5=BB=BA=E6=8E=A5=E5=8F=A3=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E5=8D=B0=EF=BC=8C=E5=B7=A5=E5=8F=B7=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docking/iam/client/TestClient.java | 111 ++++++++++++++++++ .../iam/controller/SyncIamController.java | 74 +++++++----- .../docking/iam/dto/IamCommonAcceptDto.java | 2 + .../docking/iam/dto/IamUserAcceptDto.java | 2 + .../docking/iam/po/AcceptPoSystemPo.java | 2 +- .../docking/iam/service/SyncIamService.java | 11 +- .../src/main/resources/application-dev.yml | 8 +- 7 files changed, 172 insertions(+), 38 deletions(-) create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java 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 new file mode 100644 index 00000000..43af8f24 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java @@ -0,0 +1,111 @@ +package com.jero.modules.docking.iam.client; + +import cn.hutool.http.HttpUtil; +import com.bamboocloud.codec.BamboocloudFacade; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jero.common.util.DateUtils; +import com.jero.common.util.UUIDGenerator; +import com.jero.common.util.UUIDUtils; +import com.jero.config.sign.util.HttpUtils; +import com.jero.modules.docking.iam.dto.IamUserAcceptDto; +import com.jero.modules.docking.iam.po.AcceptPoSystemPo; +import com.jero.modules.docking.iam.po.MessageHeader; +import com.jero.modules.docking.iam.po.MessageTabels; +import com.jero.modules.docking.iam.po.MessageTabelsHeader; +import com.jero.modules.docking.utils.DockingConstant; +import org.apache.poi.ss.formula.functions.T; + +import java.util.Date; + +/** + * 测试接口是否正确的客户端,mock IAM发送请求 + */ +public class TestClient { + + public static void main(String[] args) throws JsonProcessingException { + TestClient testClient = new TestClient(); + testClient.sendUserCreate(); // 创建用户接口测试 + } + + /** + * 封装统一发送的PO层 + * @param encryptData + * @return + */ + private AcceptPoSystemPo handlerPoPackage(String encryptData) { + MessageHeader messageHeader = new MessageHeader(); + messageHeader.setInterfaceID("SRMSUSERCREATE"); + messageHeader.setUUID(UUIDGenerator.generate()); + messageHeader.setMessageId(UUIDGenerator.generate()); + messageHeader.setSender(DockingConstant.IAM_SYSTEM_NAME); + messageHeader.setReceiver(DockingConstant.SYSTEM_NAME); + + Date curDate = new Date(); + messageHeader.setSendDate(DateUtils.formatDate(curDate, "YYYYMMDD")); + messageHeader.setSendTime(DateUtils.formatDate(curDate, "HHmmss")); + + MessageTabelsHeader messageTabelsHeader = new MessageTabelsHeader(); + messageTabelsHeader.setData(encryptData); + + MessageTabels messageTabels = new MessageTabels(); + messageTabels.setHeader(messageTabelsHeader); + + AcceptPoSystemPo acceptPoSystemPo = new AcceptPoSystemPo(); + acceptPoSystemPo.setMessageHeader(messageHeader); + acceptPoSystemPo.setMessageTabels(messageTabels); + + return acceptPoSystemPo; + } + + /** + * 用户创建测试 + */ + private void sendUserCreate() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); + iamUserAcceptDto.setSrmsCompanyCode("123"); + iamUserAcceptDto.setSrmsOrgCode("123/321"); + iamUserAcceptDto.setSrmsTypeId("001"); + iamUserAcceptDto.setSrmsUsername("10001231"); + iamUserAcceptDto.setSrmsRealname("李兵"); + iamUserAcceptDto.setSrmsPassword("1qaz@WSX"); + iamUserAcceptDto.setSrmsSex("1"); // 男 + iamUserAcceptDto.setSrmsPost("主任"); + iamUserAcceptDto.setSrmsDutyLevelId("4"); // 主管级,srms不解析,直接存 + iamUserAcceptDto.setSrmsRace("3"); // 工程技术族,srms不解析,直接存 + iamUserAcceptDto.setSrmsPostSequence("3"); // 工程,srms不解析,直接存 + iamUserAcceptDto.setSrmsTechnicalPosition("5"); // 正高级工程师,srms不解析,直接存 + iamUserAcceptDto.setSrmsDirectLeadership("1706939999105900545"); // 直接上级,不清楚应该存什么,暂时存为id(fcc-test) + iamUserAcceptDto.setSrmsPostStatus("1"); // 在岗,srms不解析,直接存 + iamUserAcceptDto.setSrmsStatus("1"); // 1在册,0离职 + iamUserAcceptDto.setSrmsOfficePhone("022-87648762"); + iamUserAcceptDto.setSrmsPhone("13811112222"); + iamUserAcceptDto.setSrmsEmail("test@sinotruk.com"); + iamUserAcceptDto.setSrmsIdNumber("532522199302120034"); + iamUserAcceptDto.setSrmsEducation("3"); // 专科,srms不解析,直接存 + iamUserAcceptDto.setSrmsDepartmentBeforeTransfer("测试部门"); // srms不解析,直接存 + iamUserAcceptDto.setSrmsCreateTime("2023-10-15 10:35:20"); +// iamUserAcceptDto.setSrmsUpdateTime("2023-10-15 10:35:20"); // 测试不发送UpdateTime的情况 + iamUserAcceptDto.setSrmsEntryTime("2020-11-11"); + + iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamUserAcceptDto.setBimRemoteUser("srmsIam"); + iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); + + // 加密数据 + ObjectMapper objectMapper = new ObjectMapper(); + String sendData = objectMapper.writeValueAsString(iamUserAcceptDto); + String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + + // 封装 AcceptPoSystemPo 为PO层套壳 + AcceptPoSystemPo sendPoDataEntity = handlerPoPackage(encryptData); + String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + + // 发送数据 + String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService"; + String response = HttpUtil.post(url, sendPoDataJson); + System.out.printf("用户创建接口响应:" + 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 01f24c27..97278515 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 @@ -19,6 +19,7 @@ import com.jero.modules.docking.utils.DockingConstant; import com.jero.modules.docking.utils.SHA256Util; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -42,7 +43,7 @@ public class SyncIamController { private SyncIamService syncIamService; @PostMapping({"/SchemaService"}) - public SendPoSystemPo schemaService(@RequestBody AcceptPoSystemPo iamCommon) throws JsonProcessingException { + public SendPoSystemPo schemaService(@RequestBody AcceptPoSystemPo iamCommon) throws JsonProcessingException { if (iamCommon == null || iamCommon.getMessageTabels() == null || iamCommon.getMessageTabels().getHeader() == null @@ -71,36 +72,45 @@ public class SyncIamController { } @PostMapping({"/UserCreateService"}) - public SendPoSystemPo userCreateService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { - if (iamUserInfo == null - || iamUserInfo.getMessageTabels() == null - || iamUserInfo.getMessageTabels().getHeader() == null - || iamUserInfo.getMessageTabels().getHeader().getData() == null){ - throw new IamGlobalException(null, "参数传递错误,未收到参数"); + public SendPoSystemPo userCreateService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { + IamUserAcceptDto userAcceptDto = null; + try { + if (iamUserInfo == null + || iamUserInfo.getMessageTabels() == null + || iamUserInfo.getMessageTabels().getHeader() == null + || iamUserInfo.getMessageTabels().getHeader().getData() == null){ + throw new IamGlobalException(null, "参数传递错误,未收到参数"); + } + + // 对核心数据解密 + String bodyParam = iamUserInfo.getMessageTabels().getHeader().getData(); + String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + + ObjectMapper objectMapper = new ObjectMapper(); + userAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamUserAcceptDto.class); + + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(userAcceptDto); + + // 处理业务逻辑,存储用户,返回用户id + IamUserCreateResponse iamUserCreateResponse = this.syncIamService.userCreateService(userAcceptDto); + + // 处理统一响应PO层,并加密业务字段 + MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader(); + SendPoSystemPo sendPoSystemPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamUserCreateResponse); + return sendPoSystemPo; + } catch (DuplicateKeyException duplicateKeyException) { + log.error("数据库值重复:{}", duplicateKeyException.getMessage()); + if (userAcceptDto != null) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(), "数据库值重复,请检查工号【" + userAcceptDto.getSrmsUsername() + "】是否异常"); + } else { + throw new IamGlobalException(null, "未知异常,请联系管理员"); + } } - - // 对核心数据解密 - String bodyParam = iamUserInfo.getMessageTabels().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 - IamUserCreateResponse iamUserCreateResponse = this.syncIamService.userCreateService(userAcceptDto); - - // 处理统一响应PO层,并加密业务字段 - MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader(); - SendPoSystemPo sendPoSystemPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamUserCreateResponse); - - return sendPoSystemPo; } @PostMapping({"/UserUpdateService"}) - public SendPoSystemPo userUpdateService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { + public SendPoSystemPo userUpdateService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { if (iamUserInfo == null || iamUserInfo.getMessageTabels() == null || iamUserInfo.getMessageTabels().getHeader() == null @@ -129,7 +139,7 @@ public class SyncIamController { } @PostMapping({"/UserDeleteService"}) - public SendPoSystemPo userDeleteService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { + public SendPoSystemPo userDeleteService(@RequestBody AcceptPoSystemPo iamUserInfo) throws JsonProcessingException { if (iamUserInfo == null || iamUserInfo.getMessageTabels() == null || iamUserInfo.getMessageTabels().getHeader() == null @@ -158,7 +168,7 @@ public class SyncIamController { } @PostMapping({"/OrgCreateService"}) - public SendPoSystemPo orgCreateService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { + public SendPoSystemPo orgCreateService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { if (iamOrgInfo == null || iamOrgInfo.getMessageTabels() == null || iamOrgInfo.getMessageTabels().getHeader() == null @@ -187,7 +197,7 @@ public class SyncIamController { } @PostMapping({"/OrgUpdateService"}) - public SendPoSystemPo orgUpdateService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { + public SendPoSystemPo orgUpdateService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { if (iamOrgInfo == null || iamOrgInfo.getMessageTabels() == null || iamOrgInfo.getMessageTabels().getHeader() == null @@ -216,7 +226,7 @@ public class SyncIamController { } @PostMapping({"/OrgDeleteService"}) - public SendPoSystemPo orgDeleteService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { + public SendPoSystemPo orgDeleteService(@RequestBody AcceptPoSystemPo iamOrgInfo) throws JsonProcessingException { if (iamOrgInfo == null || iamOrgInfo.getMessageTabels() == null || iamOrgInfo.getMessageTabels().getHeader() == null @@ -249,7 +259,7 @@ public class SyncIamController { * 该接口包含角色创建、菜单创建、角色菜单关联、用户角色关联等4个接口 * 通过type字段来区分 */ - @PostMapping({"/OrgDeleteService"}) + @PostMapping({"/bpmcCreate"}) public BpmcResponseDto bpmcCreate(@RequestBody BpmcAcceptDto bpmcAcceptDto) throws JsonProcessingException { if (StrUtil.isEmpty(bpmcAcceptDto.getType())){ return BpmcResponseDto.error("接口类型(type)未传参,请检查"); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamCommonAcceptDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamCommonAcceptDto.java index c78b69cc..a318a0c0 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamCommonAcceptDto.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamCommonAcceptDto.java @@ -2,11 +2,13 @@ package com.jero.modules.docking.iam.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; +import lombok.ToString; /** * IAM的通用Dto,存放IAM接口的非业务通用属性。接口呗请求时会带着该参数 */ @Data +@ToString @JsonIgnoreProperties(ignoreUnknown = true) public class IamCommonAcceptDto { diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamUserAcceptDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamUserAcceptDto.java index a425e636..3b7e3ba8 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamUserAcceptDto.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamUserAcceptDto.java @@ -2,11 +2,13 @@ package com.jero.modules.docking.iam.dto; import com.jero.modules.docking.iam.annotation.IamProperty; import lombok.Data; +import lombok.ToString; /** * IAM的用户实体,接收IAM传递的用户数据 */ @Data +@ToString public class IamUserAcceptDto extends IamCommonAcceptDto { /** diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java index 6e5874a5..c3b7a259 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java @@ -7,7 +7,7 @@ import lombok.Data; * 和PO系统做数据交互的最外层壳,做数据接收用 */ @Data -public class AcceptPoSystemPo { +public class AcceptPoSystemPo { @JsonProperty("MessageHeader") private MessageHeader messageHeader; 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 25961769..48c86427 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 @@ -27,8 +27,11 @@ import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.SendPoSystemPo; import com.jero.modules.docking.iam.po.SendReturnsPo; import com.jero.modules.docking.utils.DockingConstant; +import com.jero.modules.system.controller.DuplicateCheckController; import com.jero.modules.system.entity.*; +import com.jero.modules.system.model.DuplicateCheckVo; import com.jero.modules.system.service.*; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.parameters.P; @@ -46,6 +49,7 @@ import java.util.List; /** * IAM对接业务处理类 */ +@Slf4j @Service @Transactional public class SyncIamService { @@ -74,6 +78,9 @@ public class SyncIamService { @Resource private ISysRolePermissionService sysRolePermissionService; + @Resource + private DuplicateCheckController duplicateCheckController; + /** * 校验IAM调用时的账号密码是否正确 * 校验通过了正常走后续,不通过直接返回 @@ -146,6 +153,8 @@ public class SyncIamService { * @return */ public IamUserCreateResponse userCreateService(IamUserAcceptDto userAcceptDto){ + log.info("用户创建收到的解密后数据:{}", userAcceptDto.toString()); + IamUserCreateResponse iamUserCreateResponse = new IamUserCreateResponse(); iamUserCreateResponse.setBimRequestId(userAcceptDto.getBimRequestId()); iamUserCreateResponse.setResultCode(DockingConstant.IAM_SUCCESS_RESULT_CODE); @@ -588,7 +597,7 @@ public class SyncIamService { Date curDate = new Date(); sendMessageHeader.setSendDate(DateUtils.formatDate(curDate, "YYYYMMDD")); - sendMessageHeader.setSendTime(DateUtils.formatDate(curDate, "hhmmss")); + sendMessageHeader.setSendTime(DateUtils.formatDate(curDate, "HHmmss")); ObjectMapper objectMapper = new ObjectMapper(); String returnData = objectMapper.writeValueAsString(object); diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 6644824a..a0d31fd6 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -367,8 +367,8 @@ file: path: D://opt//onlyoffice//file// iam: -# bimRemoteUser: srmsIam -# bimRemotePwd: srmsIam2023 - bimRemoteUser: bbcadmin - bimRemotePwd: P@ssw0rd + bimRemoteUser: srmsIam + bimRemotePwd: srmsIam2023 +# bimRemoteUser: bbcadmin +# bimRemotePwd: P@ssw0rd bpmcAppkey: test \ No newline at end of file