From f53394410b6e2e2c2f2dd2eecdaf0148cc7a57da Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Fri, 31 Dec 2021 22:58:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9A1=E3=80=81=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E6=9C=8D=E5=8A=A1=E5=AE=9E=E7=8E=B0=E5=AF=B9=E5=A4=96?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E8=B0=83=E7=94=A8=E6=B7=BB=E5=8A=A0=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8E=A5=E5=8F=A3=20=20=20=20=20=202=E3=80=81?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=A2=84=E8=AD=A6=E6=9C=8D=E5=8A=A1=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E8=80=85=E6=8E=A5=E5=8F=A3=20=20=20=20=20=203?= =?UTF-8?q?=E3=80=81=E9=A2=84=E8=AD=A6=E6=9C=8D=E5=8A=A1=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=85=AC=E5=85=B1=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../warning/RemoteWarningCRUDFeign.java | 30 +++++++ .../business/warning/domain/ApiRecord.java | 89 +++++++++++++++++++ .../factory/RemoteWarningCRUDFactory.java | 37 ++++++++ .../core/constant/ServiceNameConstants.java | 9 ++ .../java/com/xjs/common/aop/ApiLogAspect.java | 17 ++++ xjs-business/xjs-business-warning/pom.xml | 8 ++ .../xjs/controller/ApiWarningController.java | 37 ++++++++ .../main/java/com/xjs/domain/ApiRecord.java | 32 +++++-- .../com/xjs/service/ApiWarningService.java | 26 ++++++ .../service/impl/ApiWarningServiceImpl.java | 45 ++++++++++ 10 files changed, 322 insertions(+), 8 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/ApiRecord.java create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/service/ApiWarningService.java create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java new file mode 100644 index 00000000..b6d3184e --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java @@ -0,0 +1,30 @@ +package com.xjs.business.warning; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.xjs.business.warning.domain.ApiRecord; +import com.xjs.business.warning.factory.RemoteWarningCRUDFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @author xiejs + * @desc 远程rpc调用预警服务crud接口 + * @create 2021-12-31 + */ +@FeignClient(contextId = "remoteWarningCRUDFeign", + value = ServiceNameConstants.BUSINESS_WARNING_SERVICE, + fallbackFactory = RemoteWarningCRUDFactory.class) +public interface RemoteWarningCRUDFeign { + + @PostMapping + public R saveApiRecord(@RequestBody ApiRecord apiRecord); + + + @PutMapping + public R updateApiRecord(@RequestBody ApiRecord apiRecord); + + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/ApiRecord.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/ApiRecord.java new file mode 100644 index 00000000..8c127be9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/domain/ApiRecord.java @@ -0,0 +1,89 @@ +package com.xjs.business.warning.domain; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author xiejs + * @desc api记录实体类 + * @create 2021-12-31 + */ +public class ApiRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 主键id */ + private Long id; + + /** api名称 */ + private String apiName; + + /** api地址 */ + private String apiUrl; + + /** api总请求次数 */ + private Long totalCount; + + /** api限制请求次数每天 */ + private Long limitCount; + + private Date createTime; + + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getApiName() { + return apiName; + } + + public void setApiName(String apiName) { + this.apiName = apiName; + } + + public String getApiUrl() { + return apiUrl; + } + + public void setApiUrl(String apiUrl) { + this.apiUrl = apiUrl; + } + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public Long getLimitCount() { + return limitCount; + } + + public void setLimitCount(Long limitCount) { + this.limitCount = limitCount; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java new file mode 100644 index 00000000..f9aafdcd --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java @@ -0,0 +1,37 @@ +package com.xjs.business.warning.factory; + +import com.ruoyi.common.core.domain.R; +import com.xjs.business.warning.RemoteWarningCRUDFeign; +import com.xjs.business.warning.domain.ApiRecord; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author xiejs + * @desc 调用预警服务降级处理 + * @create 2021-12-31 + */ +@Component +public class RemoteWarningCRUDFactory implements FallbackFactory { + + private static final Logger log = LoggerFactory.getLogger(RemoteWarningCRUDFactory.class); + + @Override + public RemoteWarningCRUDFeign create(Throwable cause) { + return new RemoteWarningCRUDFeign() { + @Override + public R saveApiRecord(ApiRecord apiRecord) { + log.error("调用预警服务添加接口失败----"+apiRecord.getApiName()); + return R.fail(); + } + + @Override + public R updateApiRecord(ApiRecord apiRecord) { + log.error("调用预警服务修改接口失败----"+apiRecord.getApiName()); + return R.fail(); + } + }; + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java index a93c44c0..7cf9be94 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java @@ -26,4 +26,13 @@ public class ServiceNameConstants * 第三方api业务服务的serviceid */ public static final String BUSINESS_OPENAPI_SERVICE= "xjs-openapi" ; + + + /** + * 预警服务的serviceid + */ + public static final String BUSINESS_WARNING_SERVICE= "xjs-warning" ; + + + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java index 76fcb0f2..e8340b4a 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java @@ -1,12 +1,14 @@ package com.xjs.common.aop; import cn.hutool.core.date.DateUtil; +import com.xjs.business.warning.RemoteWarningCRUDFeign; import com.xjs.enums.StatusEnum; import com.xjs.log.mapper.ApiLogMapper; import lombok.extern.log4j.Log4j2; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -27,6 +29,10 @@ public class ApiLogAspect { @Resource private ApiLogMapper apiLogMapper; + //用来调用预警,记录预警信息 + @Autowired + private RemoteWarningCRUDFeign remoteWarningCRUDFeign; + /** * 声明AOP签名 */ @@ -45,6 +51,17 @@ public class ApiLogAspect { LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime(); long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2); log.info("调用接口耗费时间:{}ms", between); + + //执行预警切入逻辑 + + + + + + + + + return obj; } catch (Throwable e) { e.printStackTrace(); diff --git a/xjs-business/xjs-business-warning/pom.xml b/xjs-business/xjs-business-warning/pom.xml index 18244d7a..35e2b3fd 100644 --- a/xjs-business/xjs-business-warning/pom.xml +++ b/xjs-business/xjs-business-warning/pom.xml @@ -17,4 +17,12 @@ 8 + + + com.xjs + xjs-business-common + 3.3.0 + + + \ No newline at end of file diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java new file mode 100644 index 00000000..e7dab5ec --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java @@ -0,0 +1,37 @@ +package com.xjs.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.controller.BaseController; +import com.xjs.domain.ApiRecord; +import com.xjs.service.ApiWarningService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author xiejs + * @desc api预警控制器 + * @create 2021-12-31 + */ +@RestController +@RequestMapping("apiwarning") +public class ApiWarningController extends BaseController { + + @Autowired + private ApiWarningService apiWarningService; + + /** + * 保存 apiRecord + * @param apiRecord api记录 + * @return apiRecord + */ + @PostMapping + public R saveApiRecord(@RequestBody ApiRecord apiRecord) { + return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail(); + } + + @PutMapping + public R updateApiRecord(@RequestBody ApiRecord apiRecord) { + return apiWarningService.updateApiRecord(apiRecord)? R.ok() : R.fail(); + } + +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/ApiRecord.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/ApiRecord.java index caaee92d..7851cb74 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/ApiRecord.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/ApiRecord.java @@ -11,7 +11,7 @@ import java.util.Date; /** * @author xiejs - * @desc api记录实体类 + * @desc api记录实体类 * @create 2021-12-31 */ @TableName("api_record") @@ -20,30 +20,46 @@ public class ApiRecord implements Serializable { private static final long serialVersionUID = 1L; - /** 主键id */ + /** + * 主键id + */ private Long id; - /** api名称 */ + /** + * api名称 + */ @Excel(name = "api名称") private String apiName; - /** api地址 */ + /** + * api地址 + */ @Excel(name = "api地址") private String apiUrl; - /** api总请求次数 */ + /** + * 请求耗费时间 + */ + @Excel(name = "请求耗费时间") + private Integer requestTime; + + /** + * api总请求次数 + */ @Excel(name = "api总请求次数") private Long totalCount; - /** api限制请求次数每天 */ + /** + * api限制请求次数每天 + */ @Excel(name = "api限制请求次数每天") private Long limitCount; - @Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT) private Date createTime; - @Excel(name = "修改时间",dateFormat = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "修改时间", dateFormat = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/ApiWarningService.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/ApiWarningService.java new file mode 100644 index 00000000..aa01085b --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/ApiWarningService.java @@ -0,0 +1,26 @@ +package com.xjs.service; + +import com.xjs.domain.ApiRecord; + +/** + * @author xiejs + * @desc + * @create 2021-12-31 + */ +public interface ApiWarningService { + + /** + * 保存apirecord 当存在相同api时,不允许保存 + * @param apiRecord apiRecord + * @return apiRecord + */ + Boolean saveApiRecord(ApiRecord apiRecord); + + + /** + * 修改 根据url名称修改api调用次数 + * @param apiRecord apiRecord + * @return apiRecord + */ + boolean updateApiRecord(ApiRecord apiRecord); +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java new file mode 100644 index 00000000..412d0fd7 --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java @@ -0,0 +1,45 @@ +package com.xjs.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.xjs.domain.ApiRecord; +import com.xjs.exception.BusinessException; +import com.xjs.mapper.ApiRecordMapper; +import com.xjs.service.ApiWarningService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @author xiejs + * @desc api预警service实现类 + * @create 2021-12-31 + */ +@Service +public class ApiWarningServiceImpl implements ApiWarningService { + + @Resource + private ApiRecordMapper apiRecordMapper; + + @Override + public Boolean saveApiRecord(ApiRecord apiRecord) { + ApiRecord apiName = apiRecordMapper + .selectOne(new QueryWrapper() + .eq("api_name", apiRecord.getApiName())); + if (Objects.nonNull(apiName)) { + throw new BusinessException("数据库存在相同url名称,保存失败!---" + apiRecord.getApiUrl()); + } else { + apiRecordMapper.insert(apiRecord); + return true; + } + } + + @Override + public boolean updateApiRecord(ApiRecord apiRecord) { + int name = apiRecordMapper.update(apiRecord, new QueryWrapper() + .eq("api_name", apiRecord.getApiName())); + return name == 1; + } + + +}