首页 > 其他分享 >实时动态规则(55)规则发布平台后端开发(5) 规则模型开发(4)rulemodel_03_涉及事件时间

实时动态规则(55)规则发布平台后端开发(5) 规则模型开发(4)rulemodel_03_涉及事件时间

时间:2024-04-24 19:45:09浏览次数:22  
标签:rulemodel 03 cn new String 规则 import doitedu

0 涉及架构

 

注意 :以下代码,都是根据一个特定规则模型: 

rulemodel_03_caculator 来进行开发的

不同的规则模型,如下功能代码需要进行不同的开发

RuleModel_03  这个规则模型的特点是:

    • 拥有事件间隔时间

1 规则参数结构规范

{
  "ruleModelId": "3",
  "ruleId": "m3-r01",
  "ruleTrigEvent": {
    "eventId": "submitOrder",
    "attributeParams": [
      {
        "attributeName": "pageId",
        "compareType": "=",
        "compareValue": "page001"
      }
    ],
    "windowStart": "",
    "windowEnd": "2022-08-30 12:00:00"
  },
  "interval_time": "10000",
  "checkEvent": {
    "eventId": "payOrder",
    "eventAttribute": "orderId"
  },
  "rule_match_count": 2
}

2 新规则实例发布controller开发

package cn.doitedu.rulemgmt.controller;

import cn.doitedu.rtmk.common.pojo.ActionSeqParam;
import cn.doitedu.rtmk.common.pojo.AttributeParam;
import cn.doitedu.rtmk.common.pojo.EventParam;
import cn.doitedu.rulemgmt.dao.DorisQueryDaoImpl;
import cn.doitedu.rulemgmt.dao.RuleSystemMetaDaoImpl;
import cn.doitedu.rulemgmt.service.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.roaringbitmap.RoaringBitmap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.sql.SQLException;
import java.util.*;


/**
 * 前端传入的规则定义参数json结构示例: param_jsons/rule_model_1.json
 */
@Slf4j
@RestController
public class RuleManagementController {

    private final ProfileConditionQueryService profileConditionQueryServiceImpl;
    private final ActionConditionQueryService actionConditionQueryService;
    private final RuleSystemMetaService ruleSystemMetaService;

    @Autowired
    public RuleManagementController(
            ProfileConditionQueryService profileConditionQueryServiceImpl,
            ActionConditionQueryService actionConditionQueryService,
            RuleSystemMetaService ruleSystemMetaService) {
        this.profileConditionQueryServiceImpl = profileConditionQueryServiceImpl;
        this.actionConditionQueryService = actionConditionQueryService;
        this.ruleSystemMetaService = ruleSystemMetaService;
    }



    @RequestMapping("/api/publish/addrule/model03")
    public void publishRuleModel03(@RequestBody String ruleDefineJson) throws IOException, SQLException {

        log.info(ruleDefineJson);

        JSONObject ruleDefineJsonObject = JSON.parseObject(ruleDefineJson);
        String ruleId = ruleDefineJsonObject.getString("ruleId");



        /* *
         * 一、 规则的groovy运算代码处理
         */
        String groovyCode = ruleSystemMetaService.findRuleModelGroovyTemplate(ruleDefineJsonObject.getInteger("ruleModelId"));


        /**
         * 二、 正式发布规则,把 3类信息,放入规则平台的元数据库:
         *  1. 规则参数(大json)
         *  1. 规则运算的 groovy 代码
         */

        Integer ruleModelId = ruleDefineJsonObject.getInteger("ruleModelId");
        String creatorName = "多易教育@深似海男人";

        ruleSystemMetaService.publishRuleInstance(ruleId,ruleModelId,creatorName,1,null,ruleDefineJson,groovyCode);

    }




    // 测试: 手动调用controller的规则发布功能
    public static void main(String[] args) throws IOException, SQLException {

        RuleManagementController controller = new RuleManagementController(
                new ProfileConditionQueryServiceImpl(),
                new ActionConditionQueryServiceImpl(new RuleSystemMetaDaoImpl(),
                        new DorisQueryDaoImpl()),new RuleSystemMetaServiceImpl(new RuleSystemMetaDaoImpl()));

        String webFrontJson = "{\n" +
                "   \"ruleId\":\"rule001\",\n" +
                "   \"profileCondition\":[{\"tagId\":\"tg01\",\"compareType\":\"gt\",\"compareValue\":\"1\"},{\"tagId\":\"tg04\",\"compareType\":\"match\",\"compareValue\":\"汽车\"}]\n" +
                "}";

        controller.publishRuleModel01(webFrontJson);

    }

}

3 规则的groovy运算代码处理

4  正式发布规则,把 信息,放入规则平台的元数据库

 

标签:rulemodel,03,cn,new,String,规则,import,doitedu
From: https://www.cnblogs.com/qiu-hua/p/18156176

相关文章

  • 点击事件报错: Cannot set properties of null (setting 'onclick')
    1、正常书写代码如下:通过外部引用JS文件实现想要的效果时报错,以下是代码的展示。在头部引入js文件<scripttype="text/javascript"src="./win.js"></script>HTML代码文件如下:<divclass="cl"><divid="mask">“冲出迷雾走向光明,最强大的力量是同......
  • 修改元素样式报错:Cannot set properties of undefined (setting 'visibility')
    1、正常书写代码如下:<divclass="cl"><divid="mask"><spanid="close">X</span></div></div><!--JS代码如下--><script>letclose=document.getElement......
  • 代码$display("%h",14'bx0_1010)的输出结果是()
    选项:A、xxxaB、xxXaC、XXXaD、XXxa答案:B解析:  如果输出列表中表达式的值包含有不确定的值或者是高阻值,且在输出格式为十六进制的情况下,其结果输出遵循以下原则:(1)每四位二进制数为一组代表一位十六进制数;(2)如果表达式值相对应的某进制数的部分位为不定值,则该位进制数输......
  • iptables清空所有规则
    编写Shell脚本以备份和还原规则在清空规则之前,可以使用iptables-save命令将当前规则保存到文件中,以备之后的恢复。之后,可以使用iptables-restore命令来还原规则。保存规则到文件:shelliptables-save>backup.rules清空所有规则:shelliptables-Fiptables-tnat-Fiptables-t......
  • 03_微信小程序页面之间的数据通信
     1.父传值子,数据绑定:propertiesComponent({properties:{propA:{type:String,//传递的数据类型value:''//默认值},propB:Number//简化的定义方式}})<!--引用组件的页面模板--><view><costompropA="{{name}}&quo......
  • AP5103 是一款效率高,稳定可靠的 LED 灯恒流驱动控制芯片
    产品描述AP5103是一款效率高,稳定可靠的LED灯恒流驱动控制芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5103采用ESOP8封装,散热片内置接SW脚,通过调节外置电流检测的电阻值来设置流过LED灯的电流,支持外加电压线性调光,最大电......
  • 【专题STM32F03】FreeRTOS 队列queue传递结构体,野火例程代码简单修改。
    /************************************************************************@filemain.c*@authorfire*@versionV1.0*@date2018-xx-xx*@briefFreeRTOSV9.0.0+STM32消息队列******************************************************......
  • centos8报错错误:为 repo 'appstream' 下载元数据失败 : Cannot prepare internal mirr
    出现如下错误的错误:为repo‘appstream’下载元数据失败:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist原因在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS8的所有包。CentOS8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在......
  • L3-037 夺宝大赛
    原题链接\(code\)#include<bits/stdc++.h>usingnamespacestd;intdis[105][105];intxx[4]={1,0,-1,0},yy[4]={0,1,0,-1};inta[105][105];intvis[105][105]={0};structnode{intx,y;};map<int,int>cnt;map<int,int>ren;intmain......
  • 无root权限,解决conda环境的报错ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6:
    网上的方法都需要sudo或者root权限,但是服务器多是实验室公用,没有ruuto权限,因此更好的办法是通过conda只改自己虚拟环境的环境变量。问题原因问题的根本原因是Linux系统没有GLIBCXX_3.4.30动态链接库。这个库和gcc版本有关。因此要么你更换版本,要么找一个别的so链接到这个连接......