感谢于以恒提供本节教程
一、注册规则
1. 在pom.xml文件中添加规则依赖
<dependency>
<groupId>cn.flyrise</groupId>
<artifactId>pai-common-rules</artifactId>
<version>1.7.3</version>
</dependency>
2. 通过实现Rule接口注册规则
/**
* 注册规则
*/
public class PointRule implements Rule {
@Override
public String getProjectName() {
//返回工程名称
return "pai-yyh-park";
}
@Override
public String getRuleName() {
//返回规则名称
return "积分规则";
}
}
3. 创建数据源
package cn.flyrise.pai.yyhpark.model.vo;
import cn.flyrise.common.rules.annotation.RuleModel;
import cn.flyrise.pai.yyhpark.rule.PointRule;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 积分规则决策数据源
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RuleModel(rules = {PointRule.class}, desc = "积分明细信息")
public class PointRuleVO implements Serializable {
@ApiModelProperty("当天是否第一次签到 0:不是 1:是")
private Integer dayFirstSignScope;
@ApiModelProperty("连续签到天数")
private Integer continuousSignDays;
@ApiModelProperty("连续签到得分")
private Integer continuousSignPoints;
@ApiModelProperty("每天签到得分")
private Integer dayFirstSignPoint;
@ApiModelProperty("目前签到总分")
private Integer totalPoint;
}
4. 启动项目
启动项目控制台提示以下内容表示规则注册成功
15:10:38.342 [main] INFO c.f.c.r.c.RuleRegister -
[afterSingletonsInstantiated,51] - >>>>>>>>>>> 规则注册成功,共发现1个规则
5. 规则管理
登陆开发者平台进入应用套件->>我的套件->>规则管理
6. 查看规则和数据源
二、配置规则
1. 规则记录列表
2. 添加规则
3. 添加条件
- 添加条件
- 条件配置
- 添加事件-赋值
- 赋值1
- 赋值2
- 配置好的条件
- 规则调试
- 保存条件
三、代码调用
代码执行规则
package cn.flyrise.pai.yyhpark.rule;
import cn.flyrise.common.core.domain.Reply;
import cn.flyrise.common.rules.service.RuleService;
import cn.flyrise.common.rules.vo.business.BusinessRuleVO;
import cn.flyrise.pai.yyhpark.model.vo.PointRuleVO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags = "规则测试controller")
@RestController
@RequestMapping("ruleTest")
public class PointRuleTestController {
@Resource
private RuleService ruleService;
@ApiOperation("规则测试")
@PostMapping("/test")
public Reply test() {
PointRuleVO ruleVO = new PointRuleVO();
ruleVO.setTotalPoint(1);
ruleVO.setContinuousSignDays(7);
ruleVO.setDayFirstSignPoint(0);
ruleVO.setContinuousSignPoints(0);
ruleVO.setDayFirstSignScope(1);
//执行规则得到返回值
//套件是入驻企业安装时使用这个接口
//Reply<BusinessRuleVO> reply = ruleService.execute(new TestRule(), userInfoVO);
//执行规则得到返回值
//套件是运营企业安装时使用这个接口,parkId前端切换园区产生
Reply<BusinessRuleVO> reply =
ruleService.execute(new PointRule(), null, ruleVO);
if (reply.isSuccess()) {
//继续业务逻辑
BusinessRuleVO businessRuleVO = reply.getData();
JSONObject jsonObject = businessRuleVO.getObjectMap().get(ruleVO.getClass().getSimpleName());
ruleVO = JSONObject.toJavaObject(jsonObject, PointRuleVO.class);
System.out.println(JSON.toJSONString(ruleVO));
} else {
//异常处理
}
return reply;
}
}
四、支持函数
1. 字符串函数
(1)charAt函数:返回字符串中指定的某个字符。
(2)indexOf函数:返回字符串中第一个查找到的下标index,从左边开始查找。
(3)lastIndexOf函数:返回字符串中第一个查找到的下标index,从右边开始查找。
(4)length函数:返回字符串的长度。(不用带括号)
(5)substr函数:返回字符串从指定位置开始,截取几个字符。
(6)substring函数:返回字符串中指定的几个字符。
(7)trim函数:清除字符串中的空格。
(8)toLowerCase函数:将字符串转换为小写。
(9)toUpperCase函数:将字符串转换为大写。
(10)endsWith函数:返回字符串是否以某段结尾。
(11)contains函数:返回字符串是否包含某段。
实现方式:利用java脚本引擎ScriptEngineManager,执行js内置的字符串函数
使用方式:编辑器输入字符串类型的值.会弹出提示
2. 日期函数
(1)getDate函数:返回日期的“日”部分,值为1~31
(2)getDay函数:返回星期几,值为0~6,其中0表示星期日,1表示星期一,…,6表示星期六
(3)getHours函数:返回日期的“小时”部分,值为0~23。
(4)getMinutes函数:返回日期的“分钟”部分,值为0~59。
(5)getMonth函数:返回日期的“月”部分,值为0~11。其中0表示1月,2表示3月,…,11表示12月。
(6)getSeconds函数:返回日期的“秒”部分,值为0~59。
(7)getTime函数:返回系统时间。
(8)getTimezoneOffset函数:返回此地区的时差(当地时间与GMT格林威治标准时间的地区时差),单位为分钟。
(9)getYear函数:返回日期的“年”部分。返回值以1900年为基数,例如1999年为99。
(10)parse函数:返回从1970年1月1日零时整算起的毫秒数(当地时间)。
(11)setDate函数:设定日期的“日”部分,值为0~31。
(12)setHours函数:设定日期的“小时”部分,值为0~23。
(13)setMinutes函数:设定日期的“分钟”部分,值为0~59。
(14)setMonth函数:设定日期的“月”部分,值为0~11。其中0表示1月,…,11表示12月。
(15)setSeconds函数:设定日期的“秒”部分,值为0~59。
(16)setTime函数:设定时间。时间数值为1970年1月1日零时整算起的毫秒数。
(17)setYear函数:设定日期的“年”部分。
(18)toGMTString函数:转换日期成为字符串,为GMT格林威治标准时间。
实现方式:利用java脚本引擎ScriptEngineManager,执行js内置的日期函数
使用方式:编辑器输入日期类型的值.会弹出提示
3. 数学函数
(1)abs函数:即Math.abs(以下同),返回一个数字的绝对值。
(2)acos函数:返回一个数字的反余弦值,结果为0~π弧度(radians)。
(3)asin函数:返回一个数字的反正弦值,结果为-π/2~π/2弧度。
(4)atan函数:返回一个数字的反正切值,结果为-π/2~π/2弧度。
(5)atan2函数:返回一个坐标的极坐标角度值。
(6)ceil函数:返回一个数字的最小整数值(大于或等于)。
(7)cos函数:返回一个数字的余弦值,结果为-1~1。
(8)exp函数:返回e(自然对数)的乘方值。
(9)floor函数:返回一个数字的最大整数值(小于或等于)。
(10)log函数:自然对数函数,返回一个数字的自然对数(e)值。
(11)max函数:返回两个数的最大值。
(12)min函数:返回两个数的最小值。
(13)pow函数:返回一个数字的乘方值。
(14)random函数:返回一个0~1的随机数值。
(15)round函数:返回一个数字的四舍五入值,类型是整数。
(16)sin函数:返回一个数字的正弦值,结果为-1~1。
(17)sqrt函数:返回一个数字的平方根值。
(18)tan函数:返回一个数字的正切值。
实现方式:利用java脚本引擎ScriptEngineManager,执行js内置的数学函数
使用方式:编辑器输入Math.会弹出提示
4. 数组或集合函数
(1)join函数:转换并连接数组中的所有元素为一个字符串。
(2)length函数:数组的长度(不用带括号)。
(3)[index]:根据数组小标index获取元素。
(4)sort函数:将数组元素从小到大排序。
(5)includes函数:判断数组是否包含某元素
实现方式:利用java脚本引擎ScriptEngineManager,执行js内置的数组函数
使用方式:编辑器数组或集合类型的值.会弹出提示
5. 自定义统计函数
(1) max函数
返回给定数组或数组元素某属性的最大值。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计最小值的数组 | 是 | Array元素类型的可以是整型、浮点、时间、字符串、布尔和对象类型,当元素是对象类型时需指定key |
key | 字符串 | 对象类型元素的属性 | 否 | Array元素是对象类型时必须,且该属性的类型是整型、浮点、时间、字符串、布尔。 |
(2) min函数
返回给定数组或数组元素某属性的最小值。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计最小值的数组 | 是 | Array元素类型的可以是整型、浮点、时间、字符串、布尔和对象类型,当元素是对象类型时需指定key |
key | 字符串 | 对象类型元素的属性 | 否 | Array元素是对象类型时必须,且该属性的类型是整型、浮点、时间、字符串、布尔。 |
(3) sum函数
返回给定数组或数组元素某属性的和值。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计和值的数组 | 是 | Array元素类型的可以是整型、浮点和对象类型,当元素是对象类型时需指定key |
key | 字符串 | 对象类型元素的属性 | 否 | Array元素是对象类型时必须,且该属性的类型是整型、浮点。 |
(4) average函数
返回给定数组或数组元素某属性的平均值(保留两位小数浮点型)。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计平均值的数组 | 是 | Array元素类型的可以是整型、浮点和对象类型,当元素是对象类型时需指定key |
key | 字符串 | 对象类型元素的属性 | 否 | Array元素是对象类型时必须,且该属性的类型是整型、浮点。 |
(5) median函数
返回给定数组的中值(保留两位小数浮点型)。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计中值的数组 | 是 | Array元素类型的可以是整型、浮点类型 |
(6) rank函数
返回一个数值在给数组中的排位(小的排在前面)。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计排名的数组 | 是 | Array元素类型的可以是整型、浮点、时间、字符串、布尔类型 |
value | 同Array元素类型 | 统计排名的值 | 是 |
(7) avedev函数
返回给定数组的平均绝对误差值(保留两位小数浮点型)。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计平均绝对误差值的数组 | 是 | Array元素类型的可以是整型、浮点类型 |
(8) frequency函数
返回给定数组中出现次数最多的值。
请求参数
名称 | 类型 | 描述 | 是否必需 | 备注 |
---|---|---|---|---|
array | Array<> | 统计出现次数最多值的数组 | 是 | Array元素类型的可以是整型、浮点、时间、字符串、布尔类型 |
实现方式:编写自定义的函数,利用java脚本引擎ScriptEngineManager执行
使用方式:编辑器输入Statistic.会弹出提示
文档更新时间: 2023-02-28 11:29 作者:欧阳少海