From cde9fa4bb6891091f7c044cfc711ce0a74907b2f Mon Sep 17 00:00:00 2001 From: wxz Date: Fri, 25 Jun 2021 13:31:26 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=A8=E5=9F=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8Cdb:epmet=5Fadmin.cors=5Fconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/result/CorsConfigResultDTO.java | 20 +++ .../feign/EpmetAdminOpenFeignClient.java | 24 +++ .../EpmetAdminOpenFeignClientFallback.java | 18 +++ .../controller/CorsConfigController.java | 32 ++++ .../java/com/epmet/dao/CorsConfigDao.java | 33 +++++ .../com/epmet/entity/CorsConfigEntity.java | 51 +++++++ .../com/epmet/service/CorsConfigService.java | 14 ++ .../service/impl/CorsConfigServiceImpl.java | 36 +++++ .../main/resources/mapper/CorsConfigDao.xml | 19 +++ .../epmet/commons/tools/redis/RedisKeys.java | 10 ++ epmet-gateway/pom.xml | 5 + .../java/com/epmet/bean/CorsConfigCache.java | 21 +++ .../java/com/epmet/config/CorsConfig.java | 137 ++++++++++++++---- 13 files changed, 395 insertions(+), 25 deletions(-) create mode 100644 epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java create mode 100644 epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/EpmetAdminOpenFeignClient.java create mode 100644 epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/fallback/EpmetAdminOpenFeignClientFallback.java create mode 100644 epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java create mode 100644 epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/CorsConfigDao.java create mode 100644 epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java create mode 100644 epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java create mode 100644 epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java create mode 100644 epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml create mode 100644 epmet-gateway/src/main/java/com/epmet/bean/CorsConfigCache.java diff --git a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java new file mode 100644 index 0000000000..3faa333d74 --- /dev/null +++ b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java @@ -0,0 +1,20 @@ +package com.epmet.dto.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CorsConfigResultDTO { + /** + * 首部类型 + */ + private String headerType; + + /** + * 首部值 + */ + private String headerValue; +} diff --git a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/EpmetAdminOpenFeignClient.java b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/EpmetAdminOpenFeignClient.java new file mode 100644 index 0000000000..e1b48a9186 --- /dev/null +++ b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/EpmetAdminOpenFeignClient.java @@ -0,0 +1,24 @@ +package com.epmet.feign; + +import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.result.CorsConfigResultDTO; +import com.epmet.feign.fallback.EpmetAdminOpenFeignClientFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +@FeignClient(name = ServiceConstant.EPMET_ADMIN_SERVER, fallback = EpmetAdminOpenFeignClientFallback.class) +//@FeignClient(name = ServiceConstant.EPMET_ADMIN_SERVER, fallback = EpmetAdminOpenFeignClientFallback.class, url = "localhost:8082") +public interface EpmetAdminOpenFeignClient { + + /** + * @Description 查询跨域配置列表 + * @return + * @author wxz + * @date 2021.06.25 10:00 + */ + @PostMapping("/sys/cors-config/list") + Result> list(); +} diff --git a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/fallback/EpmetAdminOpenFeignClientFallback.java b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/fallback/EpmetAdminOpenFeignClientFallback.java new file mode 100644 index 0000000000..72edce3446 --- /dev/null +++ b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/feign/fallback/EpmetAdminOpenFeignClientFallback.java @@ -0,0 +1,18 @@ +package com.epmet.feign.fallback; + +import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.utils.ModuleUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.result.CorsConfigResultDTO; +import com.epmet.feign.EpmetAdminOpenFeignClient; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class EpmetAdminOpenFeignClientFallback implements EpmetAdminOpenFeignClient { + @Override + public Result> list() { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "list", null); + } +} diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java new file mode 100644 index 0000000000..e2972f93d6 --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java @@ -0,0 +1,32 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.result.CorsConfigResultDTO; +import com.epmet.service.CorsConfigService; +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.RestController; + +import java.util.List; + +@RestController +@RequestMapping("cors-config") +public class CorsConfigController { + + @Autowired + private CorsConfigService corsConfigService; + + /** + * @Description 查询跨域配置列表 + * @return + * @author wxz + * @date 2021.06.25 10:00 + */ + @PostMapping("/list") + public Result> list() { + List list = corsConfigService.list(); + return new Result>().ok(list); + } + +} diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/CorsConfigDao.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/CorsConfigDao.java new file mode 100644 index 0000000000..0b6c499833 --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/CorsConfigDao.java @@ -0,0 +1,33 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dao; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.CorsConfigEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 跨域配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-06-25 + */ +@Mapper +public interface CorsConfigDao extends BaseDao { + +} \ No newline at end of file diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java new file mode 100644 index 0000000000..75f7258e76 --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java @@ -0,0 +1,51 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.entity; + +import com.baomidou.mybatisplus.annotation.TableName; + +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 跨域配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-06-25 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("cors_config") +public class CorsConfigEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 首部类型 + */ + private String headerType; + + /** + * 首部值 + */ + private String headerValue; + +} diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java new file mode 100644 index 0000000000..8bae0f9531 --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java @@ -0,0 +1,14 @@ +package com.epmet.service; + +import com.epmet.dto.result.CorsConfigResultDTO; + +import java.util.List; + +/** + * @Description 跨域配置service接口 + * @author wxz + * @date 2021-06-44 09:52:44 +*/ +public interface CorsConfigService { + List list(); +} diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java new file mode 100644 index 0000000000..aed116d421 --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java @@ -0,0 +1,36 @@ +package com.epmet.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.dao.CorsConfigDao; +import com.epmet.dto.result.CorsConfigResultDTO; +import com.epmet.entity.CorsConfigEntity; +import com.epmet.service.CorsConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description 跨域配置 + * @author wxz + * @date 2021.06.25 09:53:57 +*/ +@Service +public class CorsConfigServiceImpl implements CorsConfigService { + + @Autowired + private CorsConfigDao corsConfigDao; + + /** + * @Description 查询配置列表 + * @return + * @author wxz + * @date 2021.06.25 09:58 + */ + @Override + public List list() { + LambdaQueryWrapper conditions = new LambdaQueryWrapper<>(); + return ConvertUtils.sourceToTarget(corsConfigDao.selectList(conditions), CorsConfigResultDTO.class); + } +} diff --git a/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml b/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml new file mode 100644 index 0000000000..ce43effd0a --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java index 0dfa22915c..68c417c580 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java @@ -459,4 +459,14 @@ public class RedisKeys { String currentMonth= DateUtils.getBeforeNMonth(NumConstant.ZERO); return "groupread:user:".concat(currentMonth).concat(":").concat(source).concat(":").concat(groupId).concat(":").concat(sourceId); } + + /** + * @Description 跨域配置key + * @return + * @author wxz + * @date 2021.06.25 10:31 + */ + public static String getCorsConfigKey() { + return rootPrefix.concat("sys:cors"); + } } diff --git a/epmet-gateway/pom.xml b/epmet-gateway/pom.xml index b89bc59c0e..6d62b56d53 100644 --- a/epmet-gateway/pom.xml +++ b/epmet-gateway/pom.xml @@ -81,6 +81,11 @@ epmet-commons-openapi 2.0.0 + + com.epmet + epmet-admin-client + 2.0.0 + diff --git a/epmet-gateway/src/main/java/com/epmet/bean/CorsConfigCache.java b/epmet-gateway/src/main/java/com/epmet/bean/CorsConfigCache.java new file mode 100644 index 0000000000..3a44510959 --- /dev/null +++ b/epmet-gateway/src/main/java/com/epmet/bean/CorsConfigCache.java @@ -0,0 +1,21 @@ +package com.epmet.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description 跨域配置缓存 + * @author wxz + * @date 2021.06.25 10:59:44 +*/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CorsConfigCache { + + private List accessControlAllowOrigins; + +} diff --git a/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java b/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java index ffec185a98..0349eaac8d 100644 --- a/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java +++ b/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java @@ -1,15 +1,29 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.epmet.config; +import com.epmet.bean.CorsConfigCache; +import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.feign.ResultDataResolver; +import com.epmet.commons.tools.redis.RedisKeys; +import com.epmet.dto.result.CorsConfigResultDTO; +import com.epmet.feign.EpmetAdminOpenFeignClient; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -21,6 +35,11 @@ import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * Cors跨域 * @@ -29,33 +48,101 @@ import reactor.core.publisher.Mono; */ @Configuration public class CorsConfig { - private static final String MAX_AGE = "18000L"; @Bean public WebFilter corsFilter() { - return (ServerWebExchange ctx, WebFilterChain chain) -> { - ServerHttpRequest request = ctx.getRequest(); - if (!CorsUtils.isCorsRequest(request)) { - return chain.filter(ctx); - } - HttpHeaders requestHeaders = request.getHeaders(); - ServerHttpResponse response = ctx.getResponse(); - HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); - HttpHeaders headers = response.getHeaders(); + return new EpmetWebFilter(); + } +} + +/** + * @Description 用于CORS等操作的判断 + * @return + * @author wxz + * @date 2021.06.25 10:42 + */ +class EpmetWebFilter implements WebFilter, ResultDataResolver { + + private static final String MAX_AGE = "18000L"; + + @Autowired + private EpmetAdminOpenFeignClient adminOpenFeignClient; + + @Resource + private RedisTemplate redisTemplate; + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + public Mono filter(ServerWebExchange ctx, WebFilterChain chain) { + ServerHttpRequest request = ctx.getRequest(); + if (!CorsUtils.isCorsRequest(request)) { + return chain.filter(ctx); + } + HttpHeaders requestHeaders = request.getHeaders(); + ServerHttpResponse response = ctx.getResponse(); + HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); + HttpHeaders headers = response.getHeaders(); + if (isAllowed(requestHeaders.getOrigin())) { headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); - headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders()); - if (requestMethod != null) { - headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); + } + headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders()); + if (requestMethod != null) { + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); + } + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*"); + headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE); + if (request.getMethod() == HttpMethod.OPTIONS) { + response.setStatusCode(HttpStatus.OK); + return Mono.empty(); + } + return chain.filter(ctx); + } + + /** + * @Description 是否允许跨域 + * @return + * @author wxz + * @date 2021.06.25 10:43 + */ + private Boolean isAllowed(String origin) { + HashOperations> ope = redisTemplate.opsForHash(); + Map> configMap = ope.entries(RedisKeys.getCorsConfigKey()); + + if (configMap == null || configMap.size() == 0) { + List data = null; + try { + data = getResultDataOrThrowsException( + adminOpenFeignClient.list(), + ServiceConstant.EPMET_ADMIN_SERVER, + EpmetErrorCode.SERVER_ERROR.getCode(), + "调用Admin服务查询Cors配置失败"); + } catch (Exception e) { + logger.error("调用Admin服务查询Cors配置失败"); } - headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*"); - headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE); - if (request.getMethod() == HttpMethod.OPTIONS) { - response.setStatusCode(HttpStatus.OK); - return Mono.empty(); + + // 将origin集合 + List origins = data.stream() + .filter((c) -> HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN.equals(c.getHeaderType())) + .map((c) -> c.getHeaderValue()) + .collect(Collectors.toList()); + + try { + configMap.put(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origins); + ope.putAll(RedisKeys.getCorsConfigKey(), configMap); + } catch (Exception e) { + logger.error(String.format("gateway缓存跨域配置出错:%s", ExceptionUtils.getErrorStackTrace(e))); } - return chain.filter(ctx); - }; - } + } -} + List accessControlAllowOrigins = configMap.get(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN); + if (CollectionUtils.isEmpty(accessControlAllowOrigins)) { + return false; + } + if (accessControlAllowOrigins.contains("*")) { + return true; + } + return accessControlAllowOrigins.contains(origin); + } +} \ No newline at end of file From b1ee66d66f67f272d25d290d8b1116c5f4c8f089 Mon Sep 17 00:00:00 2001 From: wxz Date: Fri, 25 Jun 2021 15:34:47 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=B7=A8?= =?UTF-8?q?=E5=9F=9Fcurd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/dto/form/CorsConfigFormDTO.java | 37 ++++++++++ .../epmet/dto/result/CorsConfigResultDTO.java | 7 ++ .../controller/CorsConfigController.java | 44 ++++++++++- .../com/epmet/entity/CorsConfigEntity.java | 5 ++ .../com/epmet/service/CorsConfigService.java | 6 ++ .../service/impl/CorsConfigServiceImpl.java | 74 +++++++++++++++++++ .../main/resources/mapper/CorsConfigDao.xml | 1 + .../tools/exception/EpmetErrorCode.java | 1 + 8 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/CorsConfigFormDTO.java diff --git a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/CorsConfigFormDTO.java b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/CorsConfigFormDTO.java new file mode 100644 index 0000000000..18668f87fe --- /dev/null +++ b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/CorsConfigFormDTO.java @@ -0,0 +1,37 @@ +package com.epmet.dto.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CorsConfigFormDTO { + + public interface Add {} + public interface Update {} + + @NotBlank(message = "ID不能为空", groups = { Update.class }) + private String id; + + /** + * 首部type + */ + @NotBlank(message = "首部类型不能为空", groups = { Add.class, Update.class }) + private String headerType; + + /** + * 首部value + */ + @NotBlank(message = "首部值不能为空", groups = { Add.class, Update.class }) + private String headerValue; + + /** + * 备注 + */ + private String comment; + +} diff --git a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java index 3faa333d74..828e2998ae 100644 --- a/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java +++ b/epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/result/CorsConfigResultDTO.java @@ -8,6 +8,8 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class CorsConfigResultDTO { + + private String id; /** * 首部类型 */ @@ -17,4 +19,9 @@ public class CorsConfigResultDTO { * 首部值 */ private String headerValue; + + /** + * 首部备注 + */ + private String comment; } diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java index e2972f93d6..6ccf102354 100644 --- a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/CorsConfigController.java @@ -1,12 +1,12 @@ package com.epmet.controller; import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.form.CorsConfigFormDTO; import com.epmet.dto.result.CorsConfigResultDTO; import com.epmet.service.CorsConfigService; 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.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -29,4 +29,42 @@ public class CorsConfigController { return new Result>().ok(list); } + /** + * @Description 添加跨域配置 + * @return + * @author wxz + * @date 2021.06.25 13:51 + */ + @PostMapping("/add") + public Result addConfig(@RequestBody CorsConfigFormDTO input) { + ValidatorUtils.validateEntity(input, CorsConfigFormDTO.Add.class); + CorsConfigResultDTO data = corsConfigService.addConfig(input.getHeaderType(), input.getHeaderValue(), input.getComment()); + return new Result().ok(data); + } + + /** + * @Description 通过id删除配置 + * @return + * @author wxz + * @date 2021.06.25 14:18 + */ + @PostMapping("/delete/{id}") + public Result deleteConfigById(@PathVariable("id") String configId) { + corsConfigService.deleteById(configId); + return new Result<>(); + } + + /** + * @Description 根据id更新 + * @return + * @author wxz + * @date 2021.06.25 14:23 + */ + @PostMapping("/update") + public Result updateById(@RequestBody CorsConfigFormDTO input) { + ValidatorUtils.validateEntity(input, CorsConfigFormDTO.Update.class); + corsConfigService.updateById(input.getId(), input.getHeaderType(), input.getHeaderValue(), input.getComment()); + return new Result<>(); + } + } diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java index 75f7258e76..0a717f1c50 100644 --- a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/CorsConfigEntity.java @@ -48,4 +48,9 @@ public class CorsConfigEntity extends BaseEpmetEntity { */ private String headerValue; + /** + * 说明 + */ + private String comment; + } diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java index 8bae0f9531..93a6b358a3 100644 --- a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/CorsConfigService.java @@ -11,4 +11,10 @@ import java.util.List; */ public interface CorsConfigService { List list(); + + CorsConfigResultDTO addConfig(String headerType, String headerValue, String comment); + + void deleteById(String configId); + + void updateById(String configId, String headerType, String headerValue, String comment); } diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java index aed116d421..2441882ea3 100644 --- a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java +++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/CorsConfigServiceImpl.java @@ -1,12 +1,20 @@ package com.epmet.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.dao.CorsConfigDao; import com.epmet.dto.result.CorsConfigResultDTO; import com.epmet.entity.CorsConfigEntity; import com.epmet.service.CorsConfigService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.List; @@ -22,6 +30,11 @@ public class CorsConfigServiceImpl implements CorsConfigService { @Autowired private CorsConfigDao corsConfigDao; + @Autowired + private RedisTemplate redisTemplate; + + private Logger logger = LoggerFactory.getLogger(getClass()); + /** * @Description 查询配置列表 * @return @@ -33,4 +46,65 @@ public class CorsConfigServiceImpl implements CorsConfigService { LambdaQueryWrapper conditions = new LambdaQueryWrapper<>(); return ConvertUtils.sourceToTarget(corsConfigDao.selectList(conditions), CorsConfigResultDTO.class); } + + @Override + public CorsConfigResultDTO addConfig(String headerType, String headerValue, String comment) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(CorsConfigEntity::getHeaderType, headerType.trim()); + w.eq(CorsConfigEntity::getHeaderValue, headerValue.trim()); + if (corsConfigDao.selectCount(w) > 0) { + throw new RenException(EpmetErrorCode.OPER_CORS_CONFIG_ERROR.getCode(), "已存在该跨域配置,请勿重复添加"); + } + + CorsConfigEntity insert = new CorsConfigEntity(); + insert.setHeaderType(headerType); + insert.setHeaderValue(headerValue); + insert.setComment(comment); + if (corsConfigDao.insert(insert) == 0) { + throw new RenException(EpmetErrorCode.OPER_CORS_CONFIG_ERROR.getCode(), "插入跨域配置出错"); + } + + deleteFromRedis(); + return new CorsConfigResultDTO(insert.getId(), headerType, headerValue, comment); + } + + @Override + public void deleteById(String configId) { + if (corsConfigDao.deleteById(configId) == 0) { + String msg = "删除出错,不存在该项数据"; + throw new RenException(EpmetErrorCode.OPER_CORS_CONFIG_ERROR.getCode(), msg, msg, RenException.MessageMode.CODE_INTERNAL_EXTERNAL); + } + deleteFromRedis(); + } + + @Override + public void updateById(String configId, String headerType, String headerValue, String comment) { + CorsConfigEntity exists = corsConfigDao.selectById(configId); + if (exists == null) { + String msg = "该项数据不存在"; + throw new RenException(EpmetErrorCode.OPER_CORS_CONFIG_ERROR.getCode(), msg, msg, RenException.MessageMode.CODE_INTERNAL_EXTERNAL); + } + exists.setHeaderType(headerType); + exists.setHeaderValue(headerValue); + exists.setComment(comment); + if (corsConfigDao.updateById(exists) == 0) { + throw new RenException(EpmetErrorCode.OPER_CORS_CONFIG_ERROR.getCode(), "更新出错,影响条数为0"); + } + deleteFromRedis(); + } + + /** + * @Description 从缓存中删除 + * @return + * @author wxz + * @date 2021.06.25 14:26 + */ + private void deleteFromRedis() { + try { + redisTemplate.delete(RedisKeys.getCorsConfigKey()); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + logger.error(String.format("从Redis中删除Cors跨域信息失败,程序继续执行。错误信息:%s", errorMsg)); + } + } } diff --git a/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml b/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml index ce43effd0a..36201beb73 100644 --- a/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml +++ b/epmet-admin/epmet-admin-server/src/main/resources/mapper/CorsConfigDao.xml @@ -7,6 +7,7 @@ + diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 86edad6f0b..2538492bb8 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -128,6 +128,7 @@ public enum EpmetErrorCode { USER_LIST_ROLES_BY_KEY_FAIL(8715, "根据角色key查询角色列表失败"), OPER_UPLOAD_IMG_TYPE_ERROR(8716, "请上传PNG格式的图片"), OPER_UPLOAD_IMG_SIZE_ERROR(8717, "请上传200*200的图片"), + OPER_CORS_CONFIG_ERROR(8718, "跨域配置错误"), // 党建声音 前端提示 88段 DRAFT_CONTENT_IS_NULL(8801, "至少需要添加一个段落"), From c87730063d035db70eda2ed5999f06dd0aafdc85 Mon Sep 17 00:00:00 2001 From: wxz Date: Fri, 25 Jun 2021 15:46:53 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E8=A1=A5=E5=85=85=EF=BC=9Acors=E8=B7=A8?= =?UTF-8?q?=E5=9F=9F=E9=85=8D=E7=BD=AEsql=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V0.0.5__cors_config_tbl.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.5__cors_config_tbl.sql diff --git a/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.5__cors_config_tbl.sql b/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.5__cors_config_tbl.sql new file mode 100644 index 0000000000..f240aff0bc --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.5__cors_config_tbl.sql @@ -0,0 +1,13 @@ +CREATE TABLE `cors_config` ( + `ID` varchar(64) NOT NULL, + `HEADER_TYPE` varchar(32) NOT NULL COMMENT '首部类型', + `HEADER_VALUE` varchar(128) NOT NULL COMMENT '首部值', + `COMMENT` varchar(512) DEFAULT NULL COMMENT '说明', + `DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除', + `REVISION` int(11) NOT NULL COMMENT '乐观锁', + `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跨域配置表' \ No newline at end of file From 062e9c812223db2fcaa5c5b6e5276752c6005203 Mon Sep 17 00:00:00 2001 From: jianjun Date: Fri, 25 Jun 2021 17:56:22 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=87=E6=B3=A8=20?= =?UTF-8?q?=E4=B8=BA=E4=BB=80=E4=B9=88=E5=86=85=E5=AD=98=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/epmetuser/impl/EpmetUserServiceImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java index 2ebc6b4613..175525d16d 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java @@ -7,7 +7,6 @@ import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.dao.epmetuser.StaffPatrolRecordDao; import com.epmet.dataaggre.dao.epmetuser.StaffRoleDao; import com.epmet.dataaggre.dao.epmetuser.UserBaseInfoDao; -import com.epmet.dataaggre.dto.datastats.result.SubAgencyUserResultDTO; import com.epmet.dataaggre.dto.epmetuser.StaffPatrolDetailDTO; import com.epmet.dataaggre.dto.epmetuser.StaffPatrolRecordDTO; import com.epmet.dataaggre.dto.epmetuser.form.PatrolDateListFormDTO; @@ -21,9 +20,7 @@ import com.epmet.dataaggre.service.epmetuser.StaffPatrolDetailService; import com.epmet.dataaggre.service.epmetuser.StaffPatrolRecordService; import com.epmet.dataaggre.service.govorg.GovOrgService; import lombok.extern.slf4j.Slf4j; -import oracle.sql.NUMBER; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -78,6 +75,7 @@ public class EpmetUserServiceImpl implements EpmetUserService { /** * @Param formDTO * @Description 001、各人员巡查记录列表查询 + * @remark 因为是yi以人为单位的数据 所以要内存分页 * @author sun */ @Override From 458aacf733c4747a7669dbf465b5f1a89b6db9be Mon Sep 17 00:00:00 2001 From: wxz Date: Mon, 28 Jun 2021 14:01:50 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E8=B0=83=E8=AF=95=EF=BC=9A=E8=B7=A8?= =?UTF-8?q?=E5=9F=9F=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java b/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java index 0349eaac8d..bb95213c1f 100644 --- a/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java +++ b/epmet-gateway/src/main/java/com/epmet/config/CorsConfig.java @@ -137,6 +137,10 @@ class EpmetWebFilter implements WebFilter, ResultDataResolver { } List accessControlAllowOrigins = configMap.get(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN); + + logger.info("accessControlAllowOrigins:" + accessControlAllowOrigins); + logger.info("origin:" + origin); + if (CollectionUtils.isEmpty(accessControlAllowOrigins)) { return false; } From 367e1b2ead0bc23411de4f4e0afca419d5da8334 Mon Sep 17 00:00:00 2001 From: jianjun Date: Mon, 28 Jun 2021 15:45:40 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E8=A7=84=E5=88=99=20=E6=96=B9=E6=B3=95=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BAget=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/dto/InitPointRuleResultDTO.java | 4 ++- .../feign/EpmetPointOpenFeignClient.java | 2 +- .../EpmetPointOpenFeignClientFallback.java | 5 ++-- .../epmet/controller/BackDoorController.java | 13 ++++----- .../com/epmet/service/PointRuleService.java | 4 +-- .../service/impl/PointRuleServiceImpl.java | 29 ++++++++++++------- .../service/impl/CustomerServiceImpl.java | 2 +- 7 files changed, 34 insertions(+), 25 deletions(-) diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/InitPointRuleResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/InitPointRuleResultDTO.java index 4f486cba66..205b69db19 100644 --- a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/InitPointRuleResultDTO.java +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/InitPointRuleResultDTO.java @@ -42,4 +42,6 @@ public class InitPointRuleResultDTO implements Serializable { * 已经初始化总数 */ private Integer initedTotal; -} \ No newline at end of file + + private String InitedDetail; +} diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/EpmetPointOpenFeignClient.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/EpmetPointOpenFeignClient.java index 55d2970a5e..8093ad3fee 100644 --- a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/EpmetPointOpenFeignClient.java +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/EpmetPointOpenFeignClient.java @@ -36,7 +36,7 @@ public interface EpmetPointOpenFeignClient { * @author sun **/ @PostMapping("/point/opback/initpointrule") - Result initPointRule(); + Result initPointRule(String customerId); /** * 获取小组积分 diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/fallback/EpmetPointOpenFeignClientFallback.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/fallback/EpmetPointOpenFeignClientFallback.java index a54f0b5eab..04e953edc9 100644 --- a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/fallback/EpmetPointOpenFeignClientFallback.java +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/feign/fallback/EpmetPointOpenFeignClientFallback.java @@ -10,6 +10,7 @@ import com.epmet.dto.form.GroupPointFormDTO; import com.epmet.dto.result.ResiPointDetailResultDTO; import com.epmet.feign.EpmetPointOpenFeignClient; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; /** * @Description @@ -25,8 +26,8 @@ public class EpmetPointOpenFeignClientFallback implements EpmetPointOpenFeignCli } @Override - public Result initPointRule() { - return ModuleUtils.feignConError(ServiceConstant.EPMET_POINT_SERVER, "initPointRule"); + public Result initPointRule(@RequestParam String customerId) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_POINT_SERVER, "initPointRule",customerId); } /** diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/BackDoorController.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/BackDoorController.java index cbbbbeebf5..047ae55ce6 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/BackDoorController.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/BackDoorController.java @@ -9,10 +9,7 @@ import com.epmet.dto.InitPointRuleResultDTO; import com.epmet.dto.form.PointRuleFormDTO; import com.epmet.service.PointRuleService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -44,12 +41,12 @@ public class BackDoorController { /** * desc:批量添加规则 * - * @param list + * @param customerId * @return */ - @PostMapping(value = "initpointrule") - public Result initPointRule() { - InitPointRuleResultDTO resultDTO = pointRuleService.initPointRule(); + @GetMapping(value = "initpointrule") + public Result initPointRule(@RequestParam(required = false) String customerId) { + InitPointRuleResultDTO resultDTO = pointRuleService.initPointRule(customerId); return new Result().ok(resultDTO); } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java index cd39750f34..101261fe55 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java @@ -69,7 +69,7 @@ public interface PointRuleService extends BaseService { **/ PointRuleEntity getByEventCodeAndCustomerId(String customerId,String eventCode); - InitPointRuleResultDTO initPointRule(); + InitPointRuleResultDTO initPointRule(String customerId); /** * 获取小组积分规则 @@ -79,4 +79,4 @@ public interface PointRuleService extends BaseService { * @return com.epmet.dto.result.GroupPointRuleResultDTO */ GroupPointRuleResultDTO getGroupRule(String customerId); -} \ No newline at end of file +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java index 2e31394868..de0f13ac4d 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java @@ -16,7 +16,6 @@ */ package com.epmet.service.impl; - import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.epmet.common.enu.PointUnitEnum; @@ -196,14 +195,23 @@ public class PointRuleServiceImpl extends BaseServiceImpl> customerListResult = operCrmOpenFeignClient.getAllCustomerList(); - log.info("initPointRule operCrmOpenFeignClient.getAllCustomerList result:{}",JSON.toJSONString(customerListResult)); - if (!customerListResult.success() || CollectionUtils.isEmpty(customerListResult.getData())) { - throw new RenException("获取所有客户列表失败"); + List customerDTOList = null; + if (StringUtils.isBlank(customerId)){ + Result> customerListResult = operCrmOpenFeignClient.getAllCustomerList(); + log.info("initPointRule operCrmOpenFeignClient.getAllCustomerList result:{}",JSON.toJSONString(customerListResult)); + if (!customerListResult.success() || CollectionUtils.isEmpty(customerListResult.getData())) { + throw new RenException("获取所有客户列表失败"); + } + customerDTOList = customerListResult.getData(); + }else{ + customerDTOList = new ArrayList<>(); + CustomerDTO customerDTO = new CustomerDTO(); + customerDTO.setId(customerId); + customerDTOList.add(customerDTO); } - List customerDTOList = customerListResult.getData(); + //获取默认规则列表 List ruleDefaultEntities = pointRuleDefaultDao.selectList(null); if (CollectionUtils.isEmpty(ruleDefaultEntities)) { @@ -221,7 +229,7 @@ public class PointRuleServiceImpl extends BaseServiceImpl> customerRuleMap = customerRule.stream().collect(Collectors.groupingBy(PointRuleEntity :: getCustomerId)); - customerRuleMap.forEach((customerId,ruleList) -> { + customerRuleMap.forEach((cId,ruleList) -> { if(null != ruleList){ List event = new LinkedList<>(defaultEventCodeList); //取差集,event只剩下当前客户没有的积分规则 @@ -234,7 +242,7 @@ public class PointRuleServiceImpl extends BaseServiceImpl resultPoint = epmetPointOpenFeignClient.initPointRule(); + Result resultPoint = epmetPointOpenFeignClient.initPointRule(formDTO.getCustomerId()); if (!resultPoint.success()) { throw new RenException(resultPoint.getCode(), resultPoint.getInternalMsg()); } From 2b7d44b2316339334bffae0214dee6068f18572e Mon Sep 17 00:00:00 2001 From: wxz Date: Thu, 1 Jul 2021 08:52:55 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E5=B0=86?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=840.0.14=20flyway=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E6=94=B9=E4=B8=BAselect=200;=E8=B7=B3=E8=BF=87=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V0.0.14__alter_project_location.sql | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql b/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql index 02284815d2..7a51a3f595 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql @@ -1,6 +1 @@ -ALTER TABLE `project` -ADD COLUMN `LOCATE_ADDRESS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '定位地址[立项项目指的项目发生位置,议题转的项目指的话题发生位置]' AFTER `ORG_ID_PATH`, -ADD COLUMN `LOCATE_LONGITUDE` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '定位经度' AFTER `LOCATE_ADDRESS`, -ADD COLUMN `LOCATE_DIMENSION` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '定位维度' AFTER `LOCATE_LONGITUDE`; - - +select 0; \ No newline at end of file From 8c66070b638be39e70cb64b408c9ac8083ce7e2f Mon Sep 17 00:00:00 2001 From: wxz Date: Thu, 1 Jul 2021 09:04:14 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=EF=BC=9A=E6=97=A0?= =?UTF-8?q?=E6=95=88=E7=9A=84flyway=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/db/migration/V0.0.14__alter_project_location.sql | 1 - .../src/main/resources/db/migration/V0.0.15__update_project.sql | 2 -- 2 files changed, 3 deletions(-) delete mode 100644 epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql delete mode 100644 epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.15__update_project.sql diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql b/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql deleted file mode 100644 index 7a51a3f595..0000000000 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.14__alter_project_location.sql +++ /dev/null @@ -1 +0,0 @@ -select 0; \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.15__update_project.sql b/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.15__update_project.sql deleted file mode 100644 index 66e3aed7a3..0000000000 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.15__update_project.sql +++ /dev/null @@ -1,2 +0,0 @@ -update project set locate_address = NULL,locate_longitude = NULL,locate_dimension = NULL; - From b8c9aeab539155a03d8c23a99fee10ab17d826b6 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 1 Jul 2021 10:16:19 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=8C=87=E6=95=B0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0customerId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/ScreenIndexDataMonthlyDao.java | 4 +++- .../evaluationindex/screen/ScreenIndexDataYearlyDao.java | 2 +- .../evaluationindex/screen/impl/IndexServiceImpl.java | 8 ++++++-- .../mapper/screen/ScreenIndexDataMonthlyDao.xml | 9 +++++++++ .../resources/mapper/screen/ScreenIndexDataYearlyDao.xml | 3 +++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataMonthlyDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataMonthlyDao.java index abb857fb14..976c3c85b4 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataMonthlyDao.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataMonthlyDao.java @@ -47,7 +47,9 @@ public interface ScreenIndexDataMonthlyDao{ * @author zxc * @date 2020/8/20 9:02 上午 */ - List selectMonthBarchart(@Param("agencyId")String agencyId,@Param("monthId") String monthId); + List selectMonthBarchart(@Param("agencyId")String agencyId, + @Param("monthId") String monthId, + @Param("customerId")String customerId); /** * @param subAgencyIndexRankFormDTO diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataYearlyDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataYearlyDao.java index 4300b76ea3..6735487317 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataYearlyDao.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenIndexDataYearlyDao.java @@ -40,7 +40,7 @@ public interface ScreenIndexDataYearlyDao{ * @author zxc * @date 2020/8/19 3:43 下午 */ - YearAverageIndexResultDTO selectYearAverageIndex(@Param("agencyId")String agencyId); + YearAverageIndexResultDTO selectYearAverageIndex(@Param("agencyId")String agencyId,@Param("customerId")String customerId); /** * 5、下级部门指数排行(安宁数据段用) - 年 diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java index 12c470cd25..993c590f05 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java @@ -53,7 +53,7 @@ public class IndexServiceImpl implements IndexService { @DataSource(value = DataSourceConstant.EVALUATION_INDEX,datasourceNameFromArg = true) @Override public YearAverageIndexResultDTO yearAverageIndex(YearAverageIndexFormDTO yearAverageIndexFormDTO) { - YearAverageIndexResultDTO yearAverageIndexResultDTO = screenIndexDataYearlyDao.selectYearAverageIndex(yearAverageIndexFormDTO.getAgencyId()); + YearAverageIndexResultDTO yearAverageIndexResultDTO = screenIndexDataYearlyDao.selectYearAverageIndex(yearAverageIndexFormDTO.getAgencyId(),yearAverageIndexFormDTO.getCustomerId()); if (null == yearAverageIndexResultDTO){ return new YearAverageIndexResultDTO(); } @@ -119,7 +119,9 @@ public class IndexServiceImpl implements IndexService { result.setXAxis(partyMemberLeadServiceImpl.getXPro()); } // 2. 查询近一年的指数值【包括本月】 - List monthBarchartResults = screenIndexDataMonthlyDao.selectMonthBarchart(monthBarchartFormDTO.getAgencyId(),monthBarchartFormDTO.getMonthId()); + List monthBarchartResults = screenIndexDataMonthlyDao.selectMonthBarchart(monthBarchartFormDTO.getAgencyId(), + monthBarchartFormDTO.getMonthId(), + monthBarchartFormDTO.getCustomerId()); if (monthBarchartResults.size() == NumConstant.ZERO){ for (int i = NumConstant.ZERO; i <= NumConstant.TWELVE; i++) { serviceAbilityData.add(NumConstant.ZERO_DOT_ZERO); @@ -233,8 +235,10 @@ public class IndexServiceImpl implements IndexService { subAgencyIndexRankFormDTO.setYearId(String.valueOf(yearId)); List subAgencyIndexRankResultDTOS = new ArrayList<>(); if (StringUtils.isNotEmpty(subAgencyIndexRankFormDTO.getAreaCode())){ + //area_code不为空,多客户 subAgencyIndexRankResultDTOS = screenIndexDataMonthlyDao.selectSubAgencyIndexRankNew(subAgencyIndexRankFormDTO); }else { + //单客户 subAgencyIndexRankResultDTOS = screenIndexDataMonthlyDao.selectSubAgencyIndexRank(subAgencyIndexRankFormDTO); } if (CollectionUtils.isEmpty(subAgencyIndexRankResultDTOS)){ diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml index 26c21cd8b1..f00cc4c23e 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml @@ -43,6 +43,9 @@ WHERE del_flag = '0' AND org_id = #{agencyId} + + and customer_id = #{customerId} + AND MONTH_ID <= #{monthId} @@ -64,6 +67,9 @@ AND parent_id = #{agencyId} AND year_id = #{yearId} AND ORG_TYPE != 'department' + + and customer_id = #{customerId} + ORDER BY index_total DESC LIMIT #{topNum} @@ -327,6 +333,9 @@ AND ca.AREA_CODE LIKE CONCAT(#{areaCode},'%') AND y.year_id = #{yearId} AND y.ORG_TYPE != 'department' + + and y.customer_id = #{customerId} + ORDER BY y.index_total DESC LIMIT #{topNum} diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml index 4184ecd513..ad0132dd85 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml @@ -15,6 +15,9 @@ WHERE del_flag = '0' AND org_id = #{agencyId} + + and customer_id=#{customerId} + order by year_id desc limit 1