31 changed files with 638 additions and 65 deletions
			
			
		| @ -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; | |||
| 
 | |||
| } | |||
| @ -0,0 +1,27 @@ | |||
| package com.epmet.dto.result; | |||
| 
 | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| 
 | |||
| @Data | |||
| @AllArgsConstructor | |||
| @NoArgsConstructor | |||
| public class CorsConfigResultDTO { | |||
| 
 | |||
|     private String id; | |||
|     /** | |||
|      * 首部类型 | |||
|      */ | |||
|     private String headerType; | |||
| 
 | |||
|     /** | |||
|      * 首部值 | |||
|      */ | |||
|     private String headerValue; | |||
| 
 | |||
|     /** | |||
|      * 首部备注 | |||
|      */ | |||
|     private String comment; | |||
| } | |||
| @ -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<CorsConfigResultDTO>> list(); | |||
| } | |||
| @ -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<CorsConfigResultDTO>> list() { | |||
|         return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "list", null); | |||
|     } | |||
| } | |||
| @ -0,0 +1,70 @@ | |||
| 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.*; | |||
| 
 | |||
| 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<CorsConfigResultDTO>> list() { | |||
|         List<CorsConfigResultDTO> list = corsConfigService.list(); | |||
|         return new Result<List<CorsConfigResultDTO>>().ok(list); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description 添加跨域配置 | |||
|      * @return | |||
|      * @author wxz | |||
|      * @date 2021.06.25 13:51 | |||
|     */ | |||
|     @PostMapping("/add") | |||
|     public Result<CorsConfigResultDTO> addConfig(@RequestBody CorsConfigFormDTO input) { | |||
|         ValidatorUtils.validateEntity(input, CorsConfigFormDTO.Add.class); | |||
|         CorsConfigResultDTO data = corsConfigService.addConfig(input.getHeaderType(), input.getHeaderValue(), input.getComment()); | |||
|         return new Result<CorsConfigResultDTO>().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<>(); | |||
|     } | |||
| 
 | |||
| } | |||
| @ -0,0 +1,33 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * 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. | |||
|  * <p> | |||
|  * 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. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| 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<CorsConfigEntity> { | |||
| 	 | |||
| } | |||
| @ -0,0 +1,56 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * 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. | |||
|  * <p> | |||
|  * 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. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| 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; | |||
| 
 | |||
| 	/** | |||
| 	 * 说明 | |||
| 	 */ | |||
| 	private String comment; | |||
| 
 | |||
| } | |||
| @ -0,0 +1,20 @@ | |||
| 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<CorsConfigResultDTO> list(); | |||
| 
 | |||
|     CorsConfigResultDTO addConfig(String headerType, String headerValue, String comment); | |||
| 
 | |||
|     void deleteById(String configId); | |||
| 
 | |||
|     void updateById(String configId, String headerType, String headerValue, String comment); | |||
| } | |||
| @ -0,0 +1,110 @@ | |||
| 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; | |||
| 
 | |||
| /** | |||
|  * @Description 跨域配置 | |||
|  * @author wxz | |||
|  * @date 2021.06.25 09:53:57 | |||
| */ | |||
| @Service | |||
| public class CorsConfigServiceImpl implements CorsConfigService { | |||
| 
 | |||
|     @Autowired | |||
|     private CorsConfigDao corsConfigDao; | |||
| 
 | |||
|     @Autowired | |||
|     private RedisTemplate redisTemplate; | |||
| 
 | |||
|     private Logger logger = LoggerFactory.getLogger(getClass()); | |||
| 
 | |||
|     /** | |||
|      * @Description 查询配置列表 | |||
|      * @return | |||
|      * @author wxz | |||
|      * @date 2021.06.25 09:58 | |||
|     */ | |||
|     @Override | |||
|     public List<CorsConfigResultDTO> list() { | |||
|         LambdaQueryWrapper<CorsConfigEntity> conditions = new LambdaQueryWrapper<>(); | |||
|         return ConvertUtils.sourceToTarget(corsConfigDao.selectList(conditions), CorsConfigResultDTO.class); | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     public CorsConfigResultDTO addConfig(String headerType, String headerValue, String comment) { | |||
|         LambdaQueryWrapper<CorsConfigEntity> 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)); | |||
|         } | |||
|     } | |||
| } | |||
| @ -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='跨域配置表' | |||
| @ -0,0 +1,20 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| 
 | |||
| <mapper namespace="com.epmet.dao.CorsConfigDao"> | |||
| 
 | |||
|     <resultMap type="com.epmet.entity.CorsConfigEntity" id="corsConfigMap"> | |||
|         <result property="id" column="ID"/> | |||
|         <result property="headerType" column="HEADER_TYPE"/> | |||
|         <result property="headerValue" column="HEADER_VALUE"/> | |||
|         <result property="comment" column="COMMENT"/> | |||
|         <result property="delFlag" column="DEL_FLAG"/> | |||
|         <result property="revision" column="REVISION"/> | |||
|         <result property="createdBy" column="CREATED_BY"/> | |||
|         <result property="createdTime" column="CREATED_TIME"/> | |||
|         <result property="updatedBy" column="UPDATED_BY"/> | |||
|         <result property="updatedTime" column="UPDATED_TIME"/> | |||
|     </resultMap> | |||
| 
 | |||
| 
 | |||
| </mapper> | |||
| @ -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<String> accessControlAllowOrigins; | |||
| 
 | |||
| } | |||
| @ -1,6 +0,0 @@ | |||
| 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`; | |||
| 
 | |||
| 
 | |||
| @ -1,2 +0,0 @@ | |||
| update project set locate_address = NULL,locate_longitude = NULL,locate_dimension = NULL; | |||
| 
 | |||
					Loading…
					
					
				
		Reference in new issue