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/iam/chery/EncryptTest.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/EncryptTest.java new file mode 100644 index 00000000..e329a3a5 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/EncryptTest.java @@ -0,0 +1,24 @@ +package com.jero.modules.docking.iam.chery; + +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); + String sourceNew = sm4Cipher.decrypt(target,key); + + //输出密文 + System.out.println("target:" + target); + //输出明文 + System.out.println("sourceNew:" + sourceNew); + } +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java new file mode 100644 index 00000000..a9d24207 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java @@ -0,0 +1,40 @@ +package com.jero.modules.docking.iam.chery.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/chery/service/BamboocloudUtils.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/service/BamboocloudUtils.java new file mode 100644 index 00000000..f7127207 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/service/BamboocloudUtils.java @@ -0,0 +1,87 @@ +package com.jero.modules.docking.iam.chery.service; + +import com.banboocloud.Codec.BamboocloudFacade; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; + +public abstract class BamboocloudUtils { + private static Properties properties = new Properties(); + private static InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"); + + static { + try { + properties.load(in); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static String getProperty(String property) { + return properties.getProperty(property); + } + + public static void checkUsernamePassword(String username, String password) { + System.out.println("username --->" + username + " password --- >" + password + " ----ok"); + } + + 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(); + StringBuffer sb = new StringBuffer(); + Iterator it = reqmap.keySet().iterator(); + while (it.hasNext()) { + String key = (String) it.next(); + verifymap.put(key, reqmap.get(key)); + } + Iterator ittree = verifymap.keySet().iterator(); + while (ittree.hasNext()) { + String key = (String) ittree.next(); + 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-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..ea029e99 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 @@ -115,22 +115,13 @@ 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.setBimRequestId(UUIDUtils.randomUUID20()); iamUserAcceptDto.setBimRemoteUser("srmsIam"); @@ -159,8 +150,6 @@ public class TestClient { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); iamUserAcceptDto.setBimUid("1709786346053017601"); // 数据库中取到的ID - iamUserAcceptDto.setSrmsPost("科长"); - iamUserAcceptDto.setSrmsUpdateTime("2023-10-15 10:35:20"); // 测试不发送UpdateTime的情况 iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamUserAcceptDto.setBimRemoteUser("srmsIam"); @@ -191,11 +180,6 @@ public class TestClient { iamOrgAcceptDto.setSrmsOrgCode("IA00102"); 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"); 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/service/SyncIamService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java index 80f65c6e..da63bc6a 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.iam.chery.service.BamboocloudUtils; import com.jero.modules.docking.utils.DockingConstant; import com.jero.modules.system.entity.*; import com.jero.modules.system.service.*; @@ -40,8 +41,8 @@ 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.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -85,6 +86,46 @@ 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) { + String bodyparam = BamboocloudUtils.getRequestBody(req); + System.out.println("first--param-->" + bodyparam); + //报文解密 + bodyparam = BamboocloudUtils.getPlaintext(bodyparam, key, type); + System.out.println("json--param-->" + bodyparam); + Map reqMap = (Map) JSON.parse(bodyparam); + //验证签名 + if (!BamboocloudUtils.verify(reqMap, signType)) { + throw new IamGlobalException(reqMap.getOrDefault("bimRequestId","").toString(), PARAM_NOT_GET_ERROR); + } + return JSON.toJSONString(reqMap); + } + + /** + * 签名验证,返回参数 + * @param str + * @return + */ + public String strEncrypt(String str) { + return BamboocloudFacade.encrypt(str, key, type); + } + /** * 校验IAM调用时的账号密码是否正确 * 校验通过了正常走后续,不通过直接返回 @@ -179,37 +220,15 @@ 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()); // 获取组织机构(多个逗号分隔) String orgCode = userAcceptDto.getSrmsOrgCode(); @@ -229,10 +248,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 +273,17 @@ 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()); - } - 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 +300,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 +325,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 +373,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()); - return iamOrgCreateResponse; } @@ -461,55 +410,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 +880,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 +909,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-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index c71f4a49..3ad2f140 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -376,7 +376,11 @@ iam: bpmcAppkey: test # 创建用户默认角色 defaultRoleIds: 817f7f818bb3506e018bb3506ef70000 - + # 对接验证参数 + sm4: + key: JLB6L6MJVIT5Z7IL + type: SM4 + signType: SM3 # Hiwork集成 hiwork: ip: http://10.2.5.218:8088/