parent
70c373401e
commit
f53394410b
|
|
@ -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<ApiRecord> saveApiRecord(@RequestBody ApiRecord apiRecord);
|
||||
|
||||
|
||||
@PutMapping
|
||||
public R<ApiRecord> updateApiRecord(@RequestBody ApiRecord apiRecord);
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RemoteWarningCRUDFeign> {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(RemoteWarningCRUDFactory.class);
|
||||
|
||||
@Override
|
||||
public RemoteWarningCRUDFeign create(Throwable cause) {
|
||||
return new RemoteWarningCRUDFeign() {
|
||||
@Override
|
||||
public R<ApiRecord> saveApiRecord(ApiRecord apiRecord) {
|
||||
log.error("调用预警服务添加接口失败----"+apiRecord.getApiName());
|
||||
return R.fail();
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<ApiRecord> updateApiRecord(ApiRecord apiRecord) {
|
||||
log.error("调用预警服务修改接口失败----"+apiRecord.getApiName());
|
||||
return R.fail();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -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" ;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -17,4 +17,12 @@
|
|||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.xjs</groupId>
|
||||
<artifactId>xjs-business-common</artifactId>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -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<ApiRecord> saveApiRecord(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public R<ApiRecord> updateApiRecord(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.updateApiRecord(apiRecord)? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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<ApiRecord>()
|
||||
.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<ApiRecord>()
|
||||
.eq("api_name", apiRecord.getApiName()));
|
||||
return name == 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue