diff --git a/laws-module-system/src/main/java/com/jero/modules/system/controller/SysGroupController.java b/laws-module-system/src/main/java/com/jero/modules/system/controller/SysGroupController.java index 578eac4b..baaf867d 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/controller/SysGroupController.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/controller/SysGroupController.java @@ -100,10 +100,7 @@ public class SysGroupController { @GetMapping("/list") @ApiOperation(value = "分组管理-列表查询", notes = "分组管理-列表查询") public Result list() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - lambdaQueryWrapper.eq(SysGroup::getCreateBy, loginUser.getUsername()); - List list = sysGroupService.list(lambdaQueryWrapper); + List list = sysGroupService.queryList(); return Result.OK(list); } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java index 6692e215..506f78ea 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java @@ -271,6 +271,24 @@ public class SysUser implements Serializable { private String source; + /** + * 入职时间 + */ + @ApiModelProperty(value = "入职时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date entryTime; + + + /** + * 离职时间 + */ + @ApiModelProperty(value = "离职时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date resignationTime; + + /** * 拼接真实姓名和工号形成唯一的用户信息可用户查看 * 不能用get开头,否则会造成初始化queryWrapper的bug diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysGroupMapper.java b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysGroupMapper.java index e896e459..1e888813 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysGroupMapper.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysGroupMapper.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.modules.system.entity.SysGroup; +import java.util.List; + /** *

* 用户分组表 Mapper 接口 @@ -18,4 +20,6 @@ public interface SysGroupMapper extends BaseMapper { IPage queryPageList(Page page,SysGroup sysGroup); SysGroup queryOne(String id); + + List queryList(SysGroup sysGroup); } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGroupMapper.xml b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGroupMapper.xml index 1b363af0..b12b5cf7 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGroupMapper.xml +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGroupMapper.xml @@ -10,7 +10,11 @@ sg.create_time, count(sug.id) as count, GROUP_CONCAT(sug.user_id) as ids, - GROUP_CONCAT(CONCAT(su.realname, '(', su.username, ')') ORDER BY su.realname, su.username) as userNames + GROUP_CONCAT(CONCAT(su.realname, '(', su.username, ')') ORDER BY su.realname, su.username) as userNames, + CASE + WHEN sg.create_by = #{sysGroup.currentUserName} THEN 1 + ELSE 0 + END as is_admin_created from sys_group sg LEFT JOIN sys_user_group sug on sg.id = sug.group_id LEFT JOIN sys_user su on sug.user_id = su.id @@ -33,7 +37,7 @@ group by sg.id,sg.group_name - order by sg.create_time desc + order by is_admin_created desc, sg.create_time desc + + diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysGroupService.java b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysGroupService.java index aa869adb..9eb11d5b 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/ISysGroupService.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/ISysGroupService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.jero.common.api.vo.Result; import com.jero.modules.system.entity.SysGroup; import javax.servlet.http.HttpServletRequest; +import java.util.List; /** *

@@ -26,4 +27,7 @@ public interface ISysGroupService extends IService { IPage queryPageList(SysGroup sysGroup, Integer pageNo, Integer pageSize, HttpServletRequest req); SysGroup queryOne(String id); + + List queryList(); + } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysGroupServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysGroupServiceImpl.java index f37431f6..3c8c3ead 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysGroupServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysGroupServiceImpl.java @@ -128,4 +128,16 @@ public class SysGroupServiceImpl extends ServiceImpl i return Result.OK("操作成功"); } + @Override + public List queryList() { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + SysGroup sysGroup = new SysGroup(); + if (loginUser.getRoleIds().contains("admin") || loginUser.getRoleIds().contains("superAdmin")){ + sysGroup.setIsAdmin("1"); + }else { + sysGroup.setIsAdmin("0"); + } + sysGroup.setCurrentUserName(loginUser.getUsername()); + return sysGroupMapper.queryList(sysGroup); + } } 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 989ec9f1..565fc540 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 @@ -779,6 +779,10 @@ public class SysUserServiceImpl extends ServiceImpl impl lambdaUpdateWrapper.set(SysUser::getCreateBy,user.getCreateBy()); lambdaUpdateWrapper.set(SysUser::getUpdateTime,user.getUpdateTime()); lambdaUpdateWrapper.set(SysUser::getUpdateBy,user.getUpdateBy()); + lambdaUpdateWrapper.set(SysUser::getBirthday,user.getBirthday()); + lambdaUpdateWrapper.set(SysUser::getEntryTime,user.getEntryTime()); + lambdaUpdateWrapper.set(SysUser::getResignationTime,user.getResignationTime()); + lambdaUpdateWrapper.set(SysUser::getFeishuId,user.getFeishuId()); update(lambdaUpdateWrapper); // this.updateById(user); diff --git a/laws-modules-docking/lib/bamboocloud_Codec-0.0.3.jar b/laws-modules-docking/lib/bamboocloud_Codec-0.0.3.jar new file mode 100644 index 00000000..3d57fc30 Binary files /dev/null and b/laws-modules-docking/lib/bamboocloud_Codec-0.0.3.jar differ diff --git a/laws-modules-docking/pom.xml b/laws-modules-docking/pom.xml index 5b9c98b5..b8c1be62 100644 --- a/laws-modules-docking/pom.xml +++ b/laws-modules-docking/pom.xml @@ -34,6 +34,13 @@ org.springframework spring-webflux + + com.banboocloud.codec + bamboocloud_Codec + 0.0.3 + system + ${project.basedir}/lib/bamboocloud_Codec-0.0.3.jar + - \ No newline at end of file + diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java index a8f76e99..4147ca59 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java @@ -256,30 +256,25 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { logMessage(JSON.toJSONString(instanceDto), instanceDto.getTitle(), jsonResponse, "/feishu/synchronizeApprovalInstance", Constant.FEISHU_PENDING); // 使用审批机器人推送消息 String taskStatus = instanceDto.getTaskStatus(); - String taskIds = instanceDto.getTaskIds(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); - lambdaQueryWrapper.eq(ProcessApprovalRecord::getTaskId,taskIds); + lambdaQueryWrapper.eq(ProcessApprovalRecord::getTaskId, instanceDto.getTaskIds()).or() + .eq(ProcessApprovalRecord::getTransferTaskId, instanceDto.getTaskIds()); ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getOne(lambdaQueryWrapper, false); String feishuMsgId = processApprovalRecord.getFeishuMsgId(); - if (StringUtils.isBlank(feishuMsgId)) { - // 如果该条审核记录没有飞书消息id,证明是同步待办 - BotApprovalMessageDto botApprovalMessageDto = new BotApprovalMessageDto(); - botApprovalMessageDto.setTemplateId("1008"); - botApprovalMessageDto.setApprovalName(instanceDto.getTitle()); - botApprovalMessageDto.setReceivedUserId(approvalsInstanceVo.getTask_list().get(0).getUser_id()); - botApprovalMessageDto.setApplicantUserId(approvalsInstanceVo.getUser_id()); - botApprovalMessageDto.setTitleUserId(approvalsInstanceVo.getUser_id()); - botApprovalMessageDto.setContent1(instanceDto.getTitle()); - botApprovalMessageDto.setPcUrl(approvalsInstanceVo.getTask_list().get(0).getLinks().getPc_link()); - botApprovalMessageDto.setMobileUrl(approvalsInstanceVo.getTask_list().get(0).getLinks().getMobile_link()); - String msgId = sendApprovalMessageByBot(botApprovalMessageDto); - // 将msgId存入审核记录表 - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.eq(ProcessApprovalRecord::getTaskId,instanceDto.getTaskIds()); - lambdaUpdateWrapper.set(ProcessApprovalRecord::getFeishuMsgId,msgId); - processApprovalRecordService.update(lambdaUpdateWrapper); + if (StringUtils.isBlank(feishuMsgId) || instanceDto.getTaskIds().contains("_")) { + // 飞书消息为空或者是转办的情况下,都需要进行待办消息的推送 + if ("PENDING".equals(instanceDto.getTaskStatus())) { + BotApprovalMessageDto botApprovalMessageDto = buildBotApprovalMessageDto(instanceDto, approvalsInstanceVo); + String msgId = sendApprovalMessageByBot(botApprovalMessageDto); + // 将msgId存入审核记录表 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(ProcessApprovalRecord::getTaskId, instanceDto.getTaskIds()).or() + .eq(ProcessApprovalRecord::getTransferTaskId, instanceDto.getTaskIds()); + lambdaUpdateWrapper.set(ProcessApprovalRecord::getFeishuMsgId,msgId); + processApprovalRecordService.update(lambdaUpdateWrapper); + } }else { - // 如果该条审核记录有飞书id ,说明是同步已办 + // 如果该条审核记录有飞书id ,说明是同步已办,进行审核消息状态的更新 ApprovalsUpdateMessageVo approvalsUpdateMessageVo = new ApprovalsUpdateMessageVo(); approvalsUpdateMessageVo.setMessage_id(feishuMsgId); approvalsUpdateMessageVo.setStatus(taskStatus); @@ -291,6 +286,19 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { } } + private BotApprovalMessageDto buildBotApprovalMessageDto(InstanceDto instanceDto, ApprovalsInstanceVo approvalsInstanceVo) { + BotApprovalMessageDto botApprovalMessageDto = new BotApprovalMessageDto(); + botApprovalMessageDto.setTemplateId("1008"); + botApprovalMessageDto.setApprovalName(instanceDto.getTitle()); + botApprovalMessageDto.setReceivedUserId(approvalsInstanceVo.getTask_list().get(0).getUser_id()); + botApprovalMessageDto.setApplicantUserId(approvalsInstanceVo.getUser_id()); + botApprovalMessageDto.setTitleUserId(approvalsInstanceVo.getUser_id()); + botApprovalMessageDto.setContent1(instanceDto.getTitle()); + botApprovalMessageDto.setPcUrl(approvalsInstanceVo.getTask_list().get(0).getLinks().getPc_link()); + botApprovalMessageDto.setMobileUrl(approvalsInstanceVo.getTask_list().get(0).getLinks().getMobile_link()); + return botApprovalMessageDto; + } + private ApprovalsInstanceVo buildApprovalsInstanceVo(InstanceDto instanceDto) throws Exception { // 转换userId为飞书Id // 发起人的id 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 c6676aa9..07609303 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 @@ -1,12 +1,16 @@ package com.jero.modules.docking.iam.client; import cn.hutool.http.HttpUtil; -import com.bamboocloud.codec.BamboocloudFacade; +import com.alibaba.fastjson.JSON; +import com.banboocloud.Codec.BamboocloudFacade; +import com.banboocloud.Codec.Sm3Signature; +import com.banboocloud.Codec.Sm4Cipher; 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.modules.docking.utils.BamboocloudCheryUtils; import com.jero.modules.docking.iam.dto.IamCommonAcceptDto; import com.jero.modules.docking.iam.dto.IamOrgAcceptDto; import com.jero.modules.docking.iam.dto.IamUserAcceptDto; @@ -15,45 +19,54 @@ import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.encrypt.MessageEncryptTabels; import com.jero.modules.docking.iam.po.encrypt.MessageEncryptTabelsHeader; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; -import com.jero.modules.docking.utils.BamboocloudUtils; import com.jero.modules.docking.utils.DockingConstant; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import java.lang.reflect.Field; import java.util.Date; +import java.util.Map; +import java.util.Objects; +import java.util.TreeMap; /** * 测试接口是否正确的客户端,mock IAM发送请求 */ public class TestClient { + //SM4 + private String key = "JLB6L6MJVIT5Z7IL"; + private String type = "SM4"; + public static void main(String[] args) throws JsonProcessingException { TestClient testClient = new TestClient(); // testClient.sendSchemaService(); // 字段映射接口测试 -// for (int i = 0; i < 1; i++) { +// for (int i = 1; i < 2; i++) { // System.out.println(i); // testClient.sendUserCreate(i); // } // 创建用户接口测试 // testClient.sendUserUpdate(); // 更新用户接口测试 +// testClient.sendUserDel(); // 更新用户接口测试 // testClient.sendOrgCreate(); // 组织创建接口测试 +// testClient.sendOrgUpdate(); // 组织修改接口测试 +// testClient.sendOrgDel(); // 组织删除接口测试 // testClient.sendQueryAllUserIdsService(); // 查询所有用户ID接口测试 // testClient.sendQueryAllOrgIdsService(); // 查询所有组织ID接口测试 // testClient.sendQueryOrgByIdService(); // 查询指定id的组织数据测试 -// testClient.sendQueryUserByIdService(); // 查询指定id的用户数据测试 - testClient.decryptSting("8rAKWPUwkEZ3yYLy/1TuGGkIGCYtc+MD56pShLi97OmMttoFooo5GXZ/lY4NrQ5DiWmVUX23zqDwyQqufXLZNDU+KuJO/9UonpqUlZxM91w="); + testClient.sendQueryUserByIdService(); // 查询指定id的用户数据测试 +// testClient.decryptSting("8rAKWPUwkEZ3yYLy/1TuGGkIGCYtc+MD56pShLi97OmMttoFooo5GXZ/lY4NrQ5DiWmVUX23zqDwyQqufXLZNDU+KuJO/9UonpqUlZxM91w="); } private void decryptSting(String encryptString) { - String decrypt = BamboocloudUtils.getPlaintext(encryptString, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + String decrypt = BamboocloudCheryUtils.getPlaintext(encryptString, key, type); System.out.println("解密后数据:" + decrypt); } // 对数据解密 private void decryptData(String encryptData) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - SendPoEncryptPo sendPoEncryptPo = objectMapper.readValue(encryptData, SendPoEncryptPo.class); - String decrypt = BamboocloudUtils.getPlaintext(sendPoEncryptPo.getReturns().getData(), DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); - - System.out.println("解密后数据:" + decrypt); + String res = BamboocloudFacade.decrypt(encryptData, key, type); + System.out.println("解密后数据:" + res); } /** @@ -89,24 +102,54 @@ public class TestClient { /** * Schema映射获取 */ - private void sendSchemaService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService"; + private void sendSchemaService() { + String url = "http://localhost:8188/laws-chery/sync/iam/chery/SchemaService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); - String response = HttpUtil.post(url, sendPoDataJson); + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + //输出密文 + System.out.println("加密:" + target); + //输出解密 + System.out.println("解密:" + sm4Cipher.decrypt(target,key)); + String response = HttpUtil.post(url, target); System.out.println("映射接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("映射接口响应解密:" + res); + } + + @NotNull + private StringBuilder getStringBuilder(IamCommonAcceptDto iamCommonAcceptDto) { + Map reqMap = (Map) JSON.parse(JSON.toJSONString(iamCommonAcceptDto)); + + Map verifymap = new TreeMap<>(); + StringBuilder sb = new StringBuilder(); + for (String key : reqMap.keySet()) { + verifymap.put(key, reqMap.get(key)); + } + for (String key : verifymap.keySet()) { + if (!"signature".equals(key)) { + sb.append(key).append("=").append(verifymap.get(key)).append("&"); + } + } + sb.deleteCharAt(sb.length() - 1); + System.out.println(reqMap.get("signature") + " now " + sb.toString()); + return sb; } /** @@ -115,41 +158,43 @@ public class TestClient { private void sendUserCreate(int i) throws JsonProcessingException { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); - iamUserAcceptDto.setSrmsCompanyCode("123"); iamUserAcceptDto.setSrmsOrgCode("123/321"); iamUserAcceptDto.setSrmsTypeId("001"); iamUserAcceptDto.setSrmsUsername((108088 + i) +""); iamUserAcceptDto.setSrmsRealname("测试" + i); - iamUserAcceptDto.setSrmsPassword("1qaz@WSX"); iamUserAcceptDto.setSrmsSex("1"); // 男 - iamUserAcceptDto.setSrmsPost("主任"); - iamUserAcceptDto.setSrmsDutyLevelId("4"); // 主管级,srms不解析,直接存 - iamUserAcceptDto.setSrmsDirectLeadership("1706939999105900545"); // 直接上级,不清楚应该存什么,暂时存为id(fcc-test) - iamUserAcceptDto.setSrmsPostStatus("1"); // 在岗,srms不解析,直接存 - iamUserAcceptDto.setSrmsStatus("1"); // 1在册,0离职 - iamUserAcceptDto.setSrmsOfficePhone("022-87648762"); iamUserAcceptDto.setSrmsPhone("13811112232"); iamUserAcceptDto.setSrmsEmail("test@sinotruk.com"); - iamUserAcceptDto.setSrmsCreateTime("2023-10-15 10:35:20"); - + iamUserAcceptDto.setEmployeeNo("1111"); iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamUserAcceptDto.setBimRemoteUser("srmsIam"); iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); + iamUserAcceptDto.setBirthday("2024-05-01"); + iamUserAcceptDto.setEntryTime("2024-06-01"); + iamUserAcceptDto.setResignationTime("2024-07-01"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamUserAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - 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 response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserCreateService"; +// String url = "laws-test.sinotruk.com/laws-chery/sync/iam/chery/UserCreateService"; + String response = HttpUtil.post(url, target); System.out.println("用户创建接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户创建接口响应解密:" + res); } /** @@ -158,27 +203,70 @@ public class TestClient { private void sendUserUpdate() throws JsonProcessingException { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); - iamUserAcceptDto.setBimUid("1709786346053017601"); // 数据库中取到的ID - iamUserAcceptDto.setSrmsPost("科长"); - iamUserAcceptDto.setSrmsUpdateTime("2023-10-15 10:35:20"); // 测试不发送UpdateTime的情况 + iamUserAcceptDto.setBimUid("1803973103451799554"); // 数据库中取到的ID + iamUserAcceptDto.setBirthday("2018-12-05 00:00:00"); + iamUserAcceptDto.setBirthday("2024-05-01"); + iamUserAcceptDto.setEntryTime("2024-06-01"); + iamUserAcceptDto.setResignationTime("2024-07-01"); + iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamUserAcceptDto.setEmployeeNo("feishuid"); + iamUserAcceptDto.setBimRemoteUser("srmsIam"); + iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserUpdateService"; + String response = HttpUtil.post(url, target); + System.out.println("用户更新接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户更新接口响应解密:" + res); + } + + + /** + * 用户删除测试 + */ + private void sendUserDel() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); + iamUserAcceptDto.setBimUid("1819982931501633537"); // 数据库中取到的ID 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); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserUpdateService"; - String response = HttpUtil.post(url, sendPoDataJson); - System.out.println("用户更新接口响应:" + response); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserDeleteService"; + String response = HttpUtil.post(url, target); + System.out.println("用户删除接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户删除接口响应解密:" + res); } /** @@ -188,55 +276,135 @@ public class TestClient { // 封装 IamUserAcceptDto 为用户数据层 IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); - iamOrgAcceptDto.setSrmsOrgCode("IA00102"); + iamOrgAcceptDto.setSrmsOrgCode("IA00104"); iamOrgAcceptDto.setSrmsDepartName("测试IAM部门"); iamOrgAcceptDto.setSrmsParentCode(""); - iamOrgAcceptDto.setSrmsCompany("测试公司"); - iamOrgAcceptDto.setSrmsStatus("1"); - iamOrgAcceptDto.setSrmsCreateTime("2023-10-12 10:35:20"); - iamOrgAcceptDto.setSrmsType("002"); - iamOrgAcceptDto.setSrmsOrgCategory("2"); iamOrgAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamOrgAcceptDto.setBimRemoteUser("srmsIam"); iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamOrgAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/OrgCreateService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgCreateService"; + String response = HttpUtil.post(url, target); System.out.println("组织创建接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织创建接口响应解密:" + res); + } + + + /** + * 用户修改测试 + */ + private void sendOrgUpdate() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); + iamOrgAcceptDto.setBimOrgId("IA00104"); + iamOrgAcceptDto.setSrmsOrgCode("IA00104"); + iamOrgAcceptDto.setSrmsDepartName("测试IAM部门1"); + iamOrgAcceptDto.setSrmsParentCode(""); + + iamOrgAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamOrgAcceptDto.setBimRemoteUser("srmsIam"); + iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); + + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgUpdateService"; + String response = HttpUtil.post(url, target); + System.out.println("组织修改接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织修改接口响应解密:" + res); + } + + /** + * 用户删除测试 + */ + private void sendOrgDel() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); + iamOrgAcceptDto.setBimOrgId("IA00104"); + + iamOrgAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamOrgAcceptDto.setBimRemoteUser("srmsIam"); + iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); + + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgDeleteService"; + String response = HttpUtil.post(url, target); + System.out.println("组织删除接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织删除接口响应解密:" + res); } /** * 获取全部用户id */ private void sendQueryAllUserIdsService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryAllUserIdsService"; + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryAllUserIdsService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); - String response = HttpUtil.post(url, sendPoDataJson); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + String response = HttpUtil.post(url, target); System.out.println("查询全部用户id接口响应:" + response); - this.decryptData(response); } @@ -244,22 +412,28 @@ public class TestClient { * 获取全部组织id */ private void sendQueryAllOrgIdsService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryAllOrgIdsService"; + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryAllOrgIdsService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); - String response = HttpUtil.post(url, sendPoDataJson); + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + String response = HttpUtil.post(url, target); System.out.println("查询全部组织id接口响应:" + response); this.decryptData(response); @@ -271,22 +445,27 @@ public class TestClient { private void sendQueryUserByIdService() throws JsonProcessingException { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); - iamUserAcceptDto.setBimUid("1709786346053017601"); // 数据库中取到的ID + iamUserAcceptDto.setBimUid("1819982931501633537"); // 数据库中取到的ID 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); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryUserByIdService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryUserByIdService"; + String response = HttpUtil.post(url, target); System.out.println("用户查询接口响应:" + response); this.decryptData(response); @@ -302,18 +481,23 @@ public class TestClient { iamOrgAcceptDto.setBimRemoteUser("srmsIam"); iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamOrgAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryOrgByIdService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryOrgByIdService"; + String response = HttpUtil.post(url, target); System.out.println("组织查询接口响应:" + response); this.decryptData(response); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java new file mode 100644 index 00000000..b0aa5d02 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java @@ -0,0 +1,22 @@ +package com.jero.modules.docking.iam.controller; + +import com.banboocloud.Codec.Sm3Signature; +import com.banboocloud.Codec.Sm4Cipher; + +public class EncryptTest { + public static void main(String[] args) { + //sm3签名 + String originalStr = "userId=1"; + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(originalStr); + + //sm4加解密 + String key = "JLB6L6MJVIT5Z7IL"; + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = "{\"userId\":1,\"signature\":\"" + signatureStr + "\"}"; + String target = sm4Cipher.encrypt(source, key); + + //输出密文 + System.out.println("target:" + target); + } +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamByCheryController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamByCheryController.java new file mode 100644 index 00000000..6b7d8c88 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamByCheryController.java @@ -0,0 +1,451 @@ +package com.jero.modules.docking.iam.controller; + +import cn.hutool.core.text.CharSequenceUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.oss.ServiceException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jero.common.constant.CacheConstant; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.modules.docking.iam.dto.IamCommonAcceptDto; +import com.jero.modules.docking.iam.dto.IamOrgAcceptDto; +import com.jero.modules.docking.iam.dto.IamUserAcceptDto; +import com.jero.modules.docking.iam.dto.bpmc.*; +import com.jero.modules.docking.iam.dto.response.*; +import com.jero.modules.docking.iam.exception.IamGlobalException; +import com.jero.modules.docking.iam.po.MessageHeader; +import com.jero.modules.docking.iam.po.decrypt.AcceptDecryptPo; +import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; +import com.jero.modules.docking.iam.service.SyncIamService; +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.cache.annotation.CacheEvict; +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; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * IAM同步的控制器,提供用户、组织、菜单和权限的同步 + */ +@RestController +@RequestMapping("/sync/iam/chery") +@Slf4j +public class SyncIamByCheryController { + + @Value("${iam.bpmcAppkey}") + private String bpmcAppkey; + + @Resource + private SyncIamService syncIamService; + + + @Resource + private BaseCommonService baseCommonService; + + @PostMapping({"/SchemaService"}) + public String schemaService(HttpServletRequest req) { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamCommonAcceptDto commonAcceptDto = JSONObject.parseObject(reqMap, IamCommonAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(commonAcceptDto); + // 处理业务逻辑,封装字段 + IamSchemaResponse iamSchemaResponse = this.syncIamService.getSchemaInfo(commonAcceptDto); + return this.syncIamService.strEncrypt(JSON.toJSONString(iamSchemaResponse)); + } + + @PostMapping({"/UserCreateService"}) + public String userCreateService(HttpServletRequest req) { + log.info("进入账号创建"); + IamUserAcceptDto userAcceptDto; + IamUserCreateResponse iamUserCreateResponse = new IamUserCreateResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + userAcceptDto = JSONObject.parseObject(reqMap, IamUserAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(userAcceptDto); + iamUserCreateResponse.setBimRequestId(userAcceptDto.getBimRequestId()); + // 处理业务逻辑,存储用户,返回用户id + 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()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamUserCreateResponse)); + } + + @PostMapping({"/UserUpdateService"}) + public String userUpdateService(HttpServletRequest req){ + IamUserCreateResponse iamUserCreateResponse = new IamUserCreateResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamUserAcceptDto userAcceptDto = JSONObject.parseObject(reqMap, IamUserAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(userAcceptDto); + // 处理业务逻辑,存储用户,返回用户id + iamUserCreateResponse = this.syncIamService.userUpdateService(userAcceptDto); + }catch (IamGlobalException e){ + iamUserCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + String message = e.getMessage(); + 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()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamUserCreateResponse)); + } + + @PostMapping({"/UserDeleteService"}) + public String userDeleteService(HttpServletRequest req) { + IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamUserAcceptDto userAcceptDto = JSONObject.parseObject(reqMap, 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()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamCommonResponseDto)); + } + + /** + * 组织创建和更新移除缓存 + * @param req + * @return + * @throws JsonProcessingException + */ + @PostMapping({"/OrgCreateService"}) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public String orgCreateService(HttpServletRequest req) { + IamOrgAcceptDto orgAcceptDto = null; + IamOrgCreateResponse iamOrgCreateResponse = new IamOrgCreateResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + orgAcceptDto = JSONObject.parseObject(reqMap, IamOrgAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(orgAcceptDto); + // 处理业务逻辑,存储组织,返回组织id + iamOrgCreateResponse = this.syncIamService.orgCreateService(orgAcceptDto); + } catch (DuplicateKeyException duplicateKeyException) { + log.error("数据库值重复:{}", duplicateKeyException.getMessage()); + if (orgAcceptDto != null) { + iamOrgCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamOrgCreateResponse.setMessage("操作失败" + "数据库值重复,请检查组织编号【" + orgAcceptDto.getSrmsOrgCode() + "】是否异常"); + } else { + iamOrgCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamOrgCreateResponse.setMessage("未知异常,请联系管理员"); + } + }catch (Exception e){ + iamOrgCreateResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamOrgCreateResponse.setMessage("操作失败" + e.getMessage()); + log.error(iamOrgCreateResponse.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamOrgCreateResponse)); + } + + /** + * 组织创建和更新移除缓存 + * @param req + * @return + * @throws JsonProcessingException + */ + @PostMapping({"/OrgUpdateService"}) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public String orgUpdateService(HttpServletRequest req) { + IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamOrgAcceptDto orgAcceptDto = JSONObject.parseObject(reqMap, IamOrgAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(orgAcceptDto); + // 处理业务逻辑,更新组织 + iamCommonResponseDto = this.syncIamService.orgUpdateService(orgAcceptDto); + }catch (Exception e){ + iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamCommonResponseDto.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamCommonResponseDto)); + } + + @PostMapping({"/OrgDeleteService"}) + public String orgDeleteService(HttpServletRequest req) { + IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamOrgAcceptDto orgAcceptDto = JSONObject.parseObject(reqMap, IamOrgAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(orgAcceptDto); + // 处理业务逻辑,更新组织 + iamCommonResponseDto = this.syncIamService.orgDeleteService(orgAcceptDto); + }catch (Exception e){ + iamCommonResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamCommonResponseDto.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamCommonResponseDto)); + } + + /** + * 对接统一权限服务平台。 + * 该接口包含角色创建、菜单创建、角色菜单关联、用户角色关联等4个接口 + * 通过type字段来区分 + */ + @PostMapping({"/bpmcCreate"}) + public SendPoEncryptPo bpmcCreate(@RequestBody AcceptDecryptPo acceptDecryptPo) throws JsonProcessingException { + if (acceptDecryptPo == null + || acceptDecryptPo.getMessageDecryptTabels() == null + || acceptDecryptPo.getMessageDecryptTabels().getHeader() == null){ + throw new IamGlobalException(null, "参数传递错误,未收到参数"); + } + + log.info("统一权限服务平台请求数据:{}", acceptDecryptPo.toString()); + ObjectMapper objectMapper = new ObjectMapper(); + BpmcAcceptDto bpmcAcceptDto = objectMapper.readValue(acceptDecryptPo.getMessageDecryptTabels().getHeader().getData(), BpmcAcceptDto.class); + + MessageHeader messageHeader = acceptDecryptPo.getMessageHeader(); + BpmcResponseDto bpmcResponseDto = BpmcResponseDto.success(); + SendPoEncryptPo sendPoEncryptPo = new SendPoEncryptPo(); + + if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getType())){ + bpmcResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + bpmcResponseDto.setMessage("接口类型(type)未传参,请检查"); + log.error(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getEntity())){ + bpmcResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + bpmcResponseDto.setMessage("数据实体(entity)未传参,请检查"); + log.error(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getAction())){ + bpmcResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + bpmcResponseDto.setMessage("操作方式(action)未传参,请检查"); + log.error(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getSignature())){ + bpmcResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + bpmcResponseDto.setMessage("签名(signature)未传参,请检查"); + log.error(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + // 验证签名 + String validateSign = SHA256Util.getSHA256StrJava(bpmcAcceptDto.getEntity() + bpmcAppkey + bpmcAcceptDto.getTimestamp()); + if (!bpmcAcceptDto.getSignature().equals(validateSign)){ + bpmcResponseDto.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + bpmcResponseDto.setMessage("签名校验不通过,请检查"); + log.error(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + try { + switch (bpmcAcceptDto.getType()){ + // 角色 + case DockingConstant.BPMC_TYPE_ROLE: + bpmcResponseDto = bpmcTypeRole(objectMapper, bpmcAcceptDto, bpmcResponseDto); + break; + + // 菜单 + case DockingConstant.BPMC_TYPE_RESOURCE: + bpmcResponseDto = bpmcTypeResource(objectMapper, bpmcAcceptDto, bpmcResponseDto); + break; + + // 用户角色关联 + case DockingConstant.BPMC_TYPE_USER_ROLE: + bpmcResponseDto = bpmcTypeUserRole(objectMapper, bpmcAcceptDto, bpmcResponseDto); + break; + + // 角色菜单关联 + case DockingConstant.BPMC_TYPE_ROLE_RESOURCE: + bpmcResponseDto = bpmcTypeRoleResource(objectMapper, bpmcAcceptDto, bpmcResponseDto); + break; + + default: + bpmcResponseDto = BpmcResponseDto.error("接口类型(type)未找到,请检查"); + break; + } + }catch (Exception e){ + e.printStackTrace(); + log.error(e.getMessage()); + bpmcResponseDto = BpmcResponseDto.error(e.getMessage()); + } + log.info(bpmcResponseDto.getMessage()); + sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(messageHeader, bpmcResponseDto); + sendPoEncryptPo.getReturns().setData(JSON.toJSONString(bpmcResponseDto)); + return sendPoEncryptPo; + } + + private BpmcResponseDto bpmcTypeRoleResource(ObjectMapper objectMapper, BpmcAcceptDto bpmcAcceptDto, BpmcResponseDto bpmcResponseDto) throws JsonProcessingException { + List roleResourceDtoList = objectMapper.readValue(bpmcAcceptDto.getEntity(), new TypeReference>() {}); + // 根据新增/删除调用不同的业务处理代码 + if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_ADD)){ + bpmcResponseDto = this.syncIamService.roleResourceCreateService(roleResourceDtoList); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_DELETE)) { + bpmcResponseDto = this.syncIamService.roleResourceDeleteService(roleResourceDtoList); + } + return bpmcResponseDto; + } + + private BpmcResponseDto bpmcTypeUserRole(ObjectMapper objectMapper, BpmcAcceptDto bpmcAcceptDto, BpmcResponseDto bpmcResponseDto) throws JsonProcessingException { + List userRoleDtoList = objectMapper.readValue(bpmcAcceptDto.getEntity(), new TypeReference>() {}); + // 根据新增/删除调用不同的业务处理代码 + if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_ADD)){ + bpmcResponseDto = this.syncIamService.userRoleCreateService(userRoleDtoList); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_DELETE)) { + bpmcResponseDto = this.syncIamService.userRoleDeleteService(userRoleDtoList); + } + return bpmcResponseDto; + } + + private BpmcResponseDto bpmcTypeResource(ObjectMapper objectMapper, BpmcAcceptDto bpmcAcceptDto, BpmcResponseDto bpmcResponseDto) throws JsonProcessingException { + ResourceDto resourceDto = objectMapper.readValue(bpmcAcceptDto.getEntity(), ResourceDto.class); + // 根据新增/编辑/删除调用不同的业务处理代码 + if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_ADD)){ + bpmcResponseDto = this.syncIamService.resourceCreateService(resourceDto); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_UPDATE)) { + bpmcResponseDto = this.syncIamService.resourceUpdateService(resourceDto); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_DELETE)) { + bpmcResponseDto = this.syncIamService.resourceDeleteService(resourceDto); + } + return bpmcResponseDto; + } + + private BpmcResponseDto bpmcTypeRole(ObjectMapper objectMapper, BpmcAcceptDto bpmcAcceptDto, BpmcResponseDto bpmcResponseDto) throws JsonProcessingException { + RoleDto roleDto = objectMapper.readValue(bpmcAcceptDto.getEntity(), RoleDto.class); + // 根据新增/编辑/删除调用不同的业务处理代码 + if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_ADD)){ + bpmcResponseDto = this.syncIamService.roleCreateService(roleDto); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_UPDATE)) { + bpmcResponseDto = this.syncIamService.roleUpdateService(roleDto); + } else if (bpmcAcceptDto.getAction().equals(DockingConstant.BPMC_ACTION_DELETE)) { + bpmcResponseDto = this.syncIamService.roleDeleteService(roleDto); + } + return bpmcResponseDto; + } + + /** + * 查询全部用户id + * @param req + * @return + * @throws JsonProcessingException + */ + @PostMapping({"/QueryAllUserIdsService"}) + public String QueryAllUserIdsService(HttpServletRequest req) { + IamUserIdListResponse userIdListResponse = new IamUserIdListResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamCommonAcceptDto commonAcceptDto = JSONObject.parseObject(reqMap, IamCommonAcceptDto.class); + + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(commonAcceptDto); + + // 处理业务逻辑,封装字段 + userIdListResponse = this.syncIamService.getAllUserIds(commonAcceptDto); + }catch (Exception e){ + userIdListResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + userIdListResponse.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(userIdListResponse)); + } + + /** + * 查询全部组织id + * @param req + * @return + * @throws JsonProcessingException + */ + @PostMapping({"/QueryAllOrgIdsService"}) + public String QueryAllOrgIdsService(HttpServletRequest req) { + IamOrgIdListResponse orgIdListResponse = new IamOrgIdListResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamCommonAcceptDto commonAcceptDto = JSONObject.parseObject(reqMap, IamCommonAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(commonAcceptDto); + // 处理业务逻辑,封装字段 + orgIdListResponse = this.syncIamService.getAllOrgIds(commonAcceptDto); + }catch (Exception e){ + orgIdListResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + orgIdListResponse.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(orgIdListResponse)); + } + + @PostMapping({"/QueryUserByIdService"}) + public String QueryUserByIdService(HttpServletRequest req) { + IamUserInfoResponse iamUserInfoResponse = new IamUserInfoResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamUserAcceptDto userAcceptDto = JSONObject.parseObject(reqMap, IamUserAcceptDto.class); + + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(userAcceptDto); + + // 处理业务逻辑,存储用户,返回用户id + iamUserInfoResponse = this.syncIamService.getUserInfoById(userAcceptDto); + }catch (Exception e){ + iamUserInfoResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamUserInfoResponse.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamUserInfoResponse)); + } + + @PostMapping({"/QueryOrgByIdService"}) + public String QueryOrgByIdService(HttpServletRequest req) { + IamOrgInfoResponse iamOrgInfoResponse = new IamOrgInfoResponse(); + try { + String reqMap = this.syncIamService.getStringObjectMap(req); + IamOrgAcceptDto orgAcceptDto = JSONObject.parseObject(reqMap, IamOrgAcceptDto.class); + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(orgAcceptDto); + // 处理业务逻辑,存储用户,返回用户id + iamOrgInfoResponse = this.syncIamService.getOrgInfoById(orgAcceptDto); + }catch (Exception e){ + iamOrgInfoResponse.setResultCode(DockingConstant.IAM_ERROR_RESULT_CODE); + iamOrgInfoResponse.setMessage("操作失败" + e.getMessage()); + } + return this.syncIamService.strEncrypt(JSON.toJSONString(iamOrgInfoResponse)); + } +} 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 a318a0c0..48238d6a 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 @@ -22,10 +22,13 @@ public class IamCommonAcceptDto { */ private String bimRemoteUser ; - /** * BIM调用三方应用接口的密码,由应用分配给BIM系统 */ private String bimRemotePwd; + /** + * BIM每次调用生成的签名,应用系统需对签名进行验证 + */ + private String signature; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java index 233fa565..2ad206a2 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java @@ -33,59 +33,4 @@ public class IamOrgAcceptDto extends IamCommonAcceptDto { */ @IamProperty(required = true, multivalued = false) private String srmsParentCode; - - /** - * 所属单位,10位HR机构编号 - */ - @IamProperty(required = true, multivalued = false) - private String srmsCompany; - - /** - * 机构状态 - */ - @IamProperty(required = true, multivalued = false) - private String srmsStatus; - - /** - * 机构类型。001内部机构 002 外部机构 003 虚拟机构 - */ - @IamProperty(required = true, multivalued = false) - private String srmsType; - - /** - * 组织类型。1.单位 2.部门。单位下可以有单位,但是部门下不能有单位 - */ - @IamProperty(required = true, multivalued = false) - private String srmsOrgCategory; - - /** - * 创建时间 - */ - @IamProperty(required = true, multivalued = false) - private String srmsCreateTime; - - /** - * 更新时间 - */ - @IamProperty(required = true, multivalued = false) - private String srmsUpdateTime; - - /** - * 部门负责人 - */ - @IamProperty(required = false, multivalued = false) - private String srmsHeadOfDepartment; - - /** - * 分管领导 - */ - @IamProperty(required = false, multivalued = false) - private String srmsLeadersInCharge; - - /** - * 副职领导 - */ - @IamProperty(required = false, multivalued = false) - private String srmsDeputyLeader; - } 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 33a9c927..2afdfb58 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 @@ -12,21 +12,11 @@ import lombok.ToString; public class IamUserAcceptDto extends IamCommonAcceptDto { - /** - * 飞书id - */ - private String id; /** * 用户的id,在删除或编辑的接口会传递 */ private String bimUid; - /** - * 单位编码 - */ - @IamProperty(required = true, multivalued = false) - private String srmsCompanyCode; - /** * 部门编码,用于做人员和组织的关联 */ @@ -40,10 +30,15 @@ public class IamUserAcceptDto extends IamCommonAcceptDto { private String srmsTypeId; /** - * 工号 + * 用户账户工号 00063002 */ @IamProperty(required = true, multivalued = false) private String srmsUsername; + /** + * 工号 63002 + */ + @IamProperty(required = true, multivalued = false) + private String employeeNo; /** * 姓名 @@ -51,60 +46,19 @@ public class IamUserAcceptDto extends IamCommonAcceptDto { @IamProperty(required = true, multivalued = false) private String srmsRealname; - /** - * 密码 - */ - @IamProperty(required = false, multivalued = false) - private String srmsPassword; - /** * 性别 */ @IamProperty(required = true, multivalued = false) private String srmsSex; - /** - * 岗位 - */ - @IamProperty(required = true, multivalued = false) - private String srmsPost; - - /** - * 职务级别 - */ - @IamProperty(required = true, multivalued = false) - private String srmsDutyLevelId; - - /** - * 直接上级 - */ - @IamProperty(required = true, multivalued = false) - private String srmsDirectLeadership; - - /** - * 岗位状态 - */ - @IamProperty(required = true, multivalued = false) - private String srmsPostStatus; - - /** - * 是否在册 - */ - @IamProperty(required = true, multivalued = false) - private String srmsStatus; - - /** - * 办公电话 - */ - @IamProperty(required = true, multivalued = false) - private String srmsOfficePhone; - /** * 移动电话 */ @IamProperty(required = true, multivalued = false) private String srmsPhone; + /** * 电子邮件 */ @@ -112,15 +66,20 @@ public class IamUserAcceptDto extends IamCommonAcceptDto { private String srmsEmail; /** - * 创建时间 + * 生日 */ @IamProperty(required = true, multivalued = false) - private String srmsCreateTime; + private String birthday; /** - * 更新时间 + * 入职时间 */ @IamProperty(required = true, multivalued = false) - private String srmsUpdateTime; + private String entryTime; + /** + * 离职时间 + */ + @IamProperty(required = true, multivalued = false) + private String resignationTime; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamOrgCreateResponse.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamOrgCreateResponse.java index be5c641b..59983e55 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamOrgCreateResponse.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamOrgCreateResponse.java @@ -11,6 +11,6 @@ public class IamOrgCreateResponse extends IamCommonResponseDto{ /** * 用户创建后生成的id */ - private String orgId; + private String uid; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java new file mode 100644 index 00000000..a5fe7726 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java @@ -0,0 +1,40 @@ +package com.jero.modules.docking.iam.entity; + +public class AttributeEntity { + private String name; + private String type; + private boolean isRequired; + private boolean isMultivalued; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return this.type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isRequired() { + return this.isRequired; + } + + public void setRequired(boolean isRequired) { + this.isRequired = isRequired; + } + + public boolean isMultivalued() { + return this.isMultivalued; + } + + public void setMultivalued(boolean isMultivalued) { + this.isMultivalued = isMultivalued; + } +} 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 80f65c6e..6e1252de 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 @@ -1,13 +1,13 @@ package com.jero.modules.docking.iam.service; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.bamboocloud.codec.BamboocloudFacade; +import com.banboocloud.Codec.BamboocloudFacade; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.jero.common.constant.CommonConstant; @@ -28,6 +28,7 @@ import com.jero.modules.docking.iam.exception.IamGlobalException; import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.encrypt.SendEncryptReturnsPo; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; +import com.jero.modules.docking.utils.BamboocloudCheryUtils; import com.jero.modules.docking.utils.DockingConstant; import com.jero.modules.system.entity.*; import com.jero.modules.system.service.*; @@ -40,7 +41,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -85,6 +88,50 @@ public class SyncIamService { private String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + public final String PARAM_NOT_GET_ERROR = "参数传递错误,未收到参数"; + + //SM4 + @Value("${iam.sm4.key}") + private String key; + + @Value("${iam.sm4.type}") + private String type; + + @Value("${iam.sm4.signType}") + private String signType; + + /** + * 签名验证,返回参数 + * @param req + * @return + */ + public String getStringObjectMap(HttpServletRequest req) { + try { + String bodyparam = BamboocloudCheryUtils.getRequestBody(req); + System.out.println("first--param-->" + bodyparam); + //报文解密 + bodyparam = BamboocloudCheryUtils.getPlaintext(bodyparam, key, type); + System.out.println("json--param-->" + bodyparam); + Map reqMap = (Map) JSON.parse(bodyparam); + //验证签名 + if (!BamboocloudCheryUtils.verify(reqMap, signType)) { + throw new IamGlobalException(reqMap.getOrDefault("bimRequestId","").toString(), PARAM_NOT_GET_ERROR); + } + return JSON.toJSONString(reqMap); + }catch (Exception e){ + throw new IamGlobalException("", PARAM_NOT_GET_ERROR); + } + } + + /** + * 签名验证,返回参数 + * @param str + * @return + */ + public String strEncrypt(String str) { + return BamboocloudFacade.encrypt(str, key, type); + } + /** * 校验IAM调用时的账号密码是否正确 * 校验通过了正常走后续,不通过直接返回 @@ -165,6 +212,33 @@ public class SyncIamService { SysUser sysUser = new SysUser(); sysUser.setUsername(userAcceptDto.getSrmsUsername()); sysUser.setRealname(userAcceptDto.getSrmsRealname()); + try { + if(StringUtils.isEmpty(userAcceptDto.getBirthday())){ + sysUser.setBirthday(null); + }else{ + sysUser.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getBirthday())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"生日格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getEntryTime())){ + sysUser.setEntryTime(null); + }else{ + sysUser.setEntryTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getEntryTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"入职时间格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getResignationTime())){ + sysUser.setResignationTime(null); + }else{ + sysUser.setResignationTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getResignationTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"离职时间格式错误,请输入(yyyy-MM-dd)"); + } sysUser.setPassword(CommonConstant.DEFAULT_PASSWORD); String salt = UUIDUtils.randomUUID(8); @@ -179,37 +253,16 @@ public class SyncIamService { sysUser.setEmail(userAcceptDto.getSrmsEmail()); sysUser.setPhone(userAcceptDto.getSrmsPhone()); - if ("1".equals(userAcceptDto.getSrmsStatus())){ - sysUser.setStatus(CommonConstant.USER_UNFREEZE); - sysUser.setDelFlag(CommonConstant.DEL_FLAG_0); - } else { - sysUser.setStatus(CommonConstant.USER_FREEZE); - sysUser.setDelFlag(CommonConstant.DEL_FLAG_1); - } - - sysUser.setTelephone(userAcceptDto.getSrmsOfficePhone()); + sysUser.setTelephone(userAcceptDto.getSrmsPhone()); sysUser.setCreateBy(DockingConstant.IAM_SYSTEM_NAME); sysUser.setUpdateBy(DockingConstant.IAM_SYSTEM_NAME); - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsCreateTime())){ - Date createTime = DateUtils.str2Date(userAcceptDto.getSrmsCreateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysUser.setCreateTime(createTime); - } - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsUpdateTime())){ - Date updateTime = DateUtils.str2Date(userAcceptDto.getSrmsUpdateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysUser.setCreateTime(updateTime); - } - sysUser.setActivitiSync(0); sysUser.setUserIdentity(0); // 设置飞书id, IAM村的id就是飞书id - sysUser.setFeishuId(userAcceptDto.getId()); + sysUser.setFeishuId(userAcceptDto.getEmployeeNo()); sysUser.setTypeId(userAcceptDto.getSrmsTypeId()); - sysUser.setPost(userAcceptDto.getSrmsPost()); - sysUser.setDutyLevelId(userAcceptDto.getSrmsDutyLevelId()); - sysUser.setDirectLeadership(userAcceptDto.getSrmsDirectLeadership()); - sysUser.setPostStatus(userAcceptDto.getSrmsPostStatus()); + sysUser.setStatus(1); // 获取组织机构(多个逗号分隔) String orgCode = userAcceptDto.getSrmsOrgCode(); @@ -229,10 +282,10 @@ public class SyncIamService { * @param userAcceptDto * @return */ - public IamCommonResponseDto userUpdateService(IamUserAcceptDto userAcceptDto){ + public IamUserCreateResponse userUpdateService(IamUserAcceptDto userAcceptDto){ log.info("用户更新收到的解密后数据:{}", userAcceptDto.toString()); - if (userAcceptDto == null || CharSequenceUtil.isEmpty(userAcceptDto.getBimUid())){ + if (CharSequenceUtil.isEmpty(userAcceptDto.getBimUid())){ throw new IamGlobalException(userAcceptDto.getBimRequestId(), "用户id(bimUid)为空,无法进行用户信息更新"); } @@ -254,54 +307,43 @@ public class SyncIamService { sysUser.setSex(Integer.valueOf(userAcceptDto.getSrmsSex())); } - // 手机号 和 邮箱有加密,需要单独处理 sysUser.setEmail(userAcceptDto.getSrmsEmail()); sysUser.setPhone(userAcceptDto.getSrmsPhone()); - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsStatus())){ - if ("1".equals(userAcceptDto.getSrmsStatus())){ - sysUser.setStatus(CommonConstant.USER_UNFREEZE); - sysUser.setDelFlag(CommonConstant.DEL_FLAG_0); - } else { - sysUser.setStatus(CommonConstant.USER_FREEZE); - sysUser.setDelFlag(CommonConstant.DEL_FLAG_1); - } - } - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsOfficePhone())){ - sysUser.setTelephone(userAcceptDto.getSrmsOfficePhone()); - } - sysUser.setUpdateBy(DockingConstant.IAM_SYSTEM_NAME); - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsUpdateTime())){ - Date updateTime = DateUtils.str2Date(userAcceptDto.getSrmsUpdateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysUser.setCreateTime(updateTime); - } - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsTypeId())){ sysUser.setTypeId(userAcceptDto.getSrmsTypeId()); } - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsPost())){ - sysUser.setPost(userAcceptDto.getSrmsPost()); + try { + if(StringUtils.isEmpty(userAcceptDto.getBirthday())){ + sysUser.setBirthday(null); + }else{ + sysUser.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getBirthday())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"生日格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getEntryTime())){ + sysUser.setEntryTime(null); + }else{ + sysUser.setEntryTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getEntryTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"入职时间格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getResignationTime())){ + sysUser.setResignationTime(null); + }else{ + sysUser.setResignationTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getResignationTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"离职时间格式错误,请输入(yyyy-MM-dd)"); } - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsDutyLevelId())){ - sysUser.setDutyLevelId(userAcceptDto.getSrmsDutyLevelId()); - } - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsDirectLeadership())){ - sysUser.setDirectLeadership(userAcceptDto.getSrmsDirectLeadership()); - } - - - if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsPostStatus())){ - sysUser.setPostStatus(userAcceptDto.getSrmsPostStatus()); - } // 设置飞书id, IAM村的id就是飞书id - sysUser.setFeishuId(userAcceptDto.getId()); + sysUser.setFeishuId(userAcceptDto.getEmployeeNo()); // 获取组织机构(多个逗号分隔) String orgCode = userAcceptDto.getSrmsOrgCode(); String selectedDeparts = null; @@ -318,12 +360,12 @@ public class SyncIamService { // 编辑存储到用户表中,角色是系统自己处理的,更新不会影响角色,所以不传 this.sysUserService.editUser(sysUser, null, selectedDeparts); - IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); - iamCommonResponseDto.setBimRequestId(userAcceptDto.getBimRequestId()); - iamCommonResponseDto.setResultCode(DockingConstant.IAM_SUCCESS_RESULT_CODE); - iamCommonResponseDto.setMessage(DockingConstant.IAM_SUCCESS_MESSAGE); - - return iamCommonResponseDto; + IamUserCreateResponse iamUserCreateResponse = new IamUserCreateResponse(); + iamUserCreateResponse.setBimRequestId(userAcceptDto.getBimRequestId()); + iamUserCreateResponse.setResultCode(DockingConstant.IAM_SUCCESS_RESULT_CODE); + iamUserCreateResponse.setMessage(DockingConstant.IAM_SUCCESS_MESSAGE); + iamUserCreateResponse.setUid(userAcceptDto.getBimUid()); + return iamUserCreateResponse; } /** @@ -343,7 +385,11 @@ public class SyncIamService { log.info("用户删除收到的解密后数据:{}", userAcceptDto.toString()); - this.sysUserService.deleteUser(userAcceptDto.getBimUid()); + LambdaUpdateWrapper updateSysUser = new LambdaUpdateWrapper<>(); + updateSysUser.eq(SysUser::getId,userAcceptDto.getBimUid()); + updateSysUser.set(SysUser::getStatus,"2"); + updateSysUser.set(SysUser::getUpdateTime,new Date()); + this.sysUserService.update(updateSysUser); IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); iamCommonResponseDto.setBimRequestId(userAcceptDto.getBimRequestId()); @@ -387,46 +433,9 @@ public class SyncIamService { sysDepart.setDepartName(orgAcceptDto.getSrmsDepartName()); sysDepart.setDepartOrder(100); // 接入数据无排序,都设置为100 - // 1为单位,2为部门,转映射到 本系统内的数据 1公司,2组织机构,映射关系一致。如下代码是为了后续修改方便 - if ("1".equals(orgAcceptDto.getSrmsOrgCategory())){ - sysDepart.setOrgCategory("1"); - } else { - sysDepart.setOrgCategory("2"); - } - - sysDepart.setOrgType(orgAcceptDto.getSrmsType()); - sysDepart.setOrgCode(orgAcceptDto.getSrmsOrgCode()); - - if ("1".equals(orgAcceptDto.getSrmsStatus())){ - sysDepart.setStatus(CommonConstant.STATUS_1); - sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - } else { - sysDepart.setStatus(CommonConstant.STATUS_0); - sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_1)); - } - - sysDepart.setCreateBy(DockingConstant.IAM_SYSTEM_NAME); - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsCreateTime())){ - Date createTime = DateUtils.str2Date(orgAcceptDto.getSrmsCreateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysDepart.setCreateTime(createTime); - } - - sysDepart.setUpdateBy(DockingConstant.IAM_SYSTEM_NAME); - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsUpdateTime())){ - Date updateTime = DateUtils.str2Date(orgAcceptDto.getSrmsUpdateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysDepart.setCreateTime(updateTime); - } - - sysDepart.setCompany(orgAcceptDto.getSrmsCompany()); - sysDepart.setHeadOfDepartment(orgAcceptDto.getSrmsHeadOfDepartment()); - sysDepart.setLeadersInCharge(orgAcceptDto.getSrmsLeadersInCharge()); - sysDepart.setDeputyLeader(orgAcceptDto.getSrmsDeputyLeader()); - // 存储到组织机构表中 this.sysDepartService.save(sysDepart); - - iamOrgCreateResponse.setOrgId(sysDepart.getId()); - + iamOrgCreateResponse.setUid(sysDepart.getId()); return iamOrgCreateResponse; } @@ -461,55 +470,6 @@ public class SyncIamService { sysDepart.setDepartName(orgAcceptDto.getSrmsDepartName()); } - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsOrgCategory())){ - // 1为单位,2为部门,转映射到 本系统内的数据 1公司,2组织机构,映射关系一致。如下代码是为了后续修改方便 - if ("1".equals(orgAcceptDto.getSrmsOrgCategory())){ - sysDepart.setOrgCategory("1"); - } else { - sysDepart.setOrgCategory("2"); - } - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsType())){ - sysDepart.setOrgType(orgAcceptDto.getSrmsType()); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsOrgCode())){ - sysDepart.setOrgCode(orgAcceptDto.getSrmsOrgCode()); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsStatus())){ - if ("1".equals(orgAcceptDto.getSrmsStatus())){ - sysDepart.setStatus(CommonConstant.STATUS_1); - sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - } else { - sysDepart.setStatus(CommonConstant.STATUS_0); - sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_1)); - } - } - - sysDepart.setUpdateBy(DockingConstant.IAM_SYSTEM_NAME); - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsUpdateTime())){ - Date updateTime = DateUtils.str2Date(orgAcceptDto.getSrmsUpdateTime(), new SimpleDateFormat(DATE_FORMAT)); - sysDepart.setCreateTime(updateTime); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsCompany())){ - sysDepart.setCompany(orgAcceptDto.getSrmsCompany()); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsHeadOfDepartment())){ - sysDepart.setHeadOfDepartment(orgAcceptDto.getSrmsHeadOfDepartment()); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsLeadersInCharge())){ - sysDepart.setLeadersInCharge(orgAcceptDto.getSrmsLeadersInCharge()); - } - - if (CharSequenceUtil.isNotEmpty(orgAcceptDto.getSrmsDeputyLeader())){ - sysDepart.setDeputyLeader(orgAcceptDto.getSrmsDeputyLeader()); - } - // 存储到组织机构表中 this.sysDepartService.updateById(sysDepart); @@ -980,20 +940,9 @@ public class SyncIamService { if (!Objects.isNull(userInfo.getSex())){ userAcceptDto.setSrmsSex(String.valueOf(userInfo.getSex())); } - userAcceptDto.setSrmsEmail(userInfo.getEmail()); - userAcceptDto.setSrmsPhone(userInfo.getPhone()); - userAcceptDto.setSrmsOfficePhone(userInfo.getTelephone()); - if (!Objects.isNull(userInfo.getCreateTime())){ - userAcceptDto.setSrmsCreateTime(new SimpleDateFormat(DATE_FORMAT).format(userInfo.getCreateTime())); - } - if (!Objects.isNull(sysUser.getUpdateTime())){ - userAcceptDto.setSrmsUpdateTime(new SimpleDateFormat(DATE_FORMAT).format(sysUser.getUpdateTime())); - } + userAcceptDto.setSrmsEmail(PasswordUtil.decrypt(userInfo.getEmail())); + userAcceptDto.setSrmsPhone(PasswordUtil.decrypt(userInfo.getPhone())); userAcceptDto.setSrmsTypeId(sysUser.getTypeId()); - userAcceptDto.setSrmsPost(sysUser.getPost()); - userAcceptDto.setSrmsDutyLevelId(sysUser.getDutyLevelId()); - userAcceptDto.setSrmsDirectLeadership(sysUser.getDirectLeadership()); - userAcceptDto.setSrmsPostStatus(sysUser.getPostStatus()); IamUserInfoResponse iamUserInfoResponse = new IamUserInfoResponse(); iamUserInfoResponse.setAccount(userAcceptDto); @@ -1020,15 +969,6 @@ public class SyncIamService { orgAcceptDto.setSrmsOrgCode(sysDepart.getOrgCode()); orgAcceptDto.setSrmsDepartName(sysDepart.getDepartName()); orgAcceptDto.setSrmsParentCode(sysDepart.getParentId()); - orgAcceptDto.setSrmsCompany(sysDepart.getCompany()); - orgAcceptDto.setSrmsStatus(sysDepart.getStatus()); - orgAcceptDto.setSrmsType(sysDepart.getOrgType()); - orgAcceptDto.setSrmsOrgCategory(sysDepart.getOrgCategory()); - orgAcceptDto.setSrmsCreateTime(DateUtil.format(sysDepart.getCreateTime(), DatePattern.NORM_DATETIME_PATTERN)); - orgAcceptDto.setSrmsUpdateTime(DateUtil.format(sysDepart.getUpdateTime(), DatePattern.NORM_DATETIME_PATTERN)); - orgAcceptDto.setSrmsHeadOfDepartment(sysDepart.getHeadOfDepartment()); - orgAcceptDto.setSrmsLeadersInCharge(sysDepart.getLeadersInCharge()); - orgAcceptDto.setSrmsDeputyLeader(sysDepart.getDeputyLeader()); IamOrgInfoResponse iamOrgInfoResponse = new IamOrgInfoResponse(); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java new file mode 100644 index 00000000..2252e0d8 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java @@ -0,0 +1,63 @@ +package com.jero.modules.docking.utils; + +import com.banboocloud.Codec.BamboocloudFacade; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.Map; +import java.util.TreeMap; + +public class BamboocloudCheryUtils { + + public static String getPlaintext(String ciphertext, String key, String type) { + return BamboocloudFacade.decrypt(ciphertext, key, type); + } + + public static Boolean verify(Map reqmap, String type) { + Map verifymap = new TreeMap<>(); + StringBuilder sb = new StringBuilder(); + for (String key : reqmap.keySet()) { + verifymap.put(key, reqmap.get(key)); + } + for (String key : verifymap.keySet()) { + if (!"signature".equals(key)) { + sb.append(key).append("=").append(verifymap.get(key)).append("&"); + } + } + sb.deleteCharAt(sb.length() - 1); + System.out.println(reqmap.get("signature") + " now " + sb.toString()); + return BamboocloudFacade.verify(reqmap.get("signature").toString(), sb.toString(), type); + } + + public static String getRequestBody(HttpServletRequest request) { + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + String str; + try { + br = request.getReader(); + while ((str = br.readLine()) != null) { + sb.append(str); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + if (br != null) { + try { + br.close(); + } catch (IOException eo) { + eo.printStackTrace(); + } + } + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return sb.toString(); + } +} diff --git a/laws-single-startup/src/main/resources/application-dev-chery.yml b/laws-single-startup/src/main/resources/application-dev-chery.yml index 8f8d898a..c6e9678a 100644 --- a/laws-single-startup/src/main/resources/application-dev-chery.yml +++ b/laws-single-startup/src/main/resources/application-dev-chery.yml @@ -397,7 +397,7 @@ hiwork: # 是否推送统一待办 isWorkflow: true # 前端调用地址 - url: https://iam-uat.sinotruk.com:7011/idp/oauth2/authorize?&state=123&client_id=SRMS&response_type=code&redirect_uri= + url: https://iamuat.mychery.com:5443/idp/oauth2/authorize?state=123456&client_id=CGRSM&redirect_uri= fontUrl: http://localhost:3344{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} fontAppUrl: http://localhost:3344/mobile{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} #hiwork单点登录 @@ -418,16 +418,16 @@ asms: # 单点登录配置(所有配置信息需要协调注册,现在都为假) oauth: - # 客户端应用注册ID--客户申请的:SRMS - clientId: SRMS + # 客户端应用注册ID--客户申请的:CGRSM + clientId: CGRSM # 客户端应用注册密钥 客户申请的:58a1001438de462193bec307826463c2 clientSecret: 58a1001438de462193bec307826463c2 # 授权码验证 grantType: authorization_code # 通过授权码获取accessToken请求地址 - accessTokenUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getToken + accessTokenUrl: https://iamuat.mychery.com:5443/idp/oauth2/getToken # 通过accessToken获取账号信息请求地址 - userInfoUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getUserInfo + userInfoUrl: https://iamuat.mychery.com:5443/idp/oauth2/getUserInfo # 防止跨站请求伪造(CSRF)标识(暂时不用) state: zhongQi @@ -435,7 +435,7 @@ oa: url: http://oa getAccessTokenUrl: ${oa.url}/getAccessToken getTicketInfoUrl: ${oa.url}/getTicketInfo - appId: SRMS + appId: CGRSM appSecret: 196b2e1f-127f-47d5-8e33-746fb8ad0387 # 起草部门部门名称 diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index c71f4a49..66a0d8ff 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -376,12 +376,16 @@ iam: bpmcAppkey: test # 创建用户默认角色 defaultRoleIds: 817f7f818bb3506e018bb3506ef70000 - + # 对接验证参数 + sm4: + key: JLB6L6MJVIT5Z7IL + type: SM4 + signType: SM3 # Hiwork集成 hiwork: ip: http://10.2.5.218:8088/ # 异构系统标识 - sysCode: SRMS + sysCode: CGRSM # 服务号 serviceCode: SRMSService # 统一待办集成 @@ -393,7 +397,7 @@ hiwork: # 是否推送统一待办 isWorkflow: false # 前端调用地址 - url: https://iam-uat.sinotruk.com:7011/idp/oauth2/authorize?&state=123&client_id=SRMS&response_type=code&redirect_uri= + url: https://iamuat.mychery.com:5443/idp/oauth2/authorize?state=123456&client_id=CGRSM&redirect_uri= fontUrl: http://localhost:3344{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} fontAppUrl: http://localhost:3344/mobile{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} #hiwork单点登录 @@ -414,16 +418,16 @@ asms: # 单点登录配置(所有配置信息需要协调注册,现在都为假) oauth: - # 客户端应用注册ID--客户申请的:SRMS - clientId: SRMS + # 客户端应用注册ID--客户申请的:CGRSM + clientId: CGRSM # 客户端应用注册密钥 客户申请的:58a1001438de462193bec307826463c2 clientSecret: 58a1001438de462193bec307826463c2 # 授权码验证 grantType: authorization_code # 通过授权码获取accessToken请求地址 - accessTokenUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getToken + accessTokenUrl: https://iamuat.mychery.com:5443/idp/oauth2/getToken # 通过accessToken获取账号信息请求地址 - userInfoUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getUserInfo + userInfoUrl: https://iamuat.mychery.com:5443/idp/oauth2/getUserInfo # 防止跨站请求伪造(CSRF)标识(暂时不用) state: zhongQi @@ -456,12 +460,12 @@ download: # 加密参数 encrypt: url: http://10.2.159.90/intekey/encrypteFile - app_code: SRMS + app_code: CGRSM secret_key: SRMS1234.. # 解密参数 decrypt: url: http://10.2.159.90/intekey/file - app_code: SRMS + app_code: CGRSM secret_key: SRMS1234.. # 研发域 scope_dev: 51