SysReasonableRange
大约 2 分钟languagejava
概述
整数、浮点型合法范围配置工具
SQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_reasonable_range
-- ----------------------------
DROP TABLE IF EXISTS `sys_reasonable_range`;
CREATE TABLE `sys_reasonable_range` (
`iid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`sid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '配置项名称,保证唯一',
`category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '分类,备用',
`int_min` int(11) NULL DEFAULT 0 COMMENT '整型类型最小数值',
`int_max` int(11) NULL DEFAULT 0 COMMENT '整型类型最大数值',
`dec_min` decimal(10, 4) NULL DEFAULT 0.0000 COMMENT '浮点类型最小配置',
`dec_max` decimal(10, 4) NULL DEFAULT 0.0000 COMMENT '浮点类型最大配置',
`left_closure` int(11) NULL DEFAULT 0 COMMENT '左侧关闭,被鉴定数值可等于 int_min 或者 dec_min',
`right_closure` int(11) NULL DEFAULT 0 COMMENT '右侧关闭,被鉴定数值可等于 int_max 或者 dec_max',
`grade` int(11) NULL DEFAULT 0 COMMENT '0不提示,1仅提示不强制,2强制不可继续执行下去',
`msg` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示文案',
`state` int(11) NULL DEFAULT 1 COMMENT '状态,默认1表示有效',
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
`seq` int(11) NULL DEFAULT 0 COMMENT '排序序号',
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间,DB自动填充',
`create_user` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建人',
`last_update` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '最后一次修改时间',
`last_user` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '修改人',
PRIMARY KEY (`iid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统配置,合理数据范围' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
java
/**
* 判断左侧右侧是否关闭,只有1是关闭,其他所有数据都认为是不关闭
* @param closureData
* @return 返回true表示关闭
*/
@Override
public boolean isClosure(Integer closureData){
closureData = Optional.ofNullable(closureData).orElse(0);
if(closureData.equals(1)) return true;
else return false;
}
/**
* 根据一项配置(根据表sys_reasonable_range.sid查询得到)
* 鉴定给定的数值是否处于合法范围内
* left_closure=1 表示可等于左侧最小值
* right_closure=1 表示可等于右侧最大值
* @param configName sys_reasonable_range.sid
* @param num 被鉴定的数值,要求传入具体的 Integer、BigDecimal
* @return true表示被鉴定数值在合法范围内
*/
@Override
public Boolean isMatch(String configName, Object num){
SysReasonableRange sysReasonableRange = dao.selectBySid(configName);
if(sysReasonableRange == null) return true;
boolean isInteger = Integer.class.isInstance(num);
boolean isDecimal = BigDecimal.class.isInstance(num);
Integer intMin = sysReasonableRange.getIntMin();
Integer intMax = sysReasonableRange.getIntMax();
BigDecimal decMin = sysReasonableRange.getDecMin();
BigDecimal decMax = sysReasonableRange.getDecMax();
int compResult = -2;
boolean leftClosure = meService.isClosure(sysReasonableRange.getLeftClosure());
boolean rightClosure = meService.isClosure(sysReasonableRange.getRightClosure());
if(isInteger){
Integer inNum = (Integer)num;
compResult = inNum.compareTo(intMin);
if((!leftClosure) && compResult == 0) return false;
if(compResult < 0) return false;
compResult = inNum.compareTo(intMax);
if((!rightClosure) && compResult == 0) return false;
if(compResult > 0) return false;
}
if(isDecimal){
BigDecimal inNum = (BigDecimal)num;
compResult = inNum.compareTo(decMin);
if((!leftClosure) && compResult == 0) return false;
if(compResult < 0) return false;
compResult = inNum.compareTo(decMax);
if((!rightClosure) && compResult == 0) return false;
if(compResult > 0) return false;
}
return true;
}
