1、回调类中改为属于策略一部分无action;

2、添加分组复用域配置新增和删除接口;只有属于分组复用的业务类型在新增MAAT规则时才能只不填写域配置;
This commit is contained in:
zhangdongxu
2018-08-23 20:48:49 +08:00
parent 2789f3ebf2
commit 28f5e0ba36
12 changed files with 1488 additions and 209 deletions

View File

@@ -132,7 +132,8 @@ public class CompileVal {
}
}
}
//只有分组复用的业务类型域可以不埴写其他的maat配置至少填写一个域配置
Boolean hasRegionFlag = false;
List<Long> regionGroupIdList = new ArrayList<Long>();// 所有域配置中groupId的集合,不重复
List<NumRegion> numRegionList = configCompile.getNumRegionList();
if (numRegionList == null) {
@@ -142,6 +143,7 @@ public class CompileVal {
RestBusinessCode.NumRegionIsNull.getValue());
}
if (numRegionList.size() > 0) {
hasRegionFlag = true;
for (NumRegion numRegion : numRegionList) {
// if (configCompile.getIsValid() != 0 &&
// !regionGroupIdList.contains(numRegion.getGroupId())) {
@@ -194,6 +196,7 @@ public class CompileVal {
RestBusinessCode.StrRegionIsNull.getValue());
}
if (strRegionList != null && strRegionList.size() > 0) {
hasRegionFlag = true;
for (StrRegion strRegion : strRegionList) {
// if (configCompile.getIsValid() != 0 &&
// !regionGroupIdList.contains(strRegion.getGroupId())) {
@@ -248,6 +251,7 @@ public class CompileVal {
RestBusinessCode.IpRegionIsNull.getValue());
}
if (ipRegionList != null && ipRegionList.size() > 0) {
hasRegionFlag = true;
for (IpRegion ipRegion : ipRegionList) {
// if (configCompile.getIsValid() != 0 &&
// !regionGroupIdList.contains(ipRegion.getGroupId())) {
@@ -295,6 +299,7 @@ public class CompileVal {
// 验证
if (digestRegionList != null && digestRegionList.size() > 0) {
hasRegionFlag = true;
for (DigestRegion digestRegion : digestRegionList) {
// 不验证表名和业务类型是否对应
@@ -335,6 +340,7 @@ public class CompileVal {
List<IpRegion> ipClientRangeList = configCompile.getIpClientRangeList();
if (ipClientRangeList != null && ipClientRangeList.size() > 0) {
hasRegionFlag = true;
for (IpRegion ipRegion : ipClientRangeList) {
// if (configCompile.getIsValid() != 0 &&
// !regionGroupIdList.contains(ipRegion.getGroupId())) {
@@ -376,6 +382,10 @@ public class CompileVal {
}
}
}
if (!hasRegionFlag&&!ServiceAndRDBIndexReal.serviceIsReuse(configCompile.getService())) {
throw new RestServiceException("配置id为" + configCompile.getCompileId() + "的业务类型属于分组复用,域配置信息不能全为空",RestBusinessCode.RegionListIsNull.getValue());
}
}
/**

View File

@@ -0,0 +1,551 @@
package com.nis.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.nis.domain.restful.GroupReuse;
import com.nis.domain.restful.IpRegion;
import com.nis.domain.restful.NumRegion;
import com.nis.domain.restful.StrRegion;
import com.nis.restful.RestBusinessCode;
import com.nis.restful.RestServiceException;
import com.nis.restful.ServiceRuntimeException;
import com.nis.web.service.restful.ConfigSourcesService;
public class GroupReuseVal {
public static void valGroupReuse(List<GroupReuse> groupReuseList,
Boolean isUpdate) throws Exception {
for (GroupReuse groupReuse : groupReuseList) {
Integer service = groupReuse.getService();
if (StringUtil.isEmpty(service)
|| !ServiceAndRDBIndexReal.serviceIsReuse(service)) {
throw new RestServiceException("server为空或" + service
+ "或不属于分组复用的业务类型",
RestBusinessCode.ServiceIsNullOrNotReuse.getValue());
}
Map<String, List<String>> regTabNameMap = ServiceAndRDBIndexReal
.getServiceGroupReuseMap(service);
// 验证各类型域配置
Boolean hasRegionFlag = false;
if (regTabNameMap.containsKey("numRegion")
&& !StringUtil.isEmpty(groupReuse.getNumRegionList())
&& groupReuse.getNumRegionList().size() > 0) {
hasRegionFlag = true;
List<NumRegion> numRegionList = groupReuse.getNumRegionList();
for (NumRegion numRegion : numRegionList) {
if (!StringUtil.isEmpty(numRegion.getTableName())
&& !CompileVal.type2TableNameIsOk(service,
numRegion.getTableName())) {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中的regionId为"
+ numRegion.getRegionId()
+ "的域配置tableName与业务类型不一致",
RestBusinessCode.TableNameUnmatchService
.getValue());
}
if (!isUpdate && numRegion.getIsValid() != 1) {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中的regionId为"
+ numRegion.getRegionId() + "的域配置在添加时不能为无效",
RestBusinessCode.IsValidIsT.getValue());
}
if (isUpdate && numRegion.getIsValid() != 0) {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中的regionId为"
+ numRegion.getRegionId() + "的域配置在修改时不能为有效",
RestBusinessCode.IsValidIsF.getValue());
}
if (!isUpdate && Constants.BASE_VALIDATE) {
valNumRegion(numRegion, service);
}
if (!isUpdate && Constants.SERVICE_VALIDATE) {
serviceNumRegionVal(numRegion, service);
}
}
} else if (regTabNameMap.containsKey("strRegion")
&& !StringUtil.isEmpty(groupReuse.getStrRegionList())
&& groupReuse.getStrRegionList().size() > 0) {
hasRegionFlag = true;
List<StrRegion> strRegionList = groupReuse.getStrRegionList();
for (StrRegion strRegion : strRegionList) {
// if (groupReuse.getIsValid() != 0 &&
// !regionGroupIdList.contains(strRegion.getGroupId()))
// {
if (!StringUtil.isEmpty(strRegion.getTableName())
&& !CompileVal.type2TableNameIsOk(service,
strRegion.getTableName())) {
throw new RestServiceException("配置id为" + service
+ "的配置中strRegionList中的regionId为"
+ strRegion.getRegionId()
+ "的域配置tableName与业务类型不一致",
RestBusinessCode.TableNameUnmatchService
.getValue());
}
if (!isUpdate && strRegion.getIsValid() != 1) {
throw new RestServiceException("配置id为" + service
+ "的配置中strRegionList中的regionId为"
+ strRegion.getRegionId() + "的域配置在添加时不能为无效",
RestBusinessCode.IsValidIsT.getValue());
}
if (isUpdate && strRegion.getIsValid() != 0) {
throw new RestServiceException("配置id为" + service
+ "的配置中strRegionList中的regionId为"
+ strRegion.getRegionId() + "的域配置在修改时不能为有效",
RestBusinessCode.IsValidIsF.getValue());
}
if (!isUpdate && Constants.BASE_VALIDATE) {
valStrRegion(strRegion, service,
ConfigSourcesService.isStrStrongRegion(
strRegion.getTableName(), service));
}
if (!isUpdate && Constants.SERVICE_VALIDATE) {
serviceStrRegionVal(strRegion, service,
ConfigSourcesService.isStrStrongRegion(
strRegion.getTableName(), service));
}
}
} else if (regTabNameMap.containsKey("ipRegion")
&& !StringUtil.isEmpty(groupReuse.getIpRegionList())
&& groupReuse.getIpRegionList().size() > 0) {
hasRegionFlag = true;
List<IpRegion> ipRegionList = groupReuse.getIpRegionList();
for (IpRegion ipRegion : ipRegionList) {
// if (groupReuse.getIsValid() != 0 &&
// !regionGroupIdList.contains(ipRegion.getGroupId())) {
if (!StringUtil.isEmpty(ipRegion.getTableName())
&& !CompileVal.type2TableNameIsOk(service,
ipRegion.getTableName())) {
throw new RestServiceException("配置id为" + service
+ "的配置中ipRegionList中的regionId为"
+ ipRegion.getRegionId()
+ "的域配置tableName与业务类型不一致",
RestBusinessCode.TableNameUnmatchService
.getValue());
}
if (!isUpdate
&& (null == ipRegion.getIsValid() || ipRegion
.getIsValid() != 1)) {
throw new RestServiceException("配置id为" + service
+ "的配置中ipRegionList中的regionId为"
+ ipRegion.getRegionId() + "的域配置在添加时不能为无效",
RestBusinessCode.IsValidIsT.getValue());
}
if (isUpdate
&& (null == ipRegion.getIsValid() || ipRegion
.getIsValid() != 0)) {
throw new RestServiceException("service为" + service
+ "的配置中ipRegionList中的regionId为"
+ ipRegion.getRegionId() + "的域配置在修改时不能为有效",
RestBusinessCode.IsValidIsF.getValue());
}
if (!isUpdate && Constants.BASE_VALIDATE) {
valIpRegion(ipRegion, service);
}
if (!isUpdate && Constants.SERVICE_VALIDATE) {
serviceIpRegionVal(ipRegion, service, "ipRegionList");
}
}
}
if (hasRegionFlag) {
// 所有的域类型都不包括,可能是配置文件配错了
throw new ServiceRuntimeException("service为" + service + ""
+ RestBusinessCode.ReuseRegionIsNull.getErrorReason(),
RestBusinessCode.ReuseRegionIsNull.getValue());
}
}
}
public static void valIpRegion(IpRegion ipRegion, Integer service) {
Long regionId = ipRegion.getRegionId();
if (null == regionId) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置的regionId不能为空",
RestBusinessCode.RegionIdIsNull.getValue());
}
if (null == ipRegion.getGroupId()) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置groupId不能为空",
RestBusinessCode.RegionsGroupIdIsNull.getValue());
}
if (null == ipRegion.getAddrType()) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置addrType不能为空",
RestBusinessCode.AddrTypeIsNull.getValue());
}
if (null == ipRegion.getSrcIp() || ipRegion.getSrcIp().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置srcIp不能为空",
RestBusinessCode.SrcIpIsNull.getValue());
}
if (null == ipRegion.getMaskSrcIp()
|| ipRegion.getMaskSrcIp().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置maskSrcIp不能为空",
RestBusinessCode.MaskSrcIpIsNull.getValue());
}
if (null == ipRegion.getSrcPort() || ipRegion.getSrcPort().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置srcPort不能为空",
RestBusinessCode.SrcPortIsNull.getValue());
}
if (null == ipRegion.getMaskSrcPort()
|| ipRegion.getMaskSrcPort().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置maskSrcPort不能为空",
RestBusinessCode.MaskSrcPortIsNull.getValue());
}
if (null == ipRegion.getDstIp() || ipRegion.getDstIp().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置dstIp不能为空",
RestBusinessCode.DstIpIsNull.getValue());
}
if (null == ipRegion.getMaskDstIp()
|| ipRegion.getMaskDstIp().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置maskDstIp不能为空",
RestBusinessCode.MaskDstIpIsNull.getValue());
}
if (null == ipRegion.getDstPort() || ipRegion.getDstPort().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置dstPort不能为空",
RestBusinessCode.DstPortIsNull.getValue());
}
if (null == ipRegion.getMaskDstPort()
|| ipRegion.getMaskDstPort().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置maskDstPort不能为空",
RestBusinessCode.MaskDstPortIsNull.getValue());
}
if (null == ipRegion.getProtocol()) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置protocol不能为空",
RestBusinessCode.ProtocolIsNull.getValue());
}
if (null == ipRegion.getDirection()) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置direction不能为空",
RestBusinessCode.DirectionIsNull.getValue());
}
if (null == ipRegion.getIsValid()) {
throw new RestServiceException("service为" + service
+ "的中的ip类域配置id为" + regionId + "的配置isValid不能为空",
RestBusinessCode.IsValidIsNull.getValue());
}
}
public static void valNumRegion(NumRegion numRegion, Integer service)
throws Exception {
Long regionId = numRegion.getRegionId();
if (null == regionId) {
throw new RestServiceException("service为" + service
+ "的中的数值类域配置的regionId不能为空",
RestBusinessCode.RegionIdIsNull.getValue());
}
if (null == numRegion.getGroupId()) {
throw new RestServiceException("service为" + service
+ "的中的数值类域配置id为" + regionId + "的配置groupId不能为空",
RestBusinessCode.RegionsGroupIdIsNull.getValue());
}
if (null == numRegion.getLowBoundary()) {
throw new RestServiceException("service为" + service
+ "的中的数值类域配置id为" + regionId + "的配置lowBoundary不能为空",
RestBusinessCode.LowBoundaryIsNull.getValue());
}
if (null == numRegion.getUpBoundary()) {
throw new RestServiceException("service为" + service
+ "的中的数值类域配置id为" + regionId + "的配置upBoundary不能为空",
RestBusinessCode.UpBoundaryIsNull.getValue());
}
}
public static void valStrRegion(StrRegion strRegion, Integer service,
boolean isDirtrict) throws Exception {
Long regionId = strRegion.getRegionId();
if (null == regionId) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置的regionId不能为空",
RestBusinessCode.RegionIdIsNull.getValue());
}
if (null == strRegion.getGroupId()) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置groupId不能为空",
RestBusinessCode.RegionsGroupIdIsNull.getValue());
}
if (isDirtrict
&& (null == strRegion.getDistrict() || strRegion.getDistrict()
.equals(""))) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置district不能为空",
RestBusinessCode.DistrictIsNull.getValue());
}
if (null == strRegion.getKeywords()
|| strRegion.getKeywords().equals("")) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置keywords不能为空",
RestBusinessCode.KeywordsIsNull.getValue());
}
if (null == strRegion.getExprType()) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置exprType不能为空",
RestBusinessCode.ExprTypeIsNull.getValue());
}
if (null == strRegion.getMatchMethod()) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置matchMethod不能为空",
RestBusinessCode.MatchMethodIsNull.getValue());
}
if (null == strRegion.getIsHexbin()) {
throw new RestServiceException("service为" + service
+ "的中的字符串类域配置id为" + regionId + "的配置isHexbin不能为空",
RestBusinessCode.MatchMethodIsNull.getValue());
}
}
private static void validateIpAndMask(IpRegion ipRegion, Integer service,
String listName) throws Exception {
// 源IP信息和目的IP信息格式s为IPV4或IPV6
if (ipRegion.getAddrType().intValue() == 4
|| ipRegion.getAddrType().intValue() == 6) {
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getSrcIp(),
ipRegion.getAddrType())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskSrcIp(),
ipRegion.getAddrType())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskSrcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getDstIp(),
ipRegion.getAddrType())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置dstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskDstIp(),
ipRegion.getAddrType())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskDstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
} else if (ipRegion.getAddrType().intValue() == 46) {// 4OVER6:源IP信息格式为IPV4、目的IP信息格式IPV6
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getSrcIp(), 4)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskSrcIp(), 4)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskSrcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getDstIp(), 6)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置dstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskDstIp(), 6)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskDstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
} else if (ipRegion.getAddrType().intValue() == 64) {// 6OVER4:源IP信息格式为IPV6、目的IP信息格式IPV4
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getSrcIp(), 6)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskSrcIp(), 6)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskSrcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getDstIp(), 4)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置dstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskDstIp(), 4)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskDstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
} else if (ipRegion.getAddrType().intValue() == 10) {// all:符合IP格式即可
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getSrcIp(), null)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskSrcIp(), null)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskSrcIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getDstIp(), null)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置dstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
if (!BasicProvingUtil.isIpOrIpMask(ipRegion.getMaskDstIp(), null)) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskDstIp的格式不正确或与addrType不一致",
RestBusinessCode.IPUnMatchAddrType.getValue());
}
}
}
public static void serviceIpRegionVal(IpRegion ipRegion, Integer service,
String listName) throws Exception {
validateIpAndMask(ipRegion, service, listName);
if (!BasicProvingUtil.isPortOrPortMask(ipRegion.getSrcPort())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcPort的格式不正确",
RestBusinessCode.PortIsNotVal.getValue());
}
if (!BasicProvingUtil.isPortOrPortMask(ipRegion.getMaskSrcPort())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskSrcPort的格式不正确",
RestBusinessCode.PortIsNotVal.getValue());
}
if (!BasicProvingUtil.isPortOrPortMask(ipRegion.getDstPort())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置dstPort的格式不正确",
RestBusinessCode.PortIsNotVal.getValue());
}
if (!BasicProvingUtil.isPortOrPortMask(ipRegion.getMaskDstPort())) {
// if (!BasicProvingUtil.isIntType(ipRegion.getMaskDstPort())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置maskDstPort的格式不正确",
RestBusinessCode.PortIsNotVal.getValue());
}
if (ipRegion.getSrcIp().equals(ipRegion.getDstIp())) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置srcIp和dstIp不能相同",
RestBusinessCode.SrcIpEQDstIp.getValue());
}
if (ipRegion.getDirection() != 1 && ipRegion.getDirection() != 0) {
throw new RestServiceException("service为" + service + "的配置中"
+ listName + "中regionId为" + ipRegion.getRegionId()
+ "的域配置direction的值不正确,只能是0或1",
RestBusinessCode.DirectionIsWrongRange.getValue());
}
// zdx protocol验证
// if (ipRegion.getTableName().toLowerCase().equals("dj_ip_port")) {
// if (ipRegion.getProtocol() < 0 || ipRegion.getProtocol() > 255) {
// return "service为" + service + "的配置中"+listName+"中regionId为" +
// ipRegion.getRegionId()
// + "的域配置tableName为dj_ip_port时,protocol的取值范围只能是0-255";
// }
// } else {
// if (ipRegion.getProtocol() != 0) {
// return "service为" + service + "的配置中"+listName+"中regionId为" +
// ipRegion.getRegionId() + "的域配置tableName为"
// + ipRegion.getTableName() + "时,protocol的值只能是0";
// }
//
// }
}
public static void serviceNumRegionVal(NumRegion numRegion, Integer service)
throws Exception {
Long lowBoundary = numRegion.getLowBoundary();
Long upBoundary = numRegion.getUpBoundary();
if (lowBoundary <= upBoundary) {
if (lowBoundary > 4294967295l || lowBoundary < 0l) {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中regionId为"
+ numRegion.getRegionId()
+ "的域配置lowBoundary的值不能大于2的32次方减一(4294967295)或者小于0",
RestBusinessCode.LowBoundaryIsWrongRange.getValue());
}
if (upBoundary > 4294967295l || upBoundary < 0l) {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中regionId为"
+ numRegion.getRegionId()
+ "的域配置upBoundary的值不能大于2的32次方减一(4294967295)或者小于0",
RestBusinessCode.UpBoundaryIsWrongRange.getValue());
}
} else {
throw new RestServiceException("service为" + service
+ "的配置中numRegionList中regionId为" + numRegion.getRegionId()
+ "的域配置lowBoundary的值大于upBoundary,应该是小于或等于",
RestBusinessCode.LowBoundaryGTUpBoundary.getValue());
}
}
public static void serviceStrRegionVal(StrRegion strRegion,
Integer service, boolean isDirtrict) throws Exception {
Integer exprType = strRegion.getExprType();
Integer matchMethod = strRegion.getMatchMethod();
Integer isHexbin = strRegion.getIsHexbin();
if (exprType != 0 && exprType != 1) {
throw new RestServiceException("service为" + service
+ "的配置中strRegionList中regionId为" + strRegion.getRegionId()
+ "的域配置exprType的值只能是0(无表达式)或者1(与表达式)",
RestBusinessCode.ExprTypeIsWrongRange.getValue());
}
if (matchMethod != 0 && matchMethod != 1 && matchMethod != 2
&& matchMethod != 3) {
throw new RestServiceException("service为" + service
+ "的配置中strRegionList中regionId为" + strRegion.getRegionId()
+ "的域配置matchMethod的值只能是0(子串匹配),1(右匹配),2(左匹配),3(完全匹配)",
RestBusinessCode.MatchMethodIsWrongRange.getValue());
}
if (isHexbin != 0 && isHexbin != 1 && isHexbin != 2) {
throw new RestServiceException(
"service为"
+ service
+ "的配置中strRegionList中regionId为"
+ strRegion.getRegionId()
+ "的域配置isHexbin的值只能是0(大小写不敏感且非HEX)或者1(HEX)或者2(大小写敏感且非HEX)",
RestBusinessCode.IsHexbinIsWrongRange.getValue());
}
// strRegProhibitConfigWord(strRegion,service);
}
}

View File

@@ -26,8 +26,9 @@ public class ServiceAndRDBIndexReal {
private static Logger logger = LoggerFactory.getLogger(ServiceAndRDBIndexReal.class);
/**
* 记录哪些service可以被分组复用(只有maat类配置可以被分组复用)
* Map<Service,Map<regionName,List<tableName>>
*/
private static Set<Integer> serviceRepeatedRealSet = new HashSet<Integer>();
private static Map<Integer,Map<String, List<String>>> serviceGroupReuseMap = new HashMap<Integer, Map<String,List<String>>>();
/**
* 第一个key是业务类型,第二个key是type(编译配置,分组配置,域配置)value是表名
@@ -64,35 +65,26 @@ public class ServiceAndRDBIndexReal {
if (unMaatService != null && !unMaatService.trim().equals("")) {
String[] split = unMaatService.split(";");
for (String str : split) {
// 回调类删除action zdx20180821
// String[] serviceAction = str.split(":");
// serviceActionMap.put(Integer.valueOf(serviceAction[0]),
// Integer.valueOf(serviceAction[1]));
//
// String serviceType = Configurations.getStringProperty(serviceAction[0], "");
// if (serviceType != null && !serviceType.trim().equals("")) {
// String[] typeArrs = serviceType.split(";");
// for (String typeStr : typeArrs) {
// String[] typeArr = typeStr.split(":");
// String tableNameArr[] = typeArr[1].split(",");
// for (String tableName : tableNameArr) {
// unMaatSercieNameMap.put(Integer.parseInt(serviceAction[0]),
// tableName.toUpperCase());
// }
// }
// }
String serviceType = Configurations.getStringProperty(str, "");
if (serviceType != null && !serviceType.trim().equals("")) {
String[] typeArrs = serviceType.split(";");
for (String typeStr : typeArrs) {
String[] typeArr = typeStr.split(":");
String tableNameArr[] = typeArr[1].split(",");
for (String tableName : tableNameArr) {
unMaatSercieNameMap.put(Integer.parseInt(str), tableName.toUpperCase());
}
}
}
String[] serviceAction = str.split(":");
if (serviceAction.length==2) {
serviceActionMap.put(Integer.valueOf(serviceAction[0]),
Integer.valueOf(serviceAction[1]));
}else{
serviceActionMap.put(Integer.valueOf(serviceAction[0]),
null);
}
String serviceType = Configurations.getStringProperty(serviceAction[0], "");
if (serviceType != null && !serviceType.trim().equals("")) {
String[] typeArrs = serviceType.split(";");
for (String typeStr : typeArrs) {
String[] typeArr = typeStr.split(":");
String tableNameArr[] = typeArr[1].split(",");
for (String tableName : tableNameArr) {
unMaatSercieNameMap.put(Integer.parseInt(serviceAction[0]),
tableName.toUpperCase());
}
}
}
}
}
@@ -165,13 +157,25 @@ public class ServiceAndRDBIndexReal {
}
String serviceRepeatedReal = Configurations.getStringProperty("serviceRepeatedReal", "");
if (serviceRepeatedReal != null && !serviceRepeatedReal.trim().equals("")) {
String[] serviceRepeatedRealArr = serviceRepeatedReal.split(",");
for (String ser : serviceRepeatedRealArr) {
if (ser != null && !ser.trim().equals("")) {
serviceRepeatedRealSet.add(Integer.parseInt(ser));
if (!StringUtil.isEmpty(serviceRepeatedReal)) {
String[] serviceRepeatedRealArr = serviceRepeatedReal.split(";");
for (String serviceRepeated : serviceRepeatedRealArr) {
String [] serInfos = serviceRepeated.split(":");
String [] regionInfos = serInfos[1].split("[|]");
for (String regionInfo : regionInfos) {
String [] regionTabName = regionInfo.split("@");
String [] tableNames = regionTabName[1].split(",");
for (String tableName : tableNames) {
if(serviceGroupReuseMap.containsKey(Integer.valueOf(serInfos[0]))){
serviceGroupReuseMap.get(Integer.valueOf(serInfos[0])).get(regionTabName[0]).add(tableName);
}else{
Map<String,List<String>> regTabMap = new HashMap<String, List<String>>();
List<String> tabList = new ArrayList<String>();
tabList.add(tableName);
regTabMap.put(regionTabName[0], tabList);
}
}
}
}
}
}
@@ -325,12 +329,12 @@ public class ServiceAndRDBIndexReal {
* @param service
* @return
*/
public static Boolean serviceIsRepeated(Integer service) {
public static Boolean serviceIsReuse(Integer service) {
if (service != null) {
return serviceRepeatedRealSet.contains(service);
return serviceGroupReuseMap.containsKey(service);
} else {
} throw new ServiceRuntimeException("判断service是否是分组复用时发生了异常,异常原因:service=null", RestBusinessCode.ServiceIsNull.getValue());
throw new ServiceRuntimeException("判断service是否是分组复用时发生了异常,异常原因:service=null", RestBusinessCode.ServiceIsNull.getValue());
}
}
/**
@@ -394,5 +398,12 @@ public class ServiceAndRDBIndexReal {
public static void setUnMaatSercieNameMap(Map<Integer, String> unMaatSercieNameMap) {
ServiceAndRDBIndexReal.unMaatSercieNameMap = unMaatSercieNameMap;
}
/**
* @return the serviceGroupReuseMap
*/
public static Map<String, List<String>> getServiceGroupReuseMap(Integer service) {
return serviceGroupReuseMap.get(service);
}
}