【添加】用户创建接口日志打印,工号重复的异常处理

This commit is contained in:
zer0Black
2023-10-05 12:39:19 +08:00
parent e341614792
commit c365c7b5fd
7 changed files with 172 additions and 38 deletions
@@ -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);
}
}
@@ -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<IamCommonAcceptDto> 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<IamUserAcceptDto> 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<IamUserAcceptDto> 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<IamUserAcceptDto> 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<IamOrgAcceptDto> 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<IamUserAcceptDto> 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<IamUserAcceptDto> 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)未传参,请检查");
@@ -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 {
@@ -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 {
/**
@@ -7,7 +7,7 @@ import lombok.Data;
* 和PO系统做数据交互的最外层壳,做数据接收用
*/
@Data
public class AcceptPoSystemPo<T> {
public class AcceptPoSystemPo {
@JsonProperty("MessageHeader")
private MessageHeader messageHeader;
@@ -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);