From 441ea98cd6766017ca4cc785d80a452d44a8de90 Mon Sep 17 00:00:00 2001 From: bayuzhen Date: Sun, 25 Aug 2024 23:52:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=8D=95=E7=82=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booter/controller/TokenController.java | 18 +- .../sms/booter/controller/TrxController.java | 52 ++ .../sms/booter/controller/UserController.java | 6 +- .../scheduler/YunKongGetAppSchedule.java | 47 ++ .../sms/interfaces/ManagerService.java | 2 +- .../bocloud/sms/interfaces/TrxService.java | 12 + .../sms/service/ManagerServiceImpl.java | 33 +- .../bocloud/sms/service/TrxServiceImpl.java | 207 +++++ .../bocloud/sms/service/UserServiceImpl.java | 4 +- .../bocloud/sms/service/utils/QxUtils.java | 39 + .../bocloud/sms/service/utils/YkUtils.java | 46 ++ .../com/bocloud/sms/entity/AppEntity.java | 716 ++++++++++++++++++ .../java/com/bocloud/sms/enums/YkInf.java | 22 + .../java/com/bocloud/sms/model/AppModule.java | 10 + .../java/com/bocloud/sms/model/AppPerm.java | 11 + .../bocloud/sms/model/QxCategoryModel.java | 10 + .../java/com/bocloud/sms/model/QxReqVo.java | 25 + .../com/bocloud/sms/model/TrxAuthModel.java | 11 + .../java/com/bocloud/sms/model/YkReqVo.java | 22 + .../com/bocloud/sms/model/YkUserModel.java | 14 + .../sms/repository/UserRepository.java | 8 + 21 files changed, 1304 insertions(+), 11 deletions(-) create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TrxController.java create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/YunKongGetAppSchedule.java create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/TrxService.java create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/TrxServiceImpl.java create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/QxUtils.java create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/YkUtils.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AppEntity.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/enums/YkInf.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppModule.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppPerm.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxCategoryModel.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxReqVo.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TrxAuthModel.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkReqVo.java create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkUserModel.java diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TokenController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TokenController.java index 2c0ce15..508a89d 100644 --- a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TokenController.java +++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TokenController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.auth0.jwt.interfaces.Claim; import com.bocloud.sms.interfaces.TenantService; import com.bocloud.sms.interfaces.UserService; +import com.bocloud.sms.service.TrxServiceImpl; import com.megatron.common.model.GeneralResult; import com.megatron.common.model.RequestContext; import com.megatron.common.utils.Common; @@ -12,12 +13,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -32,6 +31,8 @@ public class TokenController { private final StringRedisTemplate redisTemplate; private final TenantService tenantService; private final UserService userService; + @Autowired + private TrxServiceImpl trxServiceImpl; public TokenController(StringRedisTemplate redisTemplate, TenantService tenantService, UserService userService) { this.redisTemplate = redisTemplate; @@ -47,7 +48,14 @@ public class TokenController { */ @GetMapping("/v1/token") @Operation(summary = "单点登录验证token") - public GeneralResult checkToken(HttpServletRequest request) { + public GeneralResult checkToken(HttpServletRequest request, + @RequestParam(value = "trxToken", required = false) String trxToken) { + if (null != trxToken) { + GeneralResult tokenOnline = trxServiceImpl.getTokenOnline(trxToken); + if (!tokenOnline.isSuccess()) { + return tokenOnline; + } + } String token = request.getHeader(Common.TOKEN); if (!StringUtils.hasText(token)) { token = request.getParameter(Common.TOKEN); diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TrxController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TrxController.java new file mode 100644 index 0000000..179ecfe --- /dev/null +++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TrxController.java @@ -0,0 +1,52 @@ +package com.bocloud.sms.booter.controller; + +import com.bocloud.sms.interfaces.TrxService; +import com.bocloud.sms.model.TrxAuthModel; +import com.megatron.common.model.GeneralResult; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/v1/trx") +@Tag(name = "系统升级") +@Slf4j +public class TrxController { + + @Autowired + private TrxService trxService; + + /** + * 单点登录验证token + * + * @param ngxCookie + * @return randomstr + */ + @GetMapping("/randomstr") + @Operation(summary = "获取Randomstr") + public GeneralResult getRandomstr(@RequestParam(value = "ngxCookie") String ngxCookie) { + GeneralResult generalResult = trxService.getRandomstr(ngxCookie); + return generalResult; + } + + @PostMapping("/login") + @Operation(summary = "用户登录") + public GeneralResult getAuthToken(@RequestBody TrxAuthModel trxAuthModel, + HttpServletRequest request) { + trxAuthModel.setClientIp(request.getRemoteAddr()); + GeneralResult generalResult = trxService.getAuthToken(trxAuthModel); + return generalResult; + } + + @PostMapping("/logout") + @Operation(summary = "天融信用户登出") + public GeneralResult logout(@RequestBody TrxAuthModel trxAuthModel, + HttpServletRequest request) { + trxAuthModel.setClientIp(request.getRemoteAddr()); + GeneralResult generalResult = trxService.logout(trxAuthModel); + return generalResult; + } +} diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserController.java index 8311821..a978215 100644 --- a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserController.java +++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserController.java @@ -395,12 +395,14 @@ public class UserController { */ @Operation(summary = "获取登录用户权限") @GetMapping("/permissions") - public GeneralResult loginPermission(@Value(Common.REQ_CONTEXT) RequestContext requestContext) { + public GeneralResult loginPermission(@Value(Common.REQ_CONTEXT) RequestContext requestContext, + @RequestParam(value = "trxToken", required = false) String trxToken) { switch (requestContext.getCatalog()) { case Tenant: return tenantService.listPermissions(requestContext); case Manager: - return managerService.listPermissions(requestContext); + // 处理天融信登录用户,传递token参数 trxToken可以为null + return managerService.listPermissions(requestContext, trxToken); case User: return userPermissionService.listPermissions(requestContext); default: diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/YunKongGetAppSchedule.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/YunKongGetAppSchedule.java new file mode 100644 index 0000000..d204e0a --- /dev/null +++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/YunKongGetAppSchedule.java @@ -0,0 +1,47 @@ +package com.bocloud.sms.booter.scheduler; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bocloud.sms.entity.AppEntity; +import com.bocloud.sms.enums.YkInf; +import com.bocloud.sms.service.utils.YkUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import java.util.*; + +/** + * 从运控获取应用列表 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class YunKongGetAppSchedule { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private YkUtils ykUtils; + private final StringRedisTemplate redisTemplate; + + + @Scheduled(cron = "${yk.getAppListCron:0 0/30 * * * ?}") + public void syncAppList() { + logger.info("同步应用列表"); + try{ + JSONObject params = new JSONObject(); + params.put("type", "user"); + params.put("page", "0"); + params.put("limit", "1000"); + + JSONObject obj = ykUtils.call(YkInf.getAppList,params,JSONObject.class); + List appList = JSONArray.parseArray(obj.getString("list"),AppEntity.class); + redisTemplate.opsForValue().set("SYS_APP_LIST", JSONObject.toJSONString(appList)); + }catch (Exception e){ + logger.error("同步应用列表异常",e); + } + } +} diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ManagerService.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ManagerService.java index b93941f..a5ae025 100644 --- a/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ManagerService.java +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ManagerService.java @@ -18,6 +18,6 @@ public interface ManagerService { * @param requestContext * @return */ - GeneralResult> listPermissions(RequestContext requestContext); + GeneralResult> listPermissions(RequestContext requestContext, String trxToken); } diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/TrxService.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/TrxService.java new file mode 100644 index 0000000..c3e2493 --- /dev/null +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/TrxService.java @@ -0,0 +1,12 @@ +package com.bocloud.sms.interfaces; + +import com.bocloud.sms.model.TrxAuthModel; +import com.megatron.common.model.GeneralResult; + +public interface TrxService { + GeneralResult getRandomstr(String ngxCookie); + + GeneralResult getAuthToken(TrxAuthModel trxAuthModel); + + GeneralResult logout(TrxAuthModel trxAuthModel); +} diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/ManagerServiceImpl.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/ManagerServiceImpl.java index d0cbedc..577bec6 100644 --- a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/ManagerServiceImpl.java +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/ManagerServiceImpl.java @@ -8,6 +8,7 @@ import com.bocloud.sms.entity.Plugin; import com.bocloud.sms.entity.User; import com.bocloud.sms.interfaces.ManagerService; import com.bocloud.sms.interfaces.PluginService; +import com.bocloud.sms.model.AppModule; import com.bocloud.sms.model.PermissionBean; import com.bocloud.sms.model.single.RoleResponseModel; import com.bocloud.sms.repository.PermissionRepository; @@ -26,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.function.Function; @@ -59,6 +61,8 @@ public class ManagerServiceImpl implements ManagerService { private StringRedisTemplate redisTemplate; @Autowired private UserRepository userRepository; + @Autowired + private TrxServiceImpl trxServiceImpl; private String getRedisKey(long userId) { return "single_user_roles_"+ userId; @@ -71,9 +75,34 @@ public class ManagerServiceImpl implements ManagerService { * @return */ @Override - public GeneralResult> listPermissions(RequestContext context) { - // 查询所有权限(菜单,按钮,api) + public GeneralResult> listPermissions(RequestContext context, String trxToken) { + // 处里天融信用户登录 + User user = userRepository.query(context.getTarget()); + List qxAppModuleIds = new ArrayList<>(); + if (null != user.getUserId()) { + // 天融信用户获取权限系统菜单权限 + log.info("开始获取天融信登录用户所拥有权限系统列表"); + List appModules = trxServiceImpl.queryQxCategoryList(trxToken, user.getUserId()); + if (CollectionUtils.isEmpty(appModules)) { + log.error("获取天融信登录用户所拥有权限系统列表失败"); + return new GeneralResult<>(false, "获取权限系统菜单信息失败"); + } + for (AppModule appModule : appModules) { + long id = Long.parseLong(appModule.getId()); + qxAppModuleIds.add(id); + } + } + + // 查询所拥有权限(菜单,按钮,api) List permissions = permissionRepository.getPermissions(context.getTarget()); + + // 如果为天融信登录用户,那么在云管过滤出天融信登录用户所拥有权限系统权限 + if (!CollectionUtils.isEmpty(qxAppModuleIds)) { + permissions = permissions.stream() + .filter(permission -> qxAppModuleIds.contains(permission.getId())) + .collect(Collectors.toList()); + } + // 查询所有权限 Map allPermissions = permissionRepository.list(false).stream() .collect(Collectors.toMap(Permission::getId, Function.identity())); diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/TrxServiceImpl.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/TrxServiceImpl.java new file mode 100644 index 0000000..bb25391 --- /dev/null +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/TrxServiceImpl.java @@ -0,0 +1,207 @@ +package com.bocloud.sms.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bocloud.sms.entity.AppEntity; +import com.bocloud.sms.entity.Role; +import com.bocloud.sms.entity.User; +import com.bocloud.sms.enums.YkInf; +import com.bocloud.sms.interfaces.TrxService; +import com.bocloud.sms.model.*; +import com.bocloud.sms.repository.RoleRepository; +import com.bocloud.sms.repository.UserRepository; +import com.bocloud.sms.service.utils.QxUtils; +import com.bocloud.sms.service.utils.YkUtils; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.megatron.common.encrypt.AESEncryptor; +import com.megatron.common.encrypt.Encryptor; +import com.megatron.common.model.GeneralResult; +import com.megatron.common.model.RequestContext; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class TrxServiceImpl implements TrxService { + @Value("${trx.address:https://109.64.24.225}") + private String trxUrl; + @Autowired + private UserServiceImpl userServiceImpl; + @Autowired + private UserRepository userRepository; + @Autowired + private YkUtils ykUtils; + @Autowired + private QxUtils qxUtils; + @Autowired + private RoleRepository roleRepository; + private final StringRedisTemplate redisTemplate; + + // 获取天融信随机字符串 + @Override + public GeneralResult getRandomstr(String ngxCookie) { + String url = trxUrl + "/getRandomStr"; + Map paramsMap = new HashMap<>(); + paramsMap.put("isToken", false); + paramsMap.put("ngx_cookie", ngxCookie); + JSONObject result = JSONObject.parseObject(HttpUtil.get(url, paramsMap)); + if ("-1".equals(result.getString("result"))) { + return new GeneralResult(false, "获取随机数失败" + result.getString("errmsg")); + } + return new GeneralResult(true, result.getString("result"), "获取随机数成功"); + } + + // 获取天融信用户信息 + @Override + public GeneralResult getAuthToken(TrxAuthModel trxAuthModel) { + String url = trxUrl + "/userAuthen"; + Map paramsMap = new HashMap<>(); + paramsMap.put("cookie", trxAuthModel.getClientHello()); + paramsMap.put("certMd5", trxAuthModel.getServerHello()); + paramsMap.put("client_ip", trxAuthModel.getClientIp()); + JSONObject result = JSONObject.parseObject(HttpUtil.post(url, paramsMap)); + if (!"0".equals(result.getString("result"))) { + return new GeneralResult(false, "用户登录失败" + result.getString("errmsg")); + } + String trxToken = result.getString("token"); + String userId = result.getString("userId"); + // 处理ukey登录用户 + saveUserByTrx(userId); + // 登录 + User user = userRepository.getByUserId(userId); + Encryptor encryptor = new AESEncryptor(); + String password = encryptor.encrypt(userId + "CMP", null); + GeneralResult> login = userServiceImpl.login(user.getAccount(), password, null, null, true); + login.getData().put("trxToken", trxToken); + return new GeneralResult(true, login, "用户登录成功"); + } + + private void saveUserByTrx(String userId) { + User user = userRepository.getByUserId(userId); + // 根据userId获取运控系统用户信息 + JSONObject params = new JSONObject(); + params.put("userId", userId); + //请求运控系统获取用户信息 + YkUserModel ykUser = JSONArray.parseArray(ykUtils.call(YkInf.queryAllUser, params, String.class), YkUserModel.class).get(0); + if (ObjectUtils.isEmpty(user)) { + log.info("开始新增天融信登录用户,userId: " + userId); + // 新增 以userId作为account 并添加注释 + UserBean userBean = new UserBean(); + userBean.setPassword(userId + "CMP"); + userBean.setSex(true); + userBean.setIsManager(true); + userBean.setUserId(userId); + userBean.setRemark("天融信登录添加用户"); + // 设置运控用户信息 + userBean.setAccount(ykUser.getLoginName()); + userBean.setName(ykUser.getUserName()); + userBean.setMobile(ykUser.getMobile()); + userBean.setEmail(ykUser.getEmail()); + userBean.setUserId(userId); + RequestContext context = new RequestContext(); + context.setTarget(1L); + context.setCatalog(RequestContext.Catalog.Manager); + userServiceImpl.create(userBean, context); + /** + * 云管授权当前用户全部角色 + * 1,获取云管角色列表 + * 2,授权 + * */ + User userByUserId = userRepository.getByUserId(userId); + List roleIds = roleRepository.list().stream().map(Role::getId).collect(Collectors.toList()); + userServiceImpl.accredit(userByUserId.getId(), roleIds, context); + log.info("完成新增天融信登录用户,userId: " + userId); + } else { + // 修改 + log.info("开始修改天融信登录用户,userId: " + userId); + UserBean userBean = new UserBean(); + userBean.setId(user.getId()); + userBean.setSex(true); + userBean.setIsManager(true); + userBean.setUserId(userId); + userBean.setRemark("天融信登录添加用户"); + // 设置运控用户信息 + userBean.setAccount(ykUser.getLoginName()); + userBean.setName(ykUser.getUserName()); + userBean.setMobile(ykUser.getMobile()); + userBean.setEmail(ykUser.getEmail()); + RequestContext context = new RequestContext(); + context.setTarget(1L); + context.setCatalog(RequestContext.Catalog.Manager); + userServiceImpl.modify(user.getId(), userBean, context); + log.info("完成修改天融信登录用户,userId: " + userId); + } + } + + //确认天融信token是否有效 + public GeneralResult getTokenOnline(String trxToken) { + String url = trxUrl + "/tokenOnline"; + JSONObject result = JSONObject.parseObject(HttpUtil.post(url, trxToken)); + if (!"0".equals(result.getString("result"))) { + return new GeneralResult(false, "当前token无效" + result.getString("errmsg")); + } + return new GeneralResult(true, "当前token有效"); + } + + + // 登出天融信 (下线) + @Override + public GeneralResult logout(TrxAuthModel trxAuthModel) { + String url = trxUrl + "/offlineToken"; + Map paramsMap = new HashMap<>(); + paramsMap.put("token", trxAuthModel.getTrxToken()); + paramsMap.put("client_ip", trxAuthModel.getClientIp()); + JSONObject result = JSONObject.parseObject(HttpUtil.post(url, paramsMap)); + if (!"0".equals(result.getString("result"))) { + return new GeneralResult(false, "下线失败" + result.getString("msg")); + } + return new GeneralResult(true, "下线成功"); + } + + // 获取运控系统应用列表 + public List queryAppList(String userToken, String userId) { + // 获取运控系统应用列表 + String sysAppList = redisTemplate.opsForValue().get("SYS_APP_LIST"); + Gson gson = new Gson(); + Type listType = new TypeToken>() {}.getType(); + List appList = gson.fromJson(sysAppList, listType); + + List permList = JSONArray.parseArray(qxUtils.queryApp(userToken, userId), AppPerm.class); + + if (CollectionUtil.isEmpty(permList)) return appList; + + List appIds = new ArrayList<>(permList.size()); + + permList.stream().forEach(appPerm -> appIds.add(appPerm.getId())); + + appList.stream().forEach(app -> { + if (appIds.contains(app.getAppId())) { + app.setEnable(false); + } + }); + + return appList; + } + + // 获取天融信用户在权限系统的门户应用的菜单 + public List queryQxCategoryList(String userToken ,String userId) { + List appModules = JSONArray.parseArray(qxUtils.queryAppModules(userToken, userId), AppModule.class); + return appModules; + } + +} diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserServiceImpl.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserServiceImpl.java index 03bf851..fd3bfe3 100644 --- a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserServiceImpl.java +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserServiceImpl.java @@ -437,7 +437,9 @@ public class UserServiceImpl implements UserService { Assert.isNull(existUser, "该账号已存在"); User existEmailUser = userRepository.getByEmail(user.getEmail()); Assert.isNull(existEmailUser, "该邮箱已被注册"); - String password = encryptor.encrypt(new AESEncryptor().decrypt(user.getPassword().trim(), null), salt); + // trx用户登录添加时密码处理 + String password = encryptor.encrypt(userBean.getUserId() == null ? new AESEncryptor().decrypt(user.getPassword().trim(), null) : userBean.getPassword(), salt); +// String password = encryptor.encrypt(new AESEncryptor().decrypt(user.getPassword().trim(), null), salt); user.setPassword(password); // 关键信息去空 user.setAccount(user.getAccount().trim()); diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/QxUtils.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/QxUtils.java new file mode 100644 index 0000000..c194fa0 --- /dev/null +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/QxUtils.java @@ -0,0 +1,39 @@ +package com.bocloud.sms.service.utils; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.bocloud.sms.model.QxReqVo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class QxUtils { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Value("${qx.queryAppUrl}") + private String queryAppUrl; + @Value("${qx.queryAppModulesUrl}") + private String queryAppModulesUrl; + + public String queryApp(String userToken, String userId){ + QxReqVo qxReqVo = new QxReqVo(userToken, userId,"portal","portal","",""); + return call(queryAppUrl,qxReqVo); + } + + public String queryAppModules(String userToken, String userId){ + QxReqVo qxReqVo = new QxReqVo(userToken, userId,"portal","portal","",""); + return call(queryAppUrl,qxReqVo); + } + + public String call(String url, QxReqVo qxReqVo){ + String str = JSONObject.toJSONString(qxReqVo); + logger.info("call method[{}] req params[{}]",url,str); + JSONObject result = JSONObject.parseObject(HttpUtil.post(url,str)); + if (!"200".equals(result.getString("status"))) { + throw new IllegalArgumentException("调用权限系统接口异常" + result.getString("msg")); + } + + return result.getString("data"); + } +} diff --git a/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/YkUtils.java b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/YkUtils.java new file mode 100644 index 0000000..77c073e --- /dev/null +++ b/bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/YkUtils.java @@ -0,0 +1,46 @@ +package com.bocloud.sms.service.utils; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.bocloud.sms.enums.YkInf; +import com.bocloud.sms.model.YkReqVo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class YkUtils { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + //参考application.yml配置文件 + @Value("${yk.url}") + private String url; + + @Value("${yk.reqUserId}") + private String reqUserId; + + @Value("${yk.systemId}") + private String systemId; + + + public T call(YkInf inf, JSONObject params, Class expectCls){ + YkReqVo reqVo = new YkReqVo(reqUserId,systemId,inf.getUrl(),params); + String str = JSONObject.toJSONString(reqVo); + logger.info("call yk url [{}]" , url); + logger.info("call yk method[{}] req params[{}]",reqVo.getMethod(),str); + String resultStr = HttpUtil.post(url, str); + //logger.info("call method[{}] resp params[{}]",reqVo.getMethod(),resultStr); + JSONObject result = JSONObject.parseObject(resultStr); + logger.info("call yk result [{}]" , result.toString()); + + if (result.getInteger("returnCode") != 1) { + throw new IllegalArgumentException("调用运控接口异常" + result.getString("msg")); + } + if(JSONObject.class.equals(expectCls)){ + return (T)result.getJSONObject("data"); + }else{ + return (T)result.getString("data"); + } + + } +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AppEntity.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AppEntity.java new file mode 100644 index 0000000..7713922 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AppEntity.java @@ -0,0 +1,716 @@ +package com.bocloud.sms.entity; + +import java.io.Serializable; + + + +public class AppEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 应用ID + */ + private String appId; + + /** + * 应用名称 + */ + private String appName; + + /** + * 应用信息 + */ + private String appInfo; + + /** + * 部署位置 + */ + private String sysPlace; + + /** + * 软件类型 + */ + private String appType; + + /** + * 应用级别 + */ + private String appLevel; + + /** + * 型号系统 + */ + private String modelSystem; + + /** + * 资源类型 + */ + private String resourceType; + + /** + * 应用机构 + */ + private String appDepartment; + + /*** + * 行业中心code + */ + private String bussinessCenter; + + /** + * 行业中心中文名 + */ + + private String bussinessCenterName; + + /** + * 是否编辑标识 + */ + + private int editState; + + /*** + * 应用在运维系统账号 + */ + private String ywAccount; + + /*** + * 应用在运维系统用户id + */ + private String ywUserId; + + /*** + * 应用在运维系统apikey + */ + private String ywApikey; + + /*** + * 应用在运维系统appkey + */ + private String ywAppkey; + + /** + * 软件研发单位 + */ + private String softwareOperations; + + /** + * 应用上线时间 + */ + private String softwarePublishTime; + + /** + * 访问地址 + */ + private String appAddress; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 是否为集群 + */ + private String cluster; + + /** + * 应用编码 + */ + private String appCode; + + /** + * 应用版本 + */ + private String softwareVersion; + + /** + * 应用描述 + */ + private String softwareDesc; + + /** + * 应用密级 + */ + private String appSecrecyLevel; + + /** + * 应用 + */ + private String appIcon; + + /** + * 区域 + */ + private String area; + + /** + * 是否可用 + */ + private int useFlag; + + /** + * 专业 + */ + private String profession; + + /** + * 创建人ID + */ + private Long createUid; + + /** + * 创建时间 + */ + private String createTime; + + /** + * 更新人Id + */ + private Long updateUid; + + /** + * 修改时间 + */ + private String updateTime; + + /** + * 发布区域 + */ + private String publishArea; + + /** + * 参与人 + */ + private String participantIds; + + /** + * 所属任务 + */ + private String belongTask; + + /*** + * 应用平台 + */ + private String appPlatform; + + /*** + * 应用方向 + */ + private String appDirection; + + /*** + * 应用专题 + */ + private String appTheme; + + /*** + * 对象类型 + */ + + private String objectType; + + /** + * 数据id + */ + private String dataId; + + /** + * 应用管理员 + */ + //private String appManager; + + /** + * 应用管理员 + */ + private String approveLeader; + + /** + * 应用管理员的联系电话 + */ + private String linkNum; + + /** + * 应用管理员 + */ + private String approveManager; + + /*** + * 应用上线表单id + */ + private String recordId; + + /** + * 应用状态 + */ + private int appState; + + /** + * 资源需求 + */ + private String resourceSetting; + + /** + * 软件承制单位 + */ + private String assumeDept; + + /** + * 软件承制单位联系人 + */ + private String assumeLinkman; + + /** + * 软件承制单位联系人 + */ + private String linkmanNum; + + + private String authorize; + + private boolean enable = false; + + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getAppInfo() { + return appInfo; + } + + public void setAppInfo(String appInfo) { + this.appInfo = appInfo; + } + + public String getSysPlace() { + return sysPlace; + } + + public void setSysPlace(String sysPlace) { + this.sysPlace = sysPlace; + } + + public String getAppType() { + return appType; + } + + public void setAppType(String appType) { + this.appType = appType; + } + + public String getAppLevel() { + return appLevel; + } + + public void setAppLevel(String appLevel) { + this.appLevel = appLevel; + } + + public String getModelSystem() { + return modelSystem; + } + + public void setModelSystem(String modelSystem) { + this.modelSystem = modelSystem; + } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + public String getAppDepartment() { + return appDepartment; + } + + public void setAppDepartment(String appDepartment) { + this.appDepartment = appDepartment; + } + + public String getBussinessCenter() { + return bussinessCenter; + } + + public void setBussinessCenter(String bussinessCenter) { + this.bussinessCenter = bussinessCenter; + } + + public String getBussinessCenterName() { + return bussinessCenterName; + } + + public void setBussinessCenterName(String bussinessCenterName) { + this.bussinessCenterName = bussinessCenterName; + } + + public int getEditState() { + return editState; + } + + public void setEditState(int editState) { + this.editState = editState; + } + + public String getYwAccount() { + return ywAccount; + } + + public void setYwAccount(String ywAccount) { + this.ywAccount = ywAccount; + } + + public String getYwUserId() { + return ywUserId; + } + + public void setYwUserId(String ywUserId) { + this.ywUserId = ywUserId; + } + + public String getYwApikey() { + return ywApikey; + } + + public void setYwApikey(String ywApikey) { + this.ywApikey = ywApikey; + } + + public String getYwAppkey() { + return ywAppkey; + } + + public void setYwAppkey(String ywAppkey) { + this.ywAppkey = ywAppkey; + } + + public String getSoftwareOperations() { + return softwareOperations; + } + + public void setSoftwareOperations(String softwareOperations) { + this.softwareOperations = softwareOperations; + } + + public String getSoftwarePublishTime() { + return softwarePublishTime; + } + + public void setSoftwarePublishTime(String softwarePublishTime) { + this.softwarePublishTime = softwarePublishTime; + } + + public String getAppAddress() { + return appAddress; + } + + public void setAppAddress(String appAddress) { + this.appAddress = appAddress; + } + + public String getNodeName() { + return nodeName; + } + + public void setNodeName(String nodeName) { + this.nodeName = nodeName; + } + + public String getCluster() { + return cluster; + } + + public void setCluster(String cluster) { + this.cluster = cluster; + } + + public String getAppCode() { + return appCode; + } + + public void setAppCode(String appCode) { + this.appCode = appCode; + } + + public String getSoftwareVersion() { + return softwareVersion; + } + + public void setSoftwareVersion(String softwareVersion) { + this.softwareVersion = softwareVersion; + } + + public String getSoftwareDesc() { + return softwareDesc; + } + + public void setSoftwareDesc(String softwareDesc) { + this.softwareDesc = softwareDesc; + } + + public String getAppSecrecyLevel() { + return appSecrecyLevel; + } + + public void setAppSecrecyLevel(String appSecrecyLevel) { + this.appSecrecyLevel = appSecrecyLevel; + } + + public String getAppIcon() { + return appIcon; + } + + public void setAppIcon(String appIcon) { + this.appIcon = appIcon; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public int getUseFlag() { + return useFlag; + } + + public void setUseFlag(int useFlag) { + this.useFlag = useFlag; + } + + public String getProfession() { + return profession; + } + + public void setProfession(String profession) { + this.profession = profession; + } + + public Long getCreateUid() { + return createUid; + } + + public void setCreateUid(Long createUid) { + this.createUid = createUid; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public Long getUpdateUid() { + return updateUid; + } + + public void setUpdateUid(Long updateUid) { + this.updateUid = updateUid; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getPublishArea() { + return publishArea; + } + + public void setPublishArea(String publishArea) { + this.publishArea = publishArea; + } + + public String getParticipantIds() { + return participantIds; + } + + public void setParticipantIds(String participantIds) { + this.participantIds = participantIds; + } + + public String getBelongTask() { + return belongTask; + } + + public void setBelongTask(String belongTask) { + this.belongTask = belongTask; + } + + public String getAppPlatform() { + return appPlatform; + } + + public void setAppPlatform(String appPlatform) { + this.appPlatform = appPlatform; + } + + public String getAppDirection() { + return appDirection; + } + + public void setAppDirection(String appDirection) { + this.appDirection = appDirection; + } + + public String getAppTheme() { + return appTheme; + } + + public void setAppTheme(String appTheme) { + this.appTheme = appTheme; + } + + public String getObjectType() { + return objectType; + } + + public void setObjectType(String objectType) { + this.objectType = objectType; + } + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public String getApproveLeader() { + return approveLeader; + } + + public void setApproveLeader(String approveLeader) { + this.approveLeader = approveLeader; + } + + public String getLinkNum() { + return linkNum; + } + + public void setLinkNum(String linkNum) { + this.linkNum = linkNum; + } + + public String getApproveManager() { + return approveManager; + } + + public void setApproveManager(String approveManager) { + this.approveManager = approveManager; + } + + public String getRecordId() { + return recordId; + } + + public void setRecordId(String recordId) { + this.recordId = recordId; + } + + public int getAppState() { + return appState; + } + + public void setAppState(int appState) { + this.appState = appState; + } + + public String getResourceSetting() { + return resourceSetting; + } + + public void setResourceSetting(String resourceSetting) { + this.resourceSetting = resourceSetting; + } + + public String getAssumeDept() { + return assumeDept; + } + + public void setAssumeDept(String assumeDept) { + this.assumeDept = assumeDept; + } + + public String getAssumeLinkman() { + return assumeLinkman; + } + + public void setAssumeLinkman(String assumeLinkman) { + this.assumeLinkman = assumeLinkman; + } + + public String getLinkmanNum() { + return linkmanNum; + } + + public void setLinkmanNum(String linkmanNum) { + this.linkmanNum = linkmanNum; + } + + public String getAuthorize() { + return authorize; + } + + public void setAuthorize(String authorize) { + this.authorize = authorize; + } + + public boolean isEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + public enum AppStateType{ + REGISTER(0,"注册"), + ONLINE(1,"上线"), + OFFLINE(2,"下线"); + //编号 + private Integer code; + //名称 + private String name; + + AppStateType(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + } + + +} + diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/enums/YkInf.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/enums/YkInf.java new file mode 100644 index 0000000..b61c020 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/enums/YkInf.java @@ -0,0 +1,22 @@ +package com.bocloud.sms.enums; + +public enum YkInf { + //查询用户信息 + queryAllUser("/system/user/queryAllUser"), + //获取应用列表 + getAppList("/system/sysapp/getAppList"), + //获取运维工单接口 + getTaskList("/activiti/rwMainTask/getTaskList"), + + getTaskByUser("/system/task/countTaskByUser"); + + private String url; + + YkInf(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppModule.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppModule.java new file mode 100644 index 0000000..ed52cf4 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppModule.java @@ -0,0 +1,10 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class AppModule { + private String name; + private String id; + private String pid; +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppPerm.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppPerm.java new file mode 100644 index 0000000..9bad987 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AppPerm.java @@ -0,0 +1,11 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class AppPerm { + private String name; + private String id; + private String pid; + private String pname; +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxCategoryModel.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxCategoryModel.java new file mode 100644 index 0000000..18c5213 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxCategoryModel.java @@ -0,0 +1,10 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class QxCategoryModel { + private String id; + private String pid; + private String name; +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxReqVo.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxReqVo.java new file mode 100644 index 0000000..b94572d --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/QxReqVo.java @@ -0,0 +1,25 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class QxReqVo { + private String userToken; + private String userId; + private String appId; + private String appName; + private String pmsFlag; + private String areaId; + + public QxReqVo(String userToken, String userId, String appId, String appName, String pmsFlag, String areaId) { + this.userToken = userToken; + this.userId = userId; + this.appId = appId; + this.appName = appName; + this.pmsFlag = pmsFlag; + this.areaId = areaId; + } + + public QxReqVo() { + } +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TrxAuthModel.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TrxAuthModel.java new file mode 100644 index 0000000..399f292 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TrxAuthModel.java @@ -0,0 +1,11 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class TrxAuthModel { + private String clientHello; + private String serverHello; + private String trxToken; + private String clientIp; +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkReqVo.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkReqVo.java new file mode 100644 index 0000000..ff3d0d3 --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkReqVo.java @@ -0,0 +1,22 @@ +package com.bocloud.sms.model; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +@Data +public class YkReqVo { + private String reqUserId; + private String systemId; + private String method; + private JSONObject params; + + public YkReqVo(String reqUserId, String systemId, String method, JSONObject params) { + this.reqUserId = reqUserId; + this.systemId = systemId; + this.method = method; + this.params = params; + } + + public YkReqVo() { + } +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkUserModel.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkUserModel.java new file mode 100644 index 0000000..eefaecd --- /dev/null +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/model/YkUserModel.java @@ -0,0 +1,14 @@ +package com.bocloud.sms.model; + +import lombok.Data; + +@Data +public class YkUserModel { + private String loginName; + private String userName; + private String gender; + private String mobile; + private String ip; + private String orgId; + private String email; +} diff --git a/bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRepository.java b/bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRepository.java index 8e14650..97987f6 100644 --- a/bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRepository.java +++ b/bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRepository.java @@ -134,6 +134,14 @@ public class UserRepository extends JdbcGenericDao { return list.isEmpty() ? null : list.get(0); } + public User getByUserId(String userId) { + String sql = + "select u.*, t.account tenant_account,t.name tenant_name, t.discount discount from users u left join tenant t on u.tenant_id = t.id where u.is_deleted = 0 and u.user_id = :userId "; + Map params = MapTools.simpleMap("user_id", userId); + List list = this.list(User.class, sql, params); +// Assert.isTrue(list.size() <= 1, "该天融信用户已存在"); + return list.isEmpty() ? null : list.get(0); + } /** * 分页查询用户 *