From 99223eac46b374f5711b091ef2be4867e57f8a1e Mon Sep 17 00:00:00 2001 From: fengchenchen Date: Wed, 27 Sep 2023 11:30:24 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90update=E3=80=91=20IAM=20=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E7=9B=B8=E5=85=B3=E8=B5=84=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jero/modules/iam/BamboocloudUtils.java | 78 ++ .../com/jero/modules/iam/BbcController.java | 1138 +++++++++++++++++ .../modules/iam/BbcControllerUnencrypted.java | 1013 +++++++++++++++ .../java/com/jero/modules/iam/SHA256Util.java | 41 + .../com/jero/modules/iam/bim-codec-1.0.0.jar | Bin 0 -> 48593 bytes 5 files changed, 2270 insertions(+) create mode 100644 laws-modules/src/main/java/com/jero/modules/iam/BamboocloudUtils.java create mode 100644 laws-modules/src/main/java/com/jero/modules/iam/BbcController.java create mode 100644 laws-modules/src/main/java/com/jero/modules/iam/BbcControllerUnencrypted.java create mode 100644 laws-modules/src/main/java/com/jero/modules/iam/SHA256Util.java create mode 100644 laws-modules/src/main/java/com/jero/modules/iam/bim-codec-1.0.0.jar diff --git a/laws-modules/src/main/java/com/jero/modules/iam/BamboocloudUtils.java b/laws-modules/src/main/java/com/jero/modules/iam/BamboocloudUtils.java new file mode 100644 index 00000000..7c8ea820 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/iam/BamboocloudUtils.java @@ -0,0 +1,78 @@ +//package com.jero.modules.iam; +//import com.banboocloud.Codec.BamboocloudFacade; +//import com.ruoyi.common.utils.reflect.ReflectUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import javax.servlet.http.HttpServletRequest; +//import java.io.BufferedReader; +//import java.io.IOException; +//import java.util.Iterator; +//import java.util.Map; +//import java.util.TreeMap; +//public class BamboocloudUtils { +// private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); +// public static boolean checkUsernamePassword(String username, String password) { +// logger.info("username --->" + username + " password --- >" + password + " ----ok"); +// if("bbcadmin".equals(username)&&"P@ssw0rd".equals(password)) { +// return true; +// } +// else { +// return false; +// } +// } +// +// 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/src/main/java/com/jero/modules/iam/BbcController.java b/laws-modules/src/main/java/com/jero/modules/iam/BbcController.java new file mode 100644 index 00000000..5e5bc577 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/iam/BbcController.java @@ -0,0 +1,1138 @@ +//package com.jero.modules.iam; +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONObject; +//import com.banboocloud.Codec.BamboocloudFacade; +//import com.ruoyi.common.utils.reflect.ReflectUtils; +//import com.ruoyi.framework.web.controller.BaseController; +//import com.ruoyi.project.system.dept.domain.Dept; +//import com.ruoyi.project.system.dept.service.IDeptService; +//import com.ruoyi.project.system.dict.domain.DictData; +//import com.ruoyi.project.system.dict.service.IDictDataService; +//import com.ruoyi.project.system.post.domain.Post; +//import com.ruoyi.project.system.post.service.IPostService; +//import com.ruoyi.project.system.role.domain.Role; +//import com.ruoyi.project.system.role.service.IRoleService; +//import com.ruoyi.project.system.user.domain.User; +//import com.ruoyi.project.system.user.domain.UserRole; +//import com.ruoyi.project.system.user.service.IUserService; +//import com.ruoyi.project.tool.swagger.accessory.*; +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiImplicitParam; +//import io.swagger.annotations.ApiOperation; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.PostMapping; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.bind.annotation.ResponseBody; +//import org.springframework.web.bind.annotation.RestController; +// +//import javax.servlet.ServletException; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.BufferedReader; +//import java.io.IOException; +//import java.io.PrintWriter; +//import java.util.*; +//public class BbcController { +// +// @Autowired +// private IUserService userService; +// +// @Autowired +// private IRoleService roleService; +// +// @Autowired +// private IPostService postService; +// +// @Autowired +// private IDeptService deptService; +// +// @Autowired +// private IDictDataService dictDataService; +// +// @Autowired +// private SysPasswordService passwordService; +// +// private String bimRequestId; +// +// private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); +// +// @ApiOperation("测试") +// @RequestMapping() +// public JSONObject bbcUser() { +// +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// return jsonObject; +// +// } +// +// @ApiOperation("对象属性字段查询") +// @PostMapping("/schemaService") +// public String SchemaService(HttpServletRequest req, HttpServletResponse resp) { +// +// JSONObject jsonObject = new JSONObject(); +// +// // StringBuilder sb = stringBuilder(req); +// String bodyparam= BamboocloudUtils.getRequestBody(req); +// logger.info("json--param-->" + bodyparam); +// // String bodyparam = sb.toString(); +// //解密json字符传 +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// //判断接口中的调用名及调用密码是否正确 +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //添加返回的对象及属性字段名 +// MapJson mapJson = new MapJson(); +// Map>> map = new HashMap<>(); +// jsonObject.put("account", mapJson.accountList()); +// jsonObject.put("organization", mapJson.organizationList()); +// jsonObject.put("role", mapJson.roleList()); +// jsonObject.put("post", mapJson.postList()); +// jsonObject.put("dict", mapJson.dictDataList()); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJs = JSON.toJSONString(jsonObject); +// logger.info(jsonObject.toJSONString()); +// //返回加密的json字符串 +// mapJs = BamboocloudFacade.encrypt(mapJs, "123456", "AES"); +// //jsonObject.put(map); +// // values = jsonObject.values(); +// return mapJs; +// } +// } +// jsonObject.put("bimRequestId", bimRequestId); +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "连接失败,请检查连接器配置的参数"); +// logger.info(jsonObject.toJSONString()); +// String mapJs = JSON.toJSONString(jsonObject); +// //返回加密的json字符串 +// mapJs = BamboocloudFacade.encrypt(mapJs, "123456", "AES"); +// return mapJs; +// } +// +// @ApiOperation("新增用户") +// @ApiImplicitParam(name = "user", value = "新增用户信息", dataType = "User") +// @PostMapping("/UserCreateService") +// @ResponseBody +// public String userCreateService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// StringBuilder sb = stringBuilder(req); +// //修改多值的属性格式方便转换 +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// String p = bodyparam; +// String z = "[\""; +// String y = "\"]"; +// bodyparam.indexOf(z); +// bodyparam.indexOf(y); +// while (bodyparam.contains(z)) { +// p = bodyparam.substring(bodyparam.indexOf(z), bodyparam.indexOf(y) + 2).replace(z, "\"").replace(y, "\"").replace("\",\"", ","); +// bodyparam = bodyparam.substring(0, bodyparam.indexOf(z)) + p + bodyparam.substring(bodyparam.indexOf(y) + 2, bodyparam.length()); +// } +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //获取用户创建所需的参数 +// User user = createUpdateUser(reqmap); +// //用户创建 +// userService.insertBbcUser(user); +// //获取返回给IAM连接器的唯一标识,用于后续该条数据的更新修改删除 +// String uid = user.getUserId() + ""; +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// } else { +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号创建失败"); +// } +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号创建失败,请检查连接器配置的参数"); +// String mapJson = JSON.toJSONString(schema); +// //返回加密的json字符串 +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// return mapJson; +// } +// +// /** +// *填充用户的属性值 +// * @param reqmap json +// * @return 用户 +// */ +// private User createUpdateUser(Map reqmap) { +// User user = new User(); +// if (reqmap.get("__NAME__") != null) { +// user.setLoginName((String) reqmap.get("__NAME__")); +// } +// if (reqmap.get("login_name") != null) { +// user.setLoginName((String) reqmap.get("login_name")); +// } +// if (reqmap.get("password") != null) { +// user.setPassword((String) reqmap.get("password")); +// } +// if (reqmap.get("dept_id") != null) { +// user.setDeptId(Long.valueOf(String.valueOf(reqmap.get("dept_id")))); +// } +// if (reqmap.get("user_name") != null) { +// user.setUserName((String) reqmap.get("user_name")); +// } +// if (reqmap.get("phonenumber") != null) { +// user.setPhonenumber((String) reqmap.get("phonenumber")); +// } +// if (reqmap.get("sex") != null) { +// String sex = (String) reqmap.get("sex"); +// if (sex.equals("1")) { +// sex = "0"; +// } +// if (sex.equals("2")) { +// sex = "1"; +// } +// if (sex.equals("3")) { +// sex = "2"; +// } +// user.setSex(sex); +// } +// if (reqmap.get("email") != null) { +// user.setEmail((String) reqmap.get("email")); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// user.setStatus("1"); +// else user.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// user.setStatus("0"); +// else user.setStatus("1"); +// } +// if (reqmap.get("user_role") != null) { +// String user_role = ((String) reqmap.get("user_role")).replaceAll(" ", ""); +// if (user_role.contains(",")) { +// String[] userRole = user_role.split(","); +// List roleIds = new ArrayList<>(); +// for (String up : userRole) { +// roleIds.add(Long.valueOf(String.valueOf(up))); +// } +// user.setRoleIds(roleIds.toArray(new Long[roleIds.size()])); +// } else { +// List roleIds = new ArrayList<>(); +// roleIds.add(Long.valueOf(String.valueOf(user_role))); +// user.setRoleIds(roleIds.toArray(new Long[roleIds.size()])); +// } +// } +// if (reqmap.get("user_post") != null) { +// String user_post = ((String) reqmap.get("user_post")).replaceAll(" ", ""); +// if (user_post.contains(",")) { +// String[] userPost = user_post.split(","); +// List postIds = new ArrayList<>(); +// for (String up : userPost) { +// postIds.add(Long.valueOf(String.valueOf(up))); +// } +// user.setPostIds(postIds.toArray(new Long[postIds.size()])); +// } else { +// List postIds = new ArrayList<>(); +// postIds.add(Long.valueOf(String.valueOf(user_post))); +// user.setPostIds(postIds.toArray(new Long[postIds.size()])); +// } +// } +// /* userService.selectUserByLoginName((String) reqmap.get("__NAME__")).getUserId();*/ +// return user; +// } +// +// @ApiOperation("修改用户") +// @ApiImplicitParam(name = "user", value = "修改用户信息", dataType = "User") +// @PostMapping("/UserUpdateService") +// @ResponseBody +// public String userUpdateService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// StringBuilder sb = stringBuilder(req); +// +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// //修改多值的属性格式方便转换 +// String p = bodyparam; +// String bdp = bodyparam; +// String z = "[\""; +// String y = "\"]"; +// bodyparam.indexOf(z); +// bodyparam.indexOf(y); +// while (bodyparam.contains(z)) { +// p = bodyparam.substring(bodyparam.indexOf(z), bodyparam.indexOf(y) + 2).replace(z, "\"").replace(y, "\"").replace("\",\"", ","); +// bodyparam = bodyparam.substring(0, bodyparam.indexOf(z)) + p + bodyparam.substring(bodyparam.indexOf(y) + 2, bodyparam.length()); +// } +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// User user = new User(); +// //获取用于更新的参数 +// user = createUpdateUser(reqmap); +// //获取用于更新的唯一标识 +// user.setUserId(Long.valueOf(String.valueOf(reqmap.get("bimUid")))); +// //更新用户 +// userService.updateBbcUser(user); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号更新失败,请检查连接器配置的参数"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("删除用户") +// @ApiImplicitParam(name = "user", value = "删除用户信息", dataType = "User") +// @PostMapping("/UserDeleteService") +// @ResponseBody +// public String userDeleteService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// StringBuilder sb = stringBuilder(req); +// +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //调用删除方法 +// int n = userService.deleteUserById(Long.valueOf(String.valueOf(reqmap.get("bimUid")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号删除失败"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("获取用户id") +// @ApiImplicitParam(name = "user", value = "获取用户id", dataType = "User") +// @PostMapping("/QueryAllUserIdsService") +// @ResponseBody +// public String Idlist(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// +// StringBuilder sb = stringBuilder(request); +// +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// //获取所有用户id +// List list = userService.selectUserIdList(); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("userIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过用户id获取信息") +// @ApiImplicitParam(name = "user", value = "获取用户id", dataType = "User") +// @PostMapping("/QueryUserByIdService") +// @ResponseBody +// public String IdUserlist(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// +// StringBuilder sb = stringBuilder(request); +// +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// //获取用户信息 +// User userAll = userService.selectUserByIdq(Long.valueOf((String) reqmap.get("bimUid"))); +// //获取用户所担任的角色 +// List roles = roleService.selectRoleId(Long.valueOf((String) reqmap.get("bimUid"))); +// //获取用户所在的岗位 +// List posts = postService.selectPostId(Long.valueOf((String) reqmap.get("bimUid"))); +// //用于将对象的属性改为仅需要的对象 +// DeptGai deptGai = new DeptGai(); +// UserZhuan userZhuan = deptGai.zhuanHuan(userAll, roles, posts); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("account", userZhuan); +// jsonObject.put("bimRequestId", request.getParameter("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("创建机构信息") +// @ApiImplicitParam(name = "dept", value = "创建机构信息", dataType = "Dept") +// @PostMapping("/OrgCreateService") +// @ResponseBody +// public String OrgCreate(HttpServletRequest req, HttpServletResponse resp) { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// //json字符串解密 +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //机构的属性填值 +// Dept dept = createUpdateOrg(reqmap); +// deptService.insertBbcDept(dept); +// String uid = dept.getDeptId() + ""; +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构创建失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// private Dept createUpdateOrg(Map reqmap) { +// Dept dept = new Dept(); +// if (reqmap.get("dept_id") != null) { +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("dept_id")))); +// } +// if (reqmap.get("__UID__") != null) { +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("__UID__")))); +// } +// if (reqmap.get("parent_id") != null) { +// dept.setParentId(Long.valueOf(String.valueOf(reqmap.get("parent_id")))); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// dept.setStatus("1"); +// else dept.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// dept.setStatus("0"); +// else dept.setStatus("1"); +// } +// +// if (reqmap.get("dept_name") != null) { +// dept.setDeptName((String) reqmap.get("dept_name")); +// } +// if (reqmap.get("__NAME__") != null) { +// dept.setDeptName((String) reqmap.get("__NAME__")); +// } +// return dept; +// } +// +// @ApiOperation("修改机构信息") +// @ApiImplicitParam(name = "dept", value = "修改机构信息", dataType = "Dept") +// @PostMapping("/OrgUpdateService") +// @ResponseBody +// public String orgUpdateService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Dept dept = new Dept(); +// dept = createUpdateOrg(reqmap); +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("bimOrgId")))); +// deptService.updateBbcDept(dept); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构更新失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("删除机构信息") +// @ApiImplicitParam(name = "dept", value = "删除机构信息", dataType = "Dept") +// @PostMapping("/OrgDeleteService") +// @ResponseBody +// public String orgDeleteService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// int n = deptService.deleteDeptById(Long.valueOf(String.valueOf(reqmap.get("bimOrgId")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构删除失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// +// } +// +// @ApiOperation("获取机构id") +// @ApiImplicitParam(name = "BodyParam", value = "获取机构id", dataType = "BodyParam") +// @PostMapping("/QueryAllOrgIdsService") +// @ResponseBody +// public String QueryAllOrgIds(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// +// List list = deptService.selectDeptIdList(new Dept()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("orgIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过机构id获取信息") +// @ApiImplicitParam(name = "dept", value = "获取用户id", dataType = "Dept") +// @PostMapping("/QueryOrgByIdService") +// @ResponseBody +// public String IdDeptlist(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// Dept deptAll = deptService.selectDeptById(Long.valueOf((String) reqmap.get("bimOrgId"))); +// DeptGai deptGai = new DeptGai(); +// DeptZhuan deptZhuan = deptGai.zhuanHuan(deptAll); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("organization", deptZhuan); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取机构信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收机构失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("创建角色信息") +// @ApiImplicitParam(name = "role", value = "创建角色信息", dataType = "Role") +// @PostMapping("/RoleCreateService") +// @ResponseBody +// public String RoleCreateService(HttpServletRequest req, HttpServletResponse resp) { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Role role = createUpdateRole(reqmap); +// if (reqmap.get("roleSort") != null) { +// role.setRoleSort((String) reqmap.get("roleSort")); +// } +// if (reqmap.get("roleSort") == null || "".equals((String) reqmap.get("roleSort"))) { +// role.setRoleSort("1"); +// } +// if (reqmap.get("status") == null && reqmap.get("__ENABLE__") == null) { +// role.setStatus("0"); +// } +// roleService.insertBbcRole(role); +// String uid = role.getRoleId().toString(); +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "角色创建失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// private Role createUpdateRole(Map reqmap) { +// Role role = new Role(); +// if (reqmap.get("bimRid") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("bimRid")))); +// } +// if (reqmap.get("roleId") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("roleId")))); +// } +// if (reqmap.get("__UID__") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("roleId")))); +// } +// if (reqmap.get("__NAME__") != null) { +// role.setRoleName((String) reqmap.get("__NAME__")); +// } +// if (reqmap.get("roleName") != null) { +// role.setRoleName((String) reqmap.get("roleName")); +// } +// if (reqmap.get("dataScope") != null) { +// role.setDataScope((String) reqmap.get("dataScope")); +// } +// if (reqmap.get("roleKey") != null) { +// role.setRoleKey((String) reqmap.get("roleKey")); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// role.setStatus("1"); +// else role.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// role.setStatus("0"); +// else role.setStatus("1"); +// } +// return role; +// } +// +// @ApiOperation("修改角色信息") +// @ApiImplicitParam(name = "role", value = "修改角色信息", dataType = "Role") +// @PostMapping("/RoleUpdateService") +// @ResponseBody +// public String RoleUpdateService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Role role = createUpdateRole(reqmap); +// roleService.updateBbcRole(role); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "角色更新失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// +// @ApiOperation("删除角色信息") +// @ApiImplicitParam(name = "role", value = "删除角色信息", dataType = "Role") +// @PostMapping("/RoleDeleteService") +// @ResponseBody +// public String RoleDeleteService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(req); +// String bodyparam = sb.toString(); +// +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// boolean n = roleService.deleteRoleById(Long.valueOf(String.valueOf(reqmap.get("bimRid")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构删除失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("获取角色id") +// @ApiImplicitParam(name = "BodyParam", value = "获取角色id", dataType = "BodyParam") +// @PostMapping("/QueryAllRoleIdsService") +// @ResponseBody +// public String QueryAllRoleIdsService(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// +// List list = roleService.selectRoleIdList(new Role()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("roleIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过角色id获取信息") +// @ApiImplicitParam(name = "role", value = "获取角色id", dataType = "Role") +// @PostMapping("/QueryRoleByIdService") +// @ResponseBody +// public String QueryRoleByIdService(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// Role roleAll = roleService.selectRoleById(Long.valueOf((String) reqmap.get("bimRid"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("role", roleAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取角色信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收角色失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("获取资源id") +// @ApiImplicitParam(name = "BodyParam", value = "获取资源id", dataType = "获取资源id") +// @PostMapping("/QueryAllResourceIdsService") +// @ResponseBody +// public String QueryAllResourceIdsService(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// String resourceType = (String) reqmap.get("resourceType"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// if ("post".equals(resourceType)) { +// List list = postService.selectPostIdList(new Post()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resourceIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// if ("dict".equals(resourceType)) { +// DictData dictData = new DictData(); +// dictData.setDictType("sys_user_sex"); +// List list = dictDataService.selectDictDataIdList(dictData); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resourceIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过资源id获取信息") +// @ApiImplicitParam(name = "resource", value = "获取资源id", dataType = "Resource") +// @PostMapping("/QueryResourceByIdService") +// @ResponseBody +// public String QueryResourceByIdService(HttpServletRequest request, HttpServletResponse response) { +// JSONObject jsonObject = new JSONObject(); +// StringBuilder sb = stringBuilder(request); +// String bodyparam = sb.toString(); +// bodyparam = BamboocloudUtils.getPlaintext(bodyparam, "123456", "AES"); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// if (BamboocloudUtils.verify(reqmap, "MD5").booleanValue()) { +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// String resourceType = (String) reqmap.get("resourceType"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// if ("post".equals(resourceType)) { +// Post postAll = postService.selectPostById(Long.valueOf((String) reqmap.get("resourceId"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resource", postAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// if ("dict".equals(resourceType)) { +// DictData dictDataAll = dictDataService.selectDictDataById(Long.valueOf((String) reqmap.get("resourceId"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resource", dictDataAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取资源信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收资源失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// mapJson = BamboocloudFacade.encrypt(mapJson, "123456", "AES"); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// +// public StringBuilder stringBuilder(HttpServletRequest req) { +// BufferedReader br = null; +// StringBuilder sb = new StringBuilder(); +// String str = ""; +// try { +// br = req.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; +// } +//} diff --git a/laws-modules/src/main/java/com/jero/modules/iam/BbcControllerUnencrypted.java b/laws-modules/src/main/java/com/jero/modules/iam/BbcControllerUnencrypted.java new file mode 100644 index 00000000..11d3a50a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/iam/BbcControllerUnencrypted.java @@ -0,0 +1,1013 @@ +//package com.jero.modules.iam; +// +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONObject; +//import com.banboocloud.Codec.BamboocloudFacade; +//import com.ruoyi.common.utils.reflect.ReflectUtils; +//import com.ruoyi.framework.web.controller.BaseController; +//import com.ruoyi.project.system.dept.domain.Dept; +//import com.ruoyi.project.system.dept.service.IDeptService; +//import com.ruoyi.project.system.dict.domain.DictData; +//import com.ruoyi.project.system.dict.service.IDictDataService; +//import com.ruoyi.project.system.post.domain.Post; +//import com.ruoyi.project.system.post.service.IPostService; +//import com.ruoyi.project.system.role.domain.Role; +//import com.ruoyi.project.system.role.service.IRoleService; +//import com.ruoyi.project.system.user.domain.User; +//import com.ruoyi.project.system.user.service.IUserService; +//import com.ruoyi.project.tool.swagger.accessory.*; +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiImplicitParam; +//import io.swagger.annotations.ApiImplicitParams; +//import io.swagger.annotations.ApiOperation; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +// +//import javax.servlet.ServletException; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.BufferedReader; +//import java.io.IOException; +//import java.util.ArrayList; +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +// +///** +// * swagger 用户测试方法 +// * 未加密 +// * @author ruoyi +// */ +//@Api("bbc用户信息") +//@RestController +//@RequestMapping("/bbc/userUnencrypted") +//public class BbcControllerUnencrypted extends BaseController { +// @Autowired +// private IUserService userService; +// +// @Autowired +// private IRoleService roleService; +// +// @Autowired +// private IPostService postService; +// +// @Autowired +// private IDeptService deptService; +// +// @Autowired +// private IDictDataService dictDataService; +// +// @Autowired +// private SysPasswordService passwordService; +// +// private String bimRequestId; +// +// private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); +// +// @ApiOperation("测试") +// @RequestMapping() +// public JSONObject bbcUser() { +// +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// return jsonObject; +// +// } +// +// @ApiOperation("对象属性字段查询") +// @ApiImplicitParam(name = "json", value = "调用账号密码id", dataType = "String") +// @PostMapping("/SchemaService") +// public String SchemaService(@RequestBody String json) { +// +// JSONObject jsonObject = new JSONObject(); +// String bodyparam= json; +// logger.info("json--param-->" + bodyparam); +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// //判断接口中的调用名及调用密码是否正确 +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //添加返回的对象及属性字段名 +// MapJson mapJson = new MapJson(); +// Map>> map = new HashMap<>(); +// jsonObject.put("account", mapJson.accountList()); +// jsonObject.put("organization", mapJson.organizationList()); +// jsonObject.put("role", mapJson.roleList()); +// jsonObject.put("post", mapJson.postList()); +// jsonObject.put("dict", mapJson.dictDataList()); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJs = JSON.toJSONString(jsonObject); +// logger.info(jsonObject.toJSONString()); +// return mapJs; +// } +// jsonObject.put("bimRequestId", bimRequestId); +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "连接失败,请检查连接器配置的参数"); +// logger.info(jsonObject.toJSONString()); +// String mapJs = JSON.toJSONString(jsonObject); +// return mapJs; +// } +// +// @ApiOperation("新增用户") +// @ApiImplicitParam(name = "json", value = "新增用户信息", dataType = "String") +// @PostMapping("/UserCreateService") +// @ResponseBody +// public String userCreateService(@RequestBody String json) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// //修改多值的属性格式方便转换 +// String bodyparam = json; +// +// String p = bodyparam; +// String z = "[\""; +// String y = "\"]"; +// bodyparam.indexOf(z); +// bodyparam.indexOf(y); +// while (bodyparam.contains(z)) { +// p = bodyparam.substring(bodyparam.indexOf(z), bodyparam.indexOf(y) + 2).replace(z, "\"").replace(y, "\"").replace("\",\"", ","); +// bodyparam = bodyparam.substring(0, bodyparam.indexOf(z)) + p + bodyparam.substring(bodyparam.indexOf(y) + 2, bodyparam.length()); +// } +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //获取用户创建所需的参数 +// User user = createUpdateUser(reqmap); +// //用户创建 +// userService.insertBbcUser(user); +// //获取返回给IAM连接器的唯一标识,用于后续该条数据的更新修改删除 +// String uid = user.getUserId() + ""; +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// } else { +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号创建失败"); +// } +// String mapJson = JSON.toJSONString(schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号创建失败,请检查连接器配置的参数"); +// String mapJson = JSON.toJSONString(schema); +// return mapJson; +// } +// +// /** +// *填充用户的属性值 +// * @param reqmap json +// * @return 用户 +// */ +// private User createUpdateUser(Map reqmap) { +// User user = new User(); +// if (reqmap.get("__NAME__") != null) { +// user.setLoginName((String) reqmap.get("__NAME__")); +// } +// if (reqmap.get("login_name") != null) { +// user.setLoginName((String) reqmap.get("login_name")); +// } +// if (reqmap.get("password") != null) { +// user.setPassword((String) reqmap.get("password")); +// } +// if (reqmap.get("dept_id") != null) { +// user.setDeptId(Long.valueOf(String.valueOf(reqmap.get("dept_id")))); +// } +// if (reqmap.get("user_name") != null) { +// user.setUserName((String) reqmap.get("user_name")); +// } +// if (reqmap.get("phonenumber") != null) { +// user.setPhonenumber((String) reqmap.get("phonenumber")); +// } +// if (reqmap.get("sex") != null) { +// String sex = (String) reqmap.get("sex"); +// if (sex.equals("1")) { +// sex = "0"; +// } +// if (sex.equals("2")) { +// sex = "1"; +// } +// if (sex.equals("3")) { +// sex = "2"; +// } +// user.setSex(sex); +// } +// if (reqmap.get("email") != null) { +// user.setEmail((String) reqmap.get("email")); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// user.setStatus("1"); +// else user.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// user.setStatus("0"); +// else user.setStatus("1"); +// } +// //角色为多值情况下的处理 +// if (reqmap.get("user_role") != null) { +// String user_role = ((String) reqmap.get("user_role")).replaceAll(" ", ""); +// if (user_role.contains(",")) { +// String[] userRole = user_role.split(","); +// List roleIds = new ArrayList<>(); +// for (String up : userRole) { +// roleIds.add(Long.valueOf(String.valueOf(up))); +// } +// user.setRoleIds(roleIds.toArray(new Long[roleIds.size()])); +// } else { +// List roleIds = new ArrayList<>(); +// roleIds.add(Long.valueOf(String.valueOf(user_role))); +// user.setRoleIds(roleIds.toArray(new Long[roleIds.size()])); +// } +// } +// if (reqmap.get("user_post") != null) { +// String user_post = ((String) reqmap.get("user_post")).replaceAll(" ", ""); +// if (user_post.contains(",")) { +// String[] userPost = user_post.split(","); +// List postIds = new ArrayList<>(); +// for (String up : userPost) { +// postIds.add(Long.valueOf(String.valueOf(up))); +// } +// user.setPostIds(postIds.toArray(new Long[postIds.size()])); +// } else { +// List postIds = new ArrayList<>(); +// postIds.add(Long.valueOf(String.valueOf(user_post))); +// user.setPostIds(postIds.toArray(new Long[postIds.size()])); +// } +// } +// /* userService.selectUserByLoginName((String) reqmap.get("__NAME__")).getUserId();*/ +// return user; +// } +// +// @ApiOperation("修改用户") +// @ApiImplicitParam(name = "json", value = "修改用户信息", dataType = "String") +// @PostMapping("/UserUpdateService") +// @ResponseBody +// public String userUpdateService(@RequestBody String json) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam =json; +// +// //修改多值的属性格式方便转换 +// String p = bodyparam; +// String bdp = bodyparam; +// String z = "[\""; +// String y = "\"]"; +// bodyparam.indexOf(z); +// bodyparam.indexOf(y); +// while (bodyparam.contains(z)) { +// p = bodyparam.substring(bodyparam.indexOf(z), bodyparam.indexOf(y) + 2).replace(z, "\"").replace(y, "\"").replace("\",\"", ","); +// bodyparam = bodyparam.substring(0, bodyparam.indexOf(z)) + p + bodyparam.substring(bodyparam.indexOf(y) + 2, bodyparam.length()); +// } +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// User user = new User(); +// //获取用于更新的参数 +// user = createUpdateUser(reqmap); +// //获取用于更新的唯一标识 +// user.setUserId(Long.valueOf(String.valueOf(reqmap.get("bimUid")))); +// //更新用户 +// userService.updateBbcUser(user); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号更新失败,请检查连接器配置的参数"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("删除用户") +// @ApiImplicitParam(name = "json", value = "删除用户信息", dataType = "String") +// @PostMapping("/UserDeleteService") +// @ResponseBody +// public String userDeleteService(@RequestBody String json) throws ServletException, IOException { +// +// Map schema = new HashMap(); +// +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //调用删除方法 +// int n = userService.deleteUserById(Long.valueOf(String.valueOf(reqmap.get("bimUid")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "账号删除失败"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("获取用户id") +// @ApiImplicitParam(name = "json", value = "获取用户id", dataType = "String") +// @PostMapping("/QueryAllUserIdsService") +// @ResponseBody +// public String Idlist(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// //获取所有用户id +// List list = userService.selectUserIdList(); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("userIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过用户id获取信息") +// @ApiImplicitParam(name = "json", value = "用户ID相关信息", dataType = "String") +// @PostMapping("/QueryUserByIdService") +// @ResponseBody +// public String IdUserlist(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// //获取用户信息 +// User userAll = userService.selectUserByIdq(Long.valueOf((String) reqmap.get("bimUid"))); +// //获取用户所担任的角色 +// List roles = roleService.selectRoleId(Long.valueOf((String) reqmap.get("bimUid"))); +// //获取用户所在的岗位 +// List posts = postService.selectPostId(Long.valueOf((String) reqmap.get("bimUid"))); +// //用于将对象的属性改为仅需要的对象 +// DeptGai deptGai = new DeptGai(); +// UserZhuan userZhuan = deptGai.zhuanHuan(userAll, roles, posts); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("account", userZhuan); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("创建机构信息") +// @ApiImplicitParam(name = "json", value = "创建机构信息", dataType = "String") +// @PostMapping("/OrgCreateService") +// @ResponseBody +// public String OrgCreate(@RequestBody String json) { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// //机构的属性填值 +// Dept dept = createUpdateOrg(reqmap); +// deptService.insertBbcDept(dept); +// String uid = dept.getDeptId() + ""; +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构创建失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// private Dept createUpdateOrg(Map reqmap) { +// Dept dept = new Dept(); +// if (reqmap.get("dept_id") != null) { +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("dept_id")))); +// } +// if (reqmap.get("__UID__") != null) { +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("__UID__")))); +// } +// if (reqmap.get("parent_id") != null) { +// dept.setParentId(Long.valueOf(String.valueOf(reqmap.get("parent_id")))); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// dept.setStatus("1"); +// else dept.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// dept.setStatus("0"); +// else dept.setStatus("1"); +// } +// +// if (reqmap.get("dept_name") != null) { +// dept.setDeptName((String) reqmap.get("dept_name")); +// } +// if (reqmap.get("__NAME__") != null) { +// dept.setDeptName((String) reqmap.get("__NAME__")); +// } +// return dept; +// } +// +// @ApiOperation("修改机构信息") +// @ApiImplicitParam(name = "json", value = "修改机构信息", dataType = "String") +// @PostMapping("/OrgUpdateService") +// @ResponseBody +// public String orgUpdateService(@RequestBody String json) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Dept dept = new Dept(); +// dept = createUpdateOrg(reqmap); +// dept.setDeptId(Long.valueOf(String.valueOf(reqmap.get("bimOrgId")))); +// deptService.updateBbcDept(dept); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构更新失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("删除机构信息") +// @ApiImplicitParam(name = "json", value = "删除机构信息", dataType = "String") +// @PostMapping("/OrgDeleteService") +// @ResponseBody +// public String orgDeleteService(@RequestBody String json) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// int n = deptService.deleteDeptById(Long.valueOf(String.valueOf(reqmap.get("bimOrgId")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构删除失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// +// } +// +// @ApiOperation("获取机构id") +// @ApiImplicitParam(name = "json", value = "获取机构id", dataType = "String") +// @PostMapping("/QueryAllOrgIdsService") +// @ResponseBody +// public String QueryAllOrgIds(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// +// List list = deptService.selectDeptIdList(new Dept()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("orgIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过机构id获取信息") +// @ApiImplicitParam(name = "json", value = "机构ID等相关信息", dataType = "String") +// @PostMapping("/QueryOrgByIdService") +// @ResponseBody +// public String IdDeptlist(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// //验证签名 +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// Dept deptAll = deptService.selectDeptById(Long.valueOf((String) reqmap.get("bimOrgId"))); +// DeptGai deptGai = new DeptGai(); +// DeptZhuan deptZhuan = deptGai.zhuanHuan(deptAll); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("organization", deptZhuan); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取机构信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收机构失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("创建角色信息") +// @ApiImplicitParam(name = "json", value = "创建角色信息", dataType = "String") +// @PostMapping("/RoleCreateService") +// @ResponseBody +// public String RoleCreateService(@RequestBody String json) { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Role role = createUpdateRole(reqmap); +// if (reqmap.get("roleSort") != null) { +// role.setRoleSort((String) reqmap.get("roleSort")); +// } +// if (reqmap.get("roleSort") == null || "".equals((String) reqmap.get("roleSort"))) { +// role.setRoleSort("1"); +// } +// if (reqmap.get("status") == null && reqmap.get("__ENABLE__") == null) { +// role.setStatus("0"); +// } +// roleService.insertBbcRole(role); +// String uid = role.getRoleId().toString(); +// if (uid != null) { +// schema.put("uid", uid); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "角色创建失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// private Role createUpdateRole(Map reqmap) { +// Role role = new Role(); +// if (reqmap.get("bimRid") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("bimRid")))); +// } +// if (reqmap.get("roleId") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("roleId")))); +// } +// if (reqmap.get("__UID__") != null) { +// role.setRoleId(Long.valueOf(String.valueOf(reqmap.get("roleId")))); +// } +// if (reqmap.get("__NAME__") != null) { +// role.setRoleName((String) reqmap.get("__NAME__")); +// } +// if (reqmap.get("roleName") != null) { +// role.setRoleName((String) reqmap.get("roleName")); +// } +// if (reqmap.get("dataScope") != null) { +// role.setDataScope((String) reqmap.get("dataScope")); +// } +// if (reqmap.get("roleKey") != null) { +// role.setRoleKey((String) reqmap.get("roleKey")); +// } +// if (reqmap.get("status") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("status")))) +// role.setStatus("1"); +// else role.setStatus("0"); +// } +// if (reqmap.get("__ENABLE__") != null) { +// if (Boolean.valueOf(String.valueOf(reqmap.get("__ENABLE__")))) +// role.setStatus("0"); +// else role.setStatus("1"); +// } +// return role; +// } +// +// @ApiOperation("修改角色信息") +// @ApiImplicitParam(name = "json", value = "修改角色信息", dataType = "String") +// @PostMapping("/RoleUpdateService") +// @ResponseBody +// public String RoleUpdateService(@RequestBody String json) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// Role role = createUpdateRole(reqmap); +// roleService.updateBbcRole(role); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "角色更新失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// +// @ApiOperation("删除角色信息") +// @ApiImplicitParam(name = "json", value = "删除角色信息", dataType = "String") +// @PostMapping("/RoleDeleteService") +// @ResponseBody +// public String RoleDeleteService(@RequestBody String json) throws ServletException, IOException { +// Map schema = new HashMap(); +// JSONObject jsonObject = new JSONObject(); +// +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// boolean n = roleService.deleteRoleById(Long.valueOf(String.valueOf(reqmap.get("bimRid")))); +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "0"); +// schema.put("message", "success"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// schema.put("bimRequestId", reqmap.get("bimRequestId")); +// schema.put("resultCode", "500"); +// schema.put("message", "机构删除失败,报错信息自定义"); +// String mapJson = JSON.toJSONString(schema); +// logger.info("response----->" + schema); +// return mapJson; +// } +// +// @ApiOperation("获取角色id") +// @ApiImplicitParam(name = "json", value = "获取角色id", dataType = "String") +// @PostMapping("/QueryAllRoleIdsService") +// @ResponseBody +// public String QueryAllRoleIdsService(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// +// List list = roleService.selectRoleIdList(new Role()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("roleIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过角色id获取信息") +// @ApiImplicitParam(name = "json", value = "获取角色id", dataType = "String") +// @PostMapping("/QueryRoleByIdService") +// @ResponseBody +// public String QueryRoleByIdService(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// Role roleAll = roleService.selectRoleById(Long.valueOf((String) reqmap.get("bimRid"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("role", roleAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取角色信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收角色失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("获取资源id") +// @ApiImplicitParam(name = "json", value = "获取资源id", dataType = "String") +// @PostMapping("/QueryAllResourceIdsService") +// @ResponseBody +// public String QueryAllResourceIdsService(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam = json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// String resourceType = (String) reqmap.get("resourceType"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// if ("post".equals(resourceType)) { +// List list = postService.selectPostIdList(new Post()); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resourceIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// if ("dict".equals(resourceType)) { +// DictData dictData = new DictData(); +// dictData.setDictType("sys_user_sex"); +// List list = dictDataService.selectDictDataIdList(dictData); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resourceIdList", list); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取id失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// @ApiOperation("通过资源id获取信息") +// @ApiImplicitParam(name = "json", value = "资源id等相关信息", dataType = "String") +// @PostMapping("/QueryResourceByIdService") +// @ResponseBody +// public String QueryResourceByIdService(@RequestBody String json) { +// JSONObject jsonObject = new JSONObject(); +// String bodyparam =json; +// +// logger.info("json--param-->" + bodyparam); +// Map reqmap = (Map) JSON.parse(bodyparam); +// String username = (String) reqmap.get("bimRemoteUser"); +// String password = (String) reqmap.get("bimRemotePwd"); +// //根据resourceType的值进行资源类的判断如下面dict和post两个对象类 +// String resourceType = (String) reqmap.get("resourceType"); +// if (BamboocloudUtils.checkUsernamePassword(username, password)) { +// try { +// if ("post".equals(resourceType)) { +// Post postAll = postService.selectPostById(Long.valueOf((String) reqmap.get("resourceId"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resource", postAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// if ("dict".equals(resourceType)) { +// DictData dictDataAll = dictDataService.selectDictDataById(Long.valueOf((String) reqmap.get("resourceId"))); +// jsonObject.put("resultCode", "0"); +// jsonObject.put("message", "success"); +// jsonObject.put("resource", dictDataAll); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } catch (Exception e) { +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "获取资源信息失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// } +// jsonObject.put("resultCode", "505"); +// jsonObject.put("message", "回收资源失败"); +// jsonObject.put("bimRequestId", reqmap.get("bimRequestId")); +// String mapJson = JSON.toJSONString(jsonObject); +// logger.info("response----->" + jsonObject); +// return mapJson; +// } +// +// +// public StringBuilder stringBuilder(HttpServletRequest req) { +// BufferedReader br = null; +// StringBuilder sb = new StringBuilder(); +// String str = ""; +// try { +// br = req.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; +// } +// +//} +// +// diff --git a/laws-modules/src/main/java/com/jero/modules/iam/SHA256Util.java b/laws-modules/src/main/java/com/jero/modules/iam/SHA256Util.java new file mode 100644 index 00000000..e3cdf99c --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/iam/SHA256Util.java @@ -0,0 +1,41 @@ +package com.jero.modules.iam; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class SHA256Util { + + /** + * 利用java原生的摘要实现SHA256加密密后的报文 + */ + public static String getSHA256StrJava(String str) { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes(StandardCharsets.UTF_8)); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return encodeStr; + } + + /** + * 将byte转为16进制 + */ + private static String byte2Hex(byte[] bytes) { + StringBuilder stringBuffer = new StringBuilder(); + String temp; + for (byte aByte : bytes) { + temp = Integer.toHexString(aByte & 0xFF); + if (temp.length() == 1) { + //1得到一位的进行补0操作 + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/iam/bim-codec-1.0.0.jar b/laws-modules/src/main/java/com/jero/modules/iam/bim-codec-1.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..1625554e46b1243d37d15b6078637c5f71699d01 GIT binary patch literal 48593 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