From 869ee7738157e1abddecb97d961b35c4d77d7de7 Mon Sep 17 00:00:00 2001 From: zhangyuan Date: Tue, 12 Jan 2021 17:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E7=BC=96=E7=A0=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epdc-cloud-admin/pom.xml | 6 + .../epdc/controller/SysDeptController.java | 15 ++- .../elink/esua/epdc/entity/SysDeptEntity.java | 4 + .../com/elink/esua/epdc/jwt/JwtUtils.java | 46 ++++++++ .../esua/epdc/properties/EpmetProperties.java | 67 ++++++++++++ .../esua/epdc/service/SysDeptService.java | 11 ++ .../epdc/service/impl/SysDeptServiceImpl.java | 72 ++++++++++-- .../com/elink/esua/epdc/utils/EpmetUtils.java | 103 ++++++++++++++++++ .../src/main/resources/application-dev.yml | 6 +- .../src/main/resources/application.yml | 7 ++ .../src/main/resources/mapper/SysDeptDao.xml | 4 +- 11 files changed, 324 insertions(+), 17 deletions(-) create mode 100644 epdc-cloud-admin/src/main/java/com/elink/esua/epdc/jwt/JwtUtils.java create mode 100644 epdc-cloud-admin/src/main/java/com/elink/esua/epdc/properties/EpmetProperties.java create mode 100644 epdc-cloud-admin/src/main/java/com/elink/esua/epdc/utils/EpmetUtils.java diff --git a/epdc-cloud-admin/pom.xml b/epdc-cloud-admin/pom.xml index 193c634..9284c43 100644 --- a/epdc-cloud-admin/pom.xml +++ b/epdc-cloud-admin/pom.xml @@ -189,6 +189,8 @@ organizationGroup categoryGroup categoryGroup + + http://192.168.1.130:8080/api @@ -227,6 +229,8 @@ organizationGroup categoryGroup categoryGroup + + https://epmet-dev.elinkservice.cn/api @@ -272,6 +276,8 @@ organizationGroup categoryGroup categoryGroup + + https://epmet-open.elinkservice.cn/api diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java index b68e0e0..c04b1e3 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java @@ -18,6 +18,7 @@ import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup; import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; import com.elink.esua.epdc.dto.*; +import com.elink.esua.epdc.dto.epdc.form.UserSysDeptAreaCodeFormDTO; import com.elink.esua.epdc.dto.epdc.form.UserSysDeptInfoFormDTO; import com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO; import com.elink.esua.epdc.optimize.modules.deptlevel.service.OptSysDeptService; @@ -28,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -303,4 +303,17 @@ public class SysDeptController { List list = sysDeptService.listAllDeptInfo(formDTO); return new Result>().ok(list); } + + /** + * 获取产品端areaCode + * + * @param dto + * @return com.elink.esua.epdc.commons.tools.utils.Result> + * @author zhy + * @date 2021/1/11 14:34 + */ + @GetMapping("getEpmetAreaCode") + public Result getEpmetAreaCode(UserSysDeptAreaCodeFormDTO dto) { + return new Result().ok(sysDeptService.getEpmetAreaCode(dto)); + } } diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/entity/SysDeptEntity.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/entity/SysDeptEntity.java index 7c94070..32aef2b 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/entity/SysDeptEntity.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/entity/SysDeptEntity.java @@ -46,6 +46,10 @@ public class SysDeptEntity extends BaseEntity { * 区域编码 */ private String areaCode; + /** + * 区域编码 + */ + private String allAreaCode; /** * 排序 */ diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/jwt/JwtUtils.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/jwt/JwtUtils.java new file mode 100644 index 0000000..cc7f693 --- /dev/null +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/jwt/JwtUtils.java @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.elink.esua.epdc.jwt; + +import com.elink.esua.epdc.properties.EpmetProperties; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * Jwt工具类 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Component +public class JwtUtils { + + @Autowired + private EpmetProperties epmetProperties; + + /** + * 生成上报接口accessToken + * + * @param claims + * @return java.lang.String + * @author Liuchuang + * @since 2020/9/7 14:11 + */ + public String getEpmetAccessToken(Map claims){ + return Jwts.builder() + .setHeaderParam("typ", "JWT") + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, epmetProperties.getSecret()) + .compact(); + } +} diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/properties/EpmetProperties.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/properties/EpmetProperties.java new file mode 100644 index 0000000..b9723e8 --- /dev/null +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/properties/EpmetProperties.java @@ -0,0 +1,67 @@ +package com.elink.esua.epdc.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * 党群e事通接口配置 + * + * @Author:liuchuang + * @Date:2020/8/20 13:22 + */ +@Configuration +@ConfigurationProperties(prefix = "epmet.config") +public class EpmetProperties { + + /** + * 应用ID + */ + private String appId; + + /** + * 接口前缀 + */ + private String url; + + /** + * 生成AccessToken密钥 + */ + private String secret; + + /** + * 客户ID + */ + private String customerId; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } +} diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java index e53d913..cc159bb 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java @@ -13,6 +13,7 @@ import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; +import com.elink.esua.epdc.dto.epdc.form.UserSysDeptAreaCodeFormDTO; import com.elink.esua.epdc.dto.epdc.form.UserSysDeptInfoFormDTO; import com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO; import com.elink.esua.epdc.entity.SysDeptEntity; @@ -279,4 +280,14 @@ public interface SysDeptService extends BaseService { * @date 2020/5/14 10:11 */ DeptOption getBusinessDeptByUser(); + + /** + * 获取产品端areaCode + * + * @param dto + * @return java.util.List + * @author zhy + * @date 2021/1/11 18:01 + */ + List getEpmetAreaCode(UserSysDeptAreaCodeFormDTO dto); } diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java index 33bd05e..49e362a 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java @@ -9,17 +9,11 @@ package com.elink.esua.epdc.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.db.handler.HandleHelper; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; -import com.elink.esua.epdc.commons.tools.constant.Constant; -import com.elink.esua.epdc.commons.tools.constant.FieldConstant; -import com.elink.esua.epdc.commons.tools.constant.NumConstant; -import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant; -import com.elink.esua.epdc.commons.tools.constant.*; import com.elink.esua.epdc.commons.tools.constant.*; import com.elink.esua.epdc.commons.tools.enums.SuperAdminEnum; import com.elink.esua.epdc.commons.tools.enums.YesOrNoEnum; @@ -38,7 +32,11 @@ import com.elink.esua.epdc.constant.RoleTypeKeyConstant; import com.elink.esua.epdc.dao.SysDeptDao; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; +import com.elink.esua.epdc.dto.epdc.form.UserSysDeptAreaCodeFormDTO; import com.elink.esua.epdc.dto.epdc.form.UserSysDeptInfoFormDTO; +import com.elink.esua.epdc.dto.epdc.result.AreaCodeChildResultDTO; +import com.elink.esua.epdc.dto.epdc.result.AreaCodeParentResultDTO; +import com.elink.esua.epdc.dto.epdc.result.UserSysDeptAreaCodeResultDTO; import com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO; import com.elink.esua.epdc.entity.SysDeptEntity; import com.elink.esua.epdc.feign.GroupFeignClient; @@ -46,6 +44,7 @@ import com.elink.esua.epdc.rocketmq.dto.OrganizationModifyDTO; import com.elink.esua.epdc.rocketmq.producer.OrganizationModifyProducer; import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysUserService; +import com.elink.esua.epdc.utils.EpmetUtils; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -85,6 +84,9 @@ public class SysDeptServiceImpl extends BaseServiceImpl deptNameList = Lists.newArrayList(); SysDeptEntity dept; - for (int i = 0; i < pidArray.length; i++) { - dept = baseDao.selectById(Long.parseLong(pidArray[i])); + for (String s : pidArray) { + dept = baseDao.selectById(Long.parseLong(s)); deptNameList.add(dept.getName()); } parentDeptNames = StringUtils.join(deptNameList, StrConstant.HYPHEN); @@ -1104,11 +1106,59 @@ public class SysDeptServiceImpl extends BaseServiceImpl 0) { map.put("deptId", formDTO.getDeptIdList().get(0)); } - if (formDTO.getDeptName() != null && formDTO.getDeptName() != "") { + if (formDTO.getDeptName() != null && !"".equals(formDTO.getDeptName())) { map.put("deptName", formDTO.getDeptName()); } - List list = baseDao.selectListAllDeptInfo(map); // 获取全部的部门信息 - return list; + return baseDao.selectListAllDeptInfo(map); + } + + @Override + public List getEpmetAreaCode(UserSysDeptAreaCodeFormDTO dto) { + + String deptAreaCodeOptionKey = RedisKeys.getAdminUserDeptAreaCodeOptionKey(dto.getRootAreaCode(), dto.getRootAreaLevel()); + Object obj = redisUtils.get(deptAreaCodeOptionKey); + if (null == obj) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(EpmetConstant.SCREEN_ROOT_AREA_CODE, dto.getRootAreaCode()); + jsonObject.put(EpmetConstant.SCREEN_ROOT_AREA_LEVEL, dto.getRootAreaLevel()); + + // 从产品端获取数据 + EpmetResultDTO resultDTO = epmetUtils.httpPost(EpmetConstant.EPMET_SYS_DEPT_AREA_CODE, JSONObject.toJSONString(jsonObject), EpmetResultDTO.class); + List resultDTOList = JSONObject.parseArray(resultDTO.getData(), UserSysDeptAreaCodeResultDTO.class); + + // 转换一下从产品返回数据的格式 + List options = new ArrayList(); + convertAreaCodeResult(resultDTOList, options); + + redisUtils.set(deptAreaCodeOptionKey, options); + + obj = redisUtils.get(deptAreaCodeOptionKey); + } + return (List) obj; + } + + /** + * 如果产品返回数据中的children为空,那么除掉这个children属性 + * + * @param fromDTO + * @param toDTO + * @return void + * @author zhy + * @date 2021/1/11 18:02 + */ + private void convertAreaCodeResult(List fromDTO, List toDTO) { + fromDTO.forEach(item -> { + if (item.getChildren().isEmpty()) { + AreaCodeChildResultDTO child = ConvertUtils.sourceToTarget(item, AreaCodeChildResultDTO.class); + toDTO.add(child); + } else { + AreaCodeParentResultDTO dto = ConvertUtils.sourceToTarget(item, AreaCodeParentResultDTO.class); + List children = new ArrayList(); + this.convertAreaCodeResult(item.getChildren(), children); + dto.setChildren(children); + toDTO.add(dto); + } + }); } /** diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/utils/EpmetUtils.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/utils/EpmetUtils.java new file mode 100644 index 0000000..a990bbc --- /dev/null +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/utils/EpmetUtils.java @@ -0,0 +1,103 @@ +package com.elink.esua.epdc.utils; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.elink.esua.epdc.commons.tools.constant.EpmetConstant; +import com.elink.esua.epdc.commons.tools.constant.NumConstant; +import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.EpmetResultDTO; +import com.elink.esua.epdc.jwt.JwtUtils; +import com.elink.esua.epdc.properties.EpmetProperties; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class EpmetUtils { + + private final Logger logger = LogManager.getLogger(getClass()); + + @Autowired + private EpmetProperties epmetProperties; + + @Autowired + private JwtUtils jwtUtils; + + /** + * 获取产品端数据 + * + * @param urlSuffix 接口地址后缀 + * @param param 入参 + * @param returnClass 返回类型 + * @return T + * @author zhy + * @date 2021/1/11 11:10 + */ + public T httpPost(String urlSuffix, String param, Class returnClass) { + // 应用ID + String appId = epmetProperties.getAppId(); + // 生成AccessToken + String accessToken = getEpmetAccessToken(); + // 接口地址 + String url = epmetProperties.getUrl().concat(urlSuffix); + HttpResponse response; + response = HttpRequest.post(url).body(param) + .header(EpmetConstant.HEARD_KEY_ACCESS_TOKEN, accessToken) + .header(EpmetConstant.HEARD_KEY_APP_ID, appId) + .header(EpmetConstant.SCREEN_CONTENT_TYPE, "application/json") + .header(EpmetConstant.SCREEN_DATA_TYPE, EpmetConstant.SCREEN_DATA_TYPE_REAL) + .execute(); + if (NumConstant.TWO_HUNDRED != response.getStatus()) { + logger.error("数据上报失败, 返回状态:{}, 请求参数:{appId:{}, url:{}, accessToken:{}, param:{}}", + response.getStatus(), appId, url, accessToken, param); + throw new RenException("网络开小差了,请稍后再试"); + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + if (!NumConstant.ZERO_STR.equals(jsonObject.get(EpmetConstant.RESULT_KEY_CODE).toString())) { + logger.info("数据上报失败:{},请求地址:{},请求参数:{}", JSONObject.toJSONString(response.body()), url, param); + throw new RenException("网络开小差了,请稍后再试"); + } + + logger.info("请求产品侧接口成功:::请求地址=={}:::接口返回=={}", url, JSONObject.toJSONString(response.body())); + T result = JSON.parseObject(response.body(), returnClass); + // 业务处理异常 + if (result instanceof EpmetResultDTO) { + EpmetResultDTO epmetResultDto = (EpmetResultDTO) result; + if (!epmetResultDto.success()) { + logger.error("产品侧接口返回数据异常:::请求地址=={}:::请求参数=={}:::返回数据=={}", url, param, response.body()); + throw new RenException(epmetResultDto.getInternalMsg()); + } + } else if (result instanceof Result) { + Result r = (Result) result; + if (!r.success()) { + logger.error("产品侧接口返回数据异常:::请求地址=={}:::请求参数=={}:::返回数据=={}", url, param, response.body()); + throw new RenException(r.getMsg()); + } + } + // json格式化接口返回数据 + return result; + } + + /** + * 生成上报接口accessToken + * + * @return java.lang.String + * @author Liuchuang + * @since 2020/9/7 14:15 + */ + private String getEpmetAccessToken() { + Map accessTokenMap = new HashMap<>(3); + accessTokenMap.put(EpmetConstant.ACCESS_TOKEN_KEY_CUSTOMER_ID, epmetProperties.getCustomerId()); + accessTokenMap.put(EpmetConstant.ACCESS_TOKEN_KEY_APP_ID, epmetProperties.getAppId()); + accessTokenMap.put(EpmetConstant.ACCESS_TOKEN_KEY_TS, System.currentTimeMillis()); + + return jwtUtils.getEpmetAccessToken(accessTokenMap); + } +} diff --git a/epdc-cloud-admin/src/main/resources/application-dev.yml b/epdc-cloud-admin/src/main/resources/application-dev.yml index b78cba8..efca7b9 100644 --- a/epdc-cloud-admin/src/main/resources/application-dev.yml +++ b/epdc-cloud-admin/src/main/resources/application-dev.yml @@ -8,9 +8,9 @@ spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://47.104.224.45:3308/yushan_esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai - username: epdcyushan - password: elink833066 + url: jdbc:mysql://rm-m5eguiv2827bdye798o.mysql.rds.aliyuncs.com:10001/yushan_esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai + username: yushan_epdc_test + password: elink-epdc@yushan #Oracle # driver-class-name: oracle.jdbc.OracleDriver # url: jdbc:oracle:thin:@localhost:1521:xe diff --git a/epdc-cloud-admin/src/main/resources/application.yml b/epdc-cloud-admin/src/main/resources/application.yml index 3b01481..1de2281 100644 --- a/epdc-cloud-admin/src/main/resources/application.yml +++ b/epdc-cloud-admin/src/main/resources/application.yml @@ -121,3 +121,10 @@ rocketmq: consumer: group: @rocketmq.consumer.group@ category-group: @rocketmq.consumer.category.group@ + +epmet: + config: + secret: 6939e90472734ce49cfde1bffced8e52e22451d241fd4c89a5089ae1b6da332b + appId: db0c48cb419c8a73c95af4b370c01bc8 + customerId: ab7536372abdc2bd9ad4a4a69cdc0564 + url: @epmet.url@ \ No newline at end of file diff --git a/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml b/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml index fc004ad..31e2165 100644 --- a/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml +++ b/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml @@ -6,8 +6,8 @@