diff --git a/sop-admin/sop-admin-front/pages/service/limitManager.html b/sop-admin/sop-admin-front/pages/service/limitManager.html index 13125cb4..5404e22e 100644 --- a/sop-admin/sop-admin-front/pages/service/limitManager.html +++ b/sop-admin/sop-admin-front/pages/service/limitManager.html @@ -47,11 +47,11 @@
- +
- +
@@ -64,19 +64,19 @@
- +
- +
- +
@@ -85,7 +85,13 @@
- +
+ +
+ + +
+
diff --git a/sop-admin/sop-admin-front/pages/service/limitManager.js b/sop-admin/sop-admin-front/pages/service/limitManager.js index 078bf456..a854efe0 100644 --- a/sop-admin/sop-admin-front/pages/service/limitManager.js +++ b/sop-admin/sop-admin-front/pages/service/limitManager.js @@ -30,10 +30,14 @@ lib.importJs('../../assets/js/routerole.js') // 监听修改提交 form.on('submit(updateWinSubmitFilter)', function(data) { - ApiUtil.post('route.update', data.field, function (resp) { + var formData = updateForm.getData(); + if (!checkUpdateForm(formData)) { + return false; + } + ApiUtil.post('route.limit.update', formData, function (resp) { layer.closeAll(); limitTable.reload(); - }) + }); return false; }); @@ -46,6 +50,30 @@ lib.importJs('../../assets/js/routerole.js') loadLimitTable(this.innerHTML); }); + function checkUpdateForm(formData) { + var type = formData.type; + if (type == 1) { + if (!/^[1-9]\d*$/.test(formData.execCountPerSecond)) { + layer.alert('每秒可处理请求数必须大于0') + return false; + } + if (!formData.limitCode || formData.limitCode.length == 0) { + layer.alert('错误码不能为空') + return false; + } + if (!formData.limitMsg || formData.limitMsg.length == 0) { + layer.alert('错误信息不能为空') + return false; + } + } else if (type == 2) { + if (!/^[1-9]\d*$/.test(formData.tokenBucketCount)) { + layer.alert('令牌桶容量必须大于0') + return false; + } + } + return true; + } + function initServiceTab() { ApiUtil.post('service.list', {}, function (resp) { @@ -98,7 +126,7 @@ lib.importJs('../../assets/js/routerole.js') , headers: {access_token: ApiUtil.getAccessToken()} , cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增 , cols: [[ - {field: 'id', title: 'id(接口名+版本号)', width: 200} + {field: 'routeId', title: 'id(接口名+版本号)', width: 200} , { field: 'type', title: '限流策略', width: 80, templet: function (row) { return LIMIT_TYPE[row.type + '']; @@ -106,14 +134,14 @@ lib.importJs('../../assets/js/routerole.js') } , { field: 'info', title: '限流信息', width: 500, templet: function (row) { - if (row.limitStatus == 0) { + if (!row.hasRecord) { return '--' } var html = []; if (row.type == 1) { html.push('每秒可处理请求数:' + row.execCountPerSecond); - html.push('错误码:' + row.limitCode); - html.push('错误信息:' + row.limitMsg); + html.push('subCode:' + row.limitCode); + html.push('subMsg:' + row.limitMsg); } else if(row.type == 2) { html.push('令牌桶容量:' + row.tokenBucketCount); } @@ -149,7 +177,7 @@ lib.importJs('../../assets/js/routerole.js') layer.open({ type: 1 ,title: '修改限流' + smTitle - ,area: ['600px', '380px'] + ,area: ['600px', '460px'] ,content: $('#updateWin') //这里content是一个DOM,注意:最好该元素要存放在body最外层,否则可能被其它的相对元素所影响 }); } diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/LimitApi.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/LimitApi.java index 0abe386c..192747c0 100644 --- a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/LimitApi.java +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/LimitApi.java @@ -18,6 +18,7 @@ import com.gitee.sop.adminserver.mapper.ConfigRouteLimitMapper; import com.gitee.sop.adminserver.service.RouteConfigService; import com.gitee.sop.adminserver.service.RouteService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -55,10 +56,12 @@ public class LimitApi { List gatewayRouteDefinitions = routeDefinitionList .stream() .map(gatewayRouteDefinition -> { + String routeId = gatewayRouteDefinition.getId(); LimitVO vo = new LimitVO(); - CopyUtil.copyProperties(gatewayRouteDefinition, vo); - ConfigRouteLimit configRouteLimit = routeLimitMap.getOrDefault(gatewayRouteDefinition.getId(), getDefaultLimit()); + ConfigRouteLimit configRouteLimit = routeLimitMap.getOrDefault(routeId, getDefaultLimit()); CopyUtil.copyPropertiesIgnoreNull(configRouteLimit, vo); + vo.setRouteId(routeId); + vo.setHasRecord(BooleanUtils.toInteger(configRouteLimit.getId() != null)); return vo; }) .collect(Collectors.toList()); diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/param/LimitParam.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/param/LimitParam.java index f9e5ea62..32233037 100644 --- a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/param/LimitParam.java +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/param/LimitParam.java @@ -14,9 +14,13 @@ import javax.validation.constraints.NotNull; @Data public class LimitParam { @ApiDocField(description = "routeId") - @NotBlank + @NotBlank(message = "routeId can not null") private String routeId; + @ApiDocField(description = "serviceId") + @NotBlank(message = "serviceId can not null") + private String serviceId; + /** 限流策略,1:漏桶策略,2:令牌桶策略, 数据库字段:type */ @ApiDocField(description = "限流策略,1:漏桶策略,2:令牌桶策略") @NotNull @@ -40,6 +44,6 @@ public class LimitParam { /** 1:开启,0关闭, 数据库字段:limit_status */ @ApiDocField(description = "1:开启,0关闭") - @NotNull + @NotNull(message = "limitStatus不能为空") private Byte limitStatus; } diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/result/LimitVO.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/result/LimitVO.java index 08ca8611..a496207d 100644 --- a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/result/LimitVO.java +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/service/result/LimitVO.java @@ -10,8 +10,11 @@ import lombok.Data; */ @Data public class LimitVO { + @ApiDocField(description = "是否存在记录") + private int hasRecord; + @ApiDocField(description = "路由id") - private String id; + private String routeId; @ApiDocField(description = "serviceId") private String serviceId; diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/entity/ConfigRouteLimit.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/entity/ConfigRouteLimit.java index 66d25175..6168695b 100644 --- a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/entity/ConfigRouteLimit.java +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/entity/ConfigRouteLimit.java @@ -29,6 +29,9 @@ public class ConfigRouteLimit { /** 路由id, 数据库字段:route_id */ private String routeId; + /** serviceId, 数据库字段:service_id */ + private String serviceId; + /** 限流策略,1:漏桶策略,2:令牌桶策略, 数据库字段:type */ private Byte type;