4.1.12 函数之内置函数与表达式

本文意在列全所有内置函数与表达式,方便大家查阅。

一、内置函数

内置函数是系统预先定义好的函数,并且提供表达式调用支持。

通用函数

数学函数

表达式 名称 说明
ABS 绝对值 函数场景: 表达式函数示例: ABS(number)函数说明: 获取number的绝对值
FLOOR 向下取整 函数场景: 表达式函数示例: FLOOR(number)函数说明: 对number向下取整
CEIL 向上取整 函数场景: 表达式函数示例: CEIL(number)函数说明: 对number向上取整
ROUND 四舍五入 函数场景: 表达式函数示例: ROUND(number)函数说明: 对number四舍五入
MOD 取余 函数场景: 表达式函数示例: MOD(A,B)函数说明: A对B取余
SQRT 平方根 函数场景: 表达式函数示例: SQRT(number) 函数说明: 对number平方根
SIN 正弦 函数场景: 表达式函数示例: SIN(number)函数说明: 对number取正弦
COS 余弦 函数场景: 表达式函数示例: COS(number)函数说明: 对number取余弦
PI 圆周率 函数场景: 表达式函数示例: PI() 函数说明: 圆周率
ADD 相加 函数场景: 表达式函数示例: ADD(A,B)函数说明: A与B相加
SUBTRACT 相减 函数场景: 表达式函数示例: SUBTRACT(A,B)函数说明: A与B相减
MULTIPLY 乘积 函数场景: 表达式函数示例: MULTIPLY(A,B)函数说明: A与B相乘
DIVIDE 相除 函数场景: 表达式函数示例: DIVIDE(A,B)函数说明: A与B相除
MAX 取最大值 函数场景: 表达式函数示例: MAX(collection) 函数说明: 返回集合中的最大值,参数collection为集合或数组
MIN 取最小值 函数场景: 表达式函数示例: MIN(collection) 函数说明: 返回集合中的最小值,参数collection为集合或数组
SUM 求和 函数场景: 表达式函数示例: SUM(collection)函数说明: 返回对集合的求和,参数collection为集合或数组
AVG 取平均值 函数场景: 表达式函数示例: AVG(collection)函数说明: 返回集合的平均值,参数collection为集合或数组
COUNT 计数 函数场景: 表达式函数示例: COUNT(collection)函数说明: 返回集合的总数,参数collection为集合或数组
UPPER_MONEY 大写金额 函数场景: 表达式函数示例: UPPER_MONEY(number)函数说明: 返回金额的大写,参数number为数值或数值类型的字符串

表4-1-12-1 数学函数

文本函数

表达式 名称 说明
TRIM 空字符串过滤 函数场景: 表达式函数示例: TRIM(text)函数说明: 去掉文本字符串text中的首尾空格,文本为空时,返回空字符串
IS_BLANK 是否为空字符串 函数场景: 表达式函数示例: IS_BLANK(text)函数说明: 判断文本字符串text是否为空
STARTS_WITH 是否以指定字符串开始 函数场景: 表达式函数示例: STARTS_WITH(text,start)函数说明: 判断文本字符串text是否以文本字符串start开始,文本为空时,按照空字符串处理
ENDS_WITH 是否以指定字符串结束 函数场景: 表达式函数示例: ENDS_WITH(text,start)函数说明: 判断文本字符串text是否以文本字符串end结束,文本为空时,按照空字符串处理
CONTAINS 包含 函数场景: 表达式函数示例: CONTAINS(text,subtext)函数说明: 判断文本字符串text是否包含文本字符串subtext,文本text为空时,按照空字符串处理
LOWER 小写 函数场景: 表达式函数示例: LOWER(text)函数说明: 小写文本字符串text,文本为空时,按照空字符串处理
UPPER 大写 函数场景: 表达式函数示例: UPPER(text)函数说明: 大写文本字符串text,文本为空时,按照空字符串处理
REPLACE 替换字符串 函数场景: 表达式函数示例: REPLACE(text,oldtext,newtext)函数说明: 使用文本字符串newtext替换文本字符串text中的文本字符串oldtext
LEN 获取字符串长度 函数场景: 表达式函数示例: LEN(text)函数说明: 获取文本字符串text的长度,文本为空时,按照空字符串处理
JOIN 连接字符串 函数场景: 表达式函数示例: JOIN(text,join)函数说明: 将文本字符串text连接文本字符串join,文本为空时,按照空字符串处理
PARSE 反序列化JSON字符串 函数场景: 表达式函数示例: PARSE(text)函数说明: 将JSON文本字符串text反序列化为集合或者map
JSON 序列化为JSON字符串 函数场景: 表达式函数示例: JSON(object)函数说明: 将记录object序列化为JSON字符串

表4-1-12-2 文本函数

正则函数

表达式 名称 说明
MATCHES 正则匹配 函数场景: 表达式函数示例: MATCHES(text,regex)函数说明: 校验字符串是否满足正则匹配,例如regex为[a-zA-Z][a-zA-Z0-9]*$,来校验text是否匹配
CHECK_PHONE 手机号校验 函数场景: 表达式函数示例: CHECK_PHONE(text)函数说明: 校验手机号是否正确
CHECK_EMAIL 邮箱校验 函数场景: 表达式函数示例: CHECK_EMAIL(text)函数说明:?校验邮箱是否正确
CHECK_USER_NAME 用户名校验 函数场景: 表达式函数示例: CHECK_USER_NAME(text)函数说明:?校验用户名是否正确
CHECK_PWD 密码强弱校验 函数场景: 表达式函数示例: CHECK_PWD(text)函数说明: 判断密码是否满足强弱校验
CHECK_INTEGER 整数校验 函数场景: 表达式函数示例: CHECK_INTEGER(text)函数说明:?校验是否为整数
CHECK_ID_CARD 身份证校验 函数场景: 表达式函数示例: CHECK_ID_CARD(text)函数说明:?校验身份证是否正确
CHECK_URL 合法URL校验 函数场景: 表达式函数示例: CHECK_URL(text)函数说明:?校验URL是否正确
CHECK_CHINESE 中文校验 函数场景: 表达式函数示例: CHECK_CHINESE(text)函数说明:?校验是否为中文文本
CHECK_NUMBER 纯数字校验 函数场景: 表达式函数示例: CHECK_NUMBER(text)函数说明:?校验是否为纯数字
CHECK_TWO_DIG 验证是否两位小数 函数场景: 表达式函数示例: CHECK_TWO_DIG(text)函数说明:?校验是否两位小数
CHECK_IP IP地址校验 函数场景: 表达式函数示例: CHECK_IP(text)函数说明:?校验IP地址是否正确
CHECK_CONTAINS_CHINESE 包含中文校验 函数场景: 表达式函数示例: CHECK_CONTAINS_CHINESE(text)函数说明:?校验是否包含中文
CHECK_SIZE_MAX 只能输入n个字符 函数场景: 表达式函数示例: CHECK_SIZE_MAX(text,n)函数说明:?只能输入n个字符
CHECK_SIZE_MIN 至少输入n个字符 函数场景: 表达式函数示例: CHECK_SIZE_MIN(text,n)函数说明:?至少输入n个字符
CHECK_SIZE 输入m-n个字符 函数场景: 表达式函数示例: CHECK_SIZE(text,m,n)函数说明:?输入m-n个字符
CHECK_CODE 只能由英文、数字、下划线组成 函数场景: 表达式函数示例: CHECK_CODE(text)函数说明:?只能由英文、数字、下划线组成
CHECK_ENG_NUM 只能包含英文和数字 函数场景: 表达式函数示例: CHECK_ENG_NUM(text)函数说明:?只能包含英文和数字

表4-1-12-3 正则函数

时间函数

表达式 名称 说明
NOW 返回当前时间 函数场景: 表达式函数示例: NOW()函数说明: 返回当前时间
NOW_STR 返回当前时间字符串 函数场景: 表达式函数示例: NOW_STR()函数说明: 返回当前时间字符串,精确到时分秒,格式为yyyy-MM-dd hh:mm:ss
TODAY_STR 返回今天的日期字符串 函数场景: 表达式函数示例: TODAY_STR()函数说明: 返回今天的日期字符串,精确到天,格式为yyyy-MM-dd
ADD_DAY 加减指定天数 函数场景: 表达式函数示例: ADD_DAY(date,days)函数说明: 将指定日期加/减指定天数,date为指定日期,days为指定天数,当为负数时在date上减去此天数
ADD_MONTH 加减指定月数 函数场景: 表达式函数示例: ADD_MONTH(date,months)函数说明: 将指定日期加/减指定月数,date为指定日期,months为指定月数,当为负数时在此date上减去此月数
ADD_YEAR 加减指定年数 函数场景: 表达式函数示例: ADD_YEAR(date,years)函数说明: 将指定日期加/减指定年数,date为指定日期,years为指定年数,当为负数时在此date上减去此年数
TO_DATE 转换为时间 函数示例: TO_DATE(date,pattern)函数说明: 将date字符串按格式转换为时间
ADD_WORK_DAY 工作日加减天数(跳过周末) 函数示例: ADD_WORK_DAY(date,days) 函数说明: 将指定工作日加/减指定天数(跳过周末),date为指定日期,days为指定天数,当为负数时在date上减去此天数

表4-1-12-4 时间函数

集合函数

表达式 名称 说明
LIST_GET 获取集合(或数组)中的元素 函数场景: 表达式函数示例: LIST_GET(list,index)函数说明: 获取集合list中索引为数字index的元素
LIST_IS_EMPTY 判断集合(或数组)是否为空 函数场景: 表达式函数示例: LIST_IS_EMPTY(list)函数说明: 传入一个对象集合,判断是否为空
LIST_CONTAINS 判断集合(或数组)是否包含元素 函数场景: 表达式函数示例: LIST_CONTAINS(list,item)函数说明: 判断集合list是否包含元素item
LIST_ADD 将元素添加到集合(或数组) 函数场景: 表达式函数示例: LIST_ADD(list,item)函数说明: 将元素item添加到集合list
LIST_ADD_BY_INDEX 将元素添加到集合(或数组)的指定位置 函数场景: 表达式函数示例: LIST_ADD_BY_INDEX(list,index,item)函数说明: 将元素item添加到集合list的索引index处
LIST_REMOVE 移除集合(或数组)中的元素 函数场景: 表达式函数示例: LIST_REMOVE(list,item)函数说明: 从集合list中移除元素item
LIST_COUNT 获取集合(或数组)元素数量 函数场景: 表达式函数示例: LIST_COUNT(list)函数说明: 传入一个对象集合,获取集合元素数量
LIST_IDS 获取集合(或数组)中的所有id 函数场景: 表达式函数示例: LIST_IDS(list)函数说明: 传入一个对象集合,获取集合中的所有id组成的列表
LIST_FIELD_VALUES 将对象集合(或数组)转化为属性集合 函数场景: 表达式函数示例: LIST_FIELD_VALUES(list,model,field)函数说明: 传入一个对象集合,该对象的模型和属性字段,返回属性值集合
LIST_FIELD_EQUALS 判断对象集合(或数组)中属性值匹配情况 函数场景: 表达式函数示例: LIST_FIELD_EQUALS(list,model,field,value)函数说明: 判断对象集合(或数组)中属性值匹配情况,返回布尔集合
LIST_FIELD_NOT_EQUALS 判断对象集合(或数组)中属性值不匹配情况 函数场景: 表达式函数示例: LIST_FIELD_NOT_EQUALS(list,model,field,value)函数说明: 判断对象集合(或数组)中属性值不匹配情况,返回布尔集合
LIST_FIELD_IN 判断对象集合(或数组)中属性值是否在指定集合(或数组)中 函数场景: 表达式函数示例: LIST_FIELD_IN(list,model,field,list)函数说明: 判断对象集合(或数组)中属性值是否在指定集合(或数组)中,返回布尔集合
LIST_FIELD_NOT_IN 判断对象集合(或数组)中属性值是否不在指定集合(或数组)中 函数场景: 表达式函数示例: LIST_FIELD_NOT_IN(list,model,field,list)函数说明: 判断对象集合(或数组)中属性值是否不在指定集合(或数组)中,返回布尔集合
LIST_AND 将一个布尔集合进行逻辑与运算 函数场景: 表达式函数示例: LIST_AND(list)函数说明: 将一个布尔集合进行逻辑与运算,返回布尔值
LIST_OR 将一个布尔集合进行逻辑或运算 函数场景: 表达式函数示例: LIST_OR(list)函数说明: 将一个布尔集合进行逻辑或运算,返回布尔值
STRING_LIST_TO_NUMBER_LIST 将一个字符集合转换为数值集合 函数场景: 表达式函数示例: STRING_LIST_TO_NUMBER_LIST(list)函数说明: 将一个字符集合转换为数值集合,如果转换成功,返回一个数值集合;转换失败,返回集合本身
COMMA 将集合里面的值用逗号拼接 函数场景: 表达式函数示例: COMMA(list)函数说明: 将集合里面的值用逗号拼接「集合里面的值只能是Number或者String类型」,返回一个字符串
CONCAT 将集合里面的值用指定的符号拼接 函数场景: 表达式函数示例: CONCAT(list, split)函数说明: 将集合里面的值用split拼接「集合里面的值只能是Number或者String类型」,返回一个字符串

表4-1-12-5 集合函数

键值对函数

表达式 名称 说明
MAP_GET 从键值对中获取指定键的值 函数场景: 表达式函数示例: MAP_GET(map,key)函数说明: 从键值对中获取键为key的值
MAP_IS_EMPTY 判断键值对是否为空 函数场景: 表达式函数示例: MAP_IS_EMPTY(map)函数说明: 判断键值对map是否为空
MAP_PUT 向键值对中添加键值 函数场景: 表达式函数示例: MAP_PUT(map,key,value)函数说明: 将键为key的值为value添加到键值对map中
MAP_REMOVE 移除键值对中的元素 函数场景: 表达式函数示例: MAP_REMOVE(map,key)函数说明: 从键值对map中移除键key
MAP_COUNT 获取键值数量 函数场景: 表达式函数示例: MAP_COUNT(map)函数说明: 获取键值对map的键值数量

表4-1-12-6 键值对函数

上下文函数

表达式 名称 说明
CURRENT_UID 获取当前用户id 函数场景: 表达式函数示例: CURRENT_UID()函数说明: 获取当前用户id
CURRENT_USER_NAME 获取当前用户名 函数场景: 表达式函数示例: CURRENT_USER_NAME()函数说明: 获取当前用户的用户名
CURRENT_USER 获取当前用户 函数场景: 表达式函数示例: CURRENT_USER()函数说明: 获取当前用户
CURRENT_ROLE_IDS 获取当前用户的角色id列表 函数场景: 表达式函数示例: CURRENT_ROLE_IDS()函数说明: 获取当前用户的角色id列表
CURRENT_ROLES 获取当前用户的角色列表 函数场景: 表达式函数示例: CURRENT_ROLES()函数说明: 获取当前用户的角色列表
CURRENT_PARTNER_ID 获取当前用户的合作伙伴id 函数场景: 表达式函数示例: CURRENT_PARTNER_ID()函数说明: 获取当前用户的合作伙伴id
CURRENT_PARTNER 获取当前用户的合作伙伴 函数场景: 表达式函数示例: CURRENT_PARTNER()函数说明: 获取当前用户的合作伙伴

表4-1-12-7 上下文函数

对象函数

表达式 名称 说明
IS_NULL 判断是否为空 函数场景: 表达式函数示例: IS_NULL(文本或控件)函数说明: 判断对象是否为空,为空则返回true,不为空则返回false,可用于判断具体值或者控件
EQUALS 判断是否相等 函数场景: 表达式函数示例: EQUALS(A,B)函数说明: 判断A和B是否相等
FIELD_GET 获取对象属性值 函数场景: 表达式函数示例: GET(obj,dotExpression)函数说明: 从对象中根据点表达式获取属性值

表4-1-12-8 对象函数

逻辑函数

表达式 名称 说明
IF 条件表达式 函数场景: 表达式函数示例: IF(A,B,C)函数说明: 如果F满足条件A,则返回B,否则返回C,支持多层嵌套IF函数
AND 逻辑与 函数场景: 表达式函数示例: AND(A,B)函数说明: 返回 条件A 逻辑与 条件B 的值
OR 逻辑或 函数场景: 表达式函数示例: OR(A,B)函数说明: 返回 条件A 逻辑或 条件B 的值
NOT 逻辑非 函数场景: 表达式函数示例: NOT(A)函数说明: 返回 逻辑非 条件A 的值

表4-1-12-9 逻辑函数

特定场景函数

商业函数

表达式 名称 说明
CURRENT_CORP_ID 获取当前用户的公司id 函数场景: 商业公司函数示例: CURRENT_CORP_ID()函数说明: 获取当前用户的公司id
CURRENT_CORP 获取当前用户的公司 函数场景: 商业公司函数示例: CURRENT_CORP()函数说明: 获取当前用户的公司
CURRENT_SHOP_ID 获取当前用户的店铺id 函数场景: 商业店铺函数示例: CURRENT_SHOP_ID()函数说明: 获取当前用户的店铺id
CURRENT_SHOP 获取当前用户的店铺 函数场景: 商业店铺函数示例: CURRENT_SHOP()函数说明: 获取当前用户的店铺

表4-1-12-10 商业函数

逻辑DSL函数

表达式 名称 说明
FOR_INDEX 获取循环的index 函数场景: 逻辑DSL函数示例: FOR_INDEX(context)函数说明: 获取循环的index

4-1-12-11 逻辑DSL函数

二、表达式

表达式,是由数字、算符、函数、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。

表达式可以使用运算符(+、-、*、/、&&、||、!、==、!=)、点表达式(例如:模型A.字段C.关联模型字段A)和内置函数。表达式格式如:IF(ISNULL(模型A.字段x),模型A.字段y.关联模型字段z,模型A.字段m)

表达式中模型字段的前端展现使用展示名称displayName,表达式原始内容使用技术名称name。

点表达式

点表达式是表达式的子集,由变量名与点组成。点前的变量与点后的变量为从属关系,点后的变量从属于点前的变量。可以使用点表达式获取由全表达式确定的最后一个点后变量的值。

正则表达式

对应内置函数 说明 正则表达式
CHECK_PHONE 手机号校验 ^(1[3-9])\d{9}$
CHECK_EMAIL 邮箱校验 ^[a-z0-9A-Z]+[-
CHECK_USER_NAME 用户名校验 非空校验
CHECK_PWD 密码强弱校验(强密码校验) ^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9~!@&%#_(.)]{8,16}$
CHECK_INTEGER 整数校验 ^-{0,1}[1-9]\d*$
CHECK_ID_CARD 身份证校验 ^\d{15}$)
CHECK_URL 合法URL校验 ^(?:(?:https?)://)(?:(?:1\d{2}
CHECK_CHINESE 中文校验 ^[\u4e00-\u9fa5]{0,}$
CHECK_NUMBER 纯数字校验 ^[0-9]*$
CHECK_TWO_DIG 验证是否两位小数 ^[0-9]+(.[0-9]{2})?$
CHECK_IP IP地址校验 ^((2[0-4]\d
CHECK_CONTAINS_CHINESE 包含中文校验 ^.?[\u4e00-\u9fa5]{0,}.?$
CHECK_SIZE 只能输入n个字符 ^.{n}$
CHECK_SIZE_MIN 至少输入n个字符 ^.{n,}$
CHECK_SIZE_MAX 最多输入n个字符 ^.{0,n}$
CHECK_SIZE_RANGE 输入m-n个字符 ^.{m,n}$
CHECK_CODE 只能由英文、数字、下划线组成 ^[a-z0-9A-Z_]*$
CHECK_ENG_NUM 只能包含英文和数字 ^[a-z0-9A-Z]*$

表4-1-12-12 正则表达式

内置变量

在表达式中可以使用点表达式来获取内置变量的属性及子属性的属性。例如,使用activeRecord来获取当前记录。activeRecord.id来获取当前选中行记录的id。

数据变量

变量 名称 说明
activeRecord 当前选中值 选中单行记录跳转视图初始化时,值为单条当前选中记录;选中多行记录跳转视图初始化时,值为当前选中记录列表;整表单校验时,值为当前表单提交记录;单字段校验时,值为当前字段值。作为动作筛选条件时,值为动作模型定义数据。

表4-1-12-13 数据变量

上下文变量

变量 名称 说明
module 模块 使用示例: context.module示例说明:请求上下文中的模块
tenant 租户 使用示例: context.tenant示例说明:请求上下文中的租户
lang 语言 使用示例: context.lang示例说明:请求上下文中的语言
country 国家 使用示例: context.country示例说明:请求上下文中的国家
env 环境 使用示例: context.env示例说明:请求上下文中的环境
extend 扩展信息 使用示例: context.extend.扩展变量名示例说明:请求上下文中的扩展信息

表4-1-12-14 上下文变量

内置函数

内置函数章节介绍的内置函数可以在表达式中使用。例如,使用ABS(activeValue.amount)来获取当前选中记录金额的绝对值。

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9287.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

Like (0)
史, 昂's avatar史, 昂数式管理员
Previous 2024年5月23日
Next 2024年5月23日

相关推荐

  • 4.1.25 框架之搜索引擎

    一、使用场景 在碰到大数据量并且需要全文检索的场景,我们在分布式架构中基本会架设ElasticSearch来作为一个常规解决方案。在oinone体系中增强模型就是应对这类场景,其背后也是整合了ElasticSearch。 二、整体介绍 oinone与es整合设计图 图4-1-25-1 Oinone与es整合设计图 基础环境安装 Canal安装 详见4.1.10【函数之触发与定时】一文 修改Canal配置并重启 新增Canal的实例【destinaion: pamirs】,监听分表模型的binlog【filter: demo.demo_core_sharding_model……】用于增量同步 pamirs: middleware: data-source: jdbc-url: jdbc:mysql://localhost:3306/canal_tsdb?useUnicode=true&characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false driver-class-name: com.mysql.cj.jdbc.Driver username: root password: oinone canal: ip: 127.0.0.1 port: 1111 metricsPort: 1112 zkClusters: – 127.0.0.1:2181 destinations: – destinaion: pamirschangedata name: pamirschangedata desc: pamirschangedata slaveId: 1235 filter: demo\.demo_core_pet_talent dbUserName: root dbPassword: oinone memoryStorageBufferSize: 65536 topic: CHANGE_DATA_EVENT_TOPIC dynamicTopic: false dbs: – { address: 127.0.0.1, port: 3306 } – destinaion: pamirs id: 1234 name: pamirs desc: pamirs slaveId: 1234 filter: demo\.demo_core_sharding_model_0,demo\.demo_core_sharding_model_1,demo\.demo_core_sharding_model_2,demo\.demo_core_sharding_model_3,demo\.demo_core_sharding_model_4,demo\.demo_core_sharding_model_5,demo\.demo_core_sharding_model_6,demo\.demo_core_sharding_model_7 dbUserName: root dbPassword: oinone memoryStorageBufferSize: 65536 topic: BINLOG_EVENT_TOPIC dynamicTopic: false dbs: – { address: 127.0.0.1, port: 3306 } tsdb: enable: true jdbcUrl: "jdbc:mysql://127.0.0.1:3306/canal_tsdb" userName: root password: oinone mq: rocketmq rocketmq: namesrv: 127.0.0.1:9876 retryTimesWhenSendFailed: 5 dubbo: application: name: canal-server version: 1.0.0 registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20881 scan: base-packages: pro.shushi server: address: 0.0.0.0 port: 10010 sessionTimeout: 3600 图4-1-25-2 修改Canal配置并重启 ES安装 下载安装包官方下载地址,也可以直接下载elasticsearch-8.4.1-darwin-x86_64.tar.gz.txt(361.7 MB),下载后去除后缀.txt,然后解压文件 替换安装目录/config下的[elasticsearch.yml](elasticsearch)(1 KB),主要是文件中追加了三个配置 xpack.security.enabled: false xpack.security.http.ssl.enabled: false xpack.security.transport.ssl.enabled: false 图4-1-25-3 elasticsearc.yml追加三个配置 启动 a. 导入环境变量(ES运行时需要JDK18及以上版本JDK运行环境, ES安装包中包含了一个JDK18版本) # export JAVA_HOME=/Users/oinone/Documents/oinone/es/elasticsearch-8.4.1/jdk.app/Contents/Home/ export JAVA_HOME=ES解压安装目录/jdk.app/Contents/Home/ 图4-1-25-4 导入环境变量 b. 运行ES ## nohup /Users/oinone/Documents/oinone/es/elasticsearch-8.4.1/bin/elasticsearch >> $TMPDIR/elastic.log 2>&1 & nohup ES安装目录/bin/elasticsearch >> $TMPDIR/elastic.log 2>&1 & 图4-1-25-5 运行ES 停止ES lsof…

    2024年5月23日
    1.5K00
  • 7.2 实战训练(积分发放)

    前言 当我们碰到一个全新的场景,除了写代码以外也可以通过设计器来完成,大致步骤如下: 分析业务场景,规划对应的模型并通过模型设计器进行配置 通过界面设计器,设计出必要管理页面 通过流程设计器,设计对应业务流程 通过数据可视化,设计相应的数据看板 场景说明 本节通过例子完成一个积分成本分摊的业务场景 积分支出:谁受益谁支出原则+导购手动确认原则,通过门店应用的积分规则,来实现自动化+手动积分形式实现 案例背景 某家具企业经营多种家具类型,不同系列不同品类分事业部经营。 注: 独立门店:只能售卖本事业部下的商品; 融合门店:可以售卖多事业部下的商品; 需求:需要建立一套积分规则,遵循谁受益谁支出原则+导购手动确认原则;通过门店应用的积分规则,来实现自动化+手动积分。 场景一 导购a邀请老客户c通过裂变分享新客户x在独立门店1下单。系统根据独立门店1的积分规则,自动发放积分给老客户c和新客户x,积分由国一事业部承担。 场景二 融合门店1导购b邀请老客户d裂变分享新客户y在融合门店下单。该订单可能涉及多个事业部,由导购b手动选择最大量值的积分规则进行发放 场景三 独立门店1的导购a邀请老客户c裂变分享新客户z在独立门店2下单。系统根据独立门店2的积分规则,来计算积分值,自动发放老客户c和新客户z的积分,积分由国二事业部 实战训练 Step1 分析业务场景规划对应模型 本场景下涉及基础对象模型包括:事业部、门店、导购、会员等 事业部:它是积分成本的载体 门店:类型分为独立门店和融合门店,独立门店必须隶属于一个事业部,同时配置默认积分发放规则,融合门店可能属于多个事业部当发生积分发放时,需要店员手工选择成本事业部和积分发放规则 导购员:导购员必须隶属于一个门店等 会员:消费者需要记录它隶属导购员,以及是由哪个会员推荐过来的等 涉及业务对象模型包括:积分发放规则,积分发放记录,邀请下单记录 积分发放规则:会员积分发放规则,对应邀请老客的积分发放规则等 积分发放记录:本次发放积分、本次发放积分规则、发放对象(会员)、成本事业部、关联门店、关联导购、关联老客(可空)、关联下单记录编码等 邀请下单记录:导购、下单会员、下单门店、商品信息、下单金额等 对应模型如下: 模型 设计器呈现 自定义字段列表 关系字段说明 说明 事业部 事业部负责人(文本) 门店列表(o2m) 与门店建立o2m绑定关系,绑定时选择双向绑定,双向绑定意思是在事业部这边建立o2m到门店的关系字段,在门店那边建立m2o的关系字段 关系字段需要在有对方模型的情况下再建,比如事业部中的门店列表则是再后面追加新增的 门店 导购列表(o2m) 事业部(m2o) 默认积分发规则(m2o) 门店类型(枚举) 分别与事业部、导购、积分发放规则建立m2o、o2m、m2o关系 门店类型:需要先建对应的数据字典 导购 绑定用户(m2o) 门店(m2o) 是否离职(布尔型) 与门店建立m2o关系 1. 绑定用户,用于后续业务流程设计中的填写规则 2. 打马赛克的忽略,其他场景测试用 会员 会员累计积分(浮点数) 推荐客户(m2o) 所属于导购员(m2o) 是否为新客(布尔型) 与导购、会员建立m2o关系 1. 会员m2o的字段是自关联用于存储推荐会员 2. 打马赛克的忽略,其他场景测试用 积分发放规则 推荐客户发放比例(浮点数) 发放倍数(整数) 积分发放记录 最终发放积分(浮点数) 关联积分规则(m2o) 事件编码(文本) 推荐导购员(m2o) 推荐会员(m2o) 关系门店(m2o) 成本事业部(m2o) 会员(m2o) 成本事业部名称(文本) 会员名称(文本) 与积分发放规则、导购员、会员、门店、事业部建立m2o关系 1. 会员有两个m2o,分别用户记录发放会员和发放会员的推荐会员也就是老客 2. 事件编码用户维护触发本次积分发放记录产生的源头单据编码如:邀请下单记录的编码 邀请下单记录 成本事业部(m2o) 选择积分发放规则(m2o) 下单门店(m2o) 购买商品(文本) 下单金额(整数) 会员(m2o) 导购(m2o) 与成本事业部、积分发放规则、下单门店、会员、导购等建立m2o的关系 1. 会员、下单门店、导购属于必要信息 2. 成本事业部、积分发放规则是业务流程中自动计算回填的数据 Step3 利用界面设计器,设计出必要的管理页面 以事业部为例,构建管理页面。其他模型依次按例子建立管理页面 进入界面设计器,应用选择全员营销,模型选择事业部,点击添加页面下的直接创建 设置页面标题、模型(自动带上可切换)、业务类型(运营管理后续会扩展其他类型)、视图类型(表单)后点击确认按钮进入事业部表单设计页面 进入页面设计器,对事业部表单页面进行设计(更多细节介绍,请参考界面设计产品使用手册) a. 左侧为物料区:分为组件、模型。 ⅰ. 【组件】选项卡下为通用物料区,我们可以为页面增加对应布局、字段(如同在模型设计器增加字段)、动作、数据、多媒体等等 ⅱ. 【模型】选项卡下为页面对应模型的自定义字段、系统字段、以及模型已有动作 b. 中间是设计区域 c. 右侧为属性面板,在设计区域选择中组件会显示对应组件的可配置参数 在左侧【组件】选项卡下,拖入布局组件【分组】,并设置组件【标题属性】为基础信息 在左侧【组件】选项卡下,再次拖入布局组件【分组】,并设置组件【标题属性】为门店列表 在左侧【模型】选项卡下,分别把自定义字段中的【事业部负责人】和系统字段中的【名称】拖入【基础信息】分组,把自定义字段中的【门店列表】字段拖入门店列表分组 在设计区域切换【门店列表】展示组件为【表格】 此时【门店列表】展示形式变成了表格形式,选中【门店列表】组件,会发现左侧【模型】选项卡下的当前模型切换成了【门店】,同时我们在右属性面板区置空其【标题属性】 设计区选中【门店列表】的表格组件,分别把自定义字段中的【默认积分发规则】、【门店类型】、【导购列表】和系统字段中的【名称】拖入【门店列表】表格组件的表格字段设计区 设计区选中【门店列表】的表格组件的【创建】按钮,点击【打开弹窗】设计关系字段【门店】的新增页面 11.分别把自定义字段中的【默认积分发规则】、【门店类型】和系统字段中的【名称】拖入门店的新增页面设计区 选中弹出框中【取消】取消按钮,设置其【按钮样式】属性为【次要按钮】 关闭弹出框,回到主设计区 设计区选中【门店列表】的表格组件的【删除】按钮,设置其【按钮样式】属性为【次要按钮】,【二次确认】属性打开 设计区选中【门店列表】的表格组件中操作列的【编辑】按钮,点击【打开弹窗】设计关系字段【门店】的编辑页面, a. 分别把自定义字段中的【默认积分发规则】、【门店类型】和系统字段中的【名称】拖入门店的新增页面设计区。 b. 选中弹出框中【取消】取消按钮,设置其【按钮样式】属性为【次要按钮】 c. 把门店类型展示组件切换为【单选框】 d. 关闭弹出框 设计区选择非【门店列表】组件如基础信息,模型切换为主模型【事业部】,在左侧【模型】选项卡下,把动作分类下的提交类型【创建】动作拖入中间设计区的动作区 选择中展示名为【确定】的创建动作按钮,在右侧属性面板中设置:是否隐藏属性为【条件隐藏】,隐藏条件为【id非空】 在左侧【模型】选项卡下,把动作分类下的提交类型【更新】动作拖入中间设计区的动作区 选择中展示名为【确定】的更新动作按钮,在右侧属性面板中设置:是否隐藏属性为【条件隐藏】,隐藏条件为【id为空】。之所以同时拖入【创建】和【更新】动作并都命名为确认,是期望这个页面同时可以做为新增页面也可以做为编辑页面,只不过要通过条件隐藏来设置按钮的出现规则 在左侧【组件】选项卡下,把动作分类下的【客户端动作】拖入中间设计区的动作区 选择设计区【客户端动作】,在右侧属性面板中设置:动作名称为【返回】,客户端行为为【返回上一个页面】并点击保存 选择设计区【返回】动作,在右侧属性面板中设置:按钮样式为【返回】,【二次确认】属性打开并设置提示文字为【返回页面操作将不被保存】,可以点击预览二次确认看效果 点击【发布】按钮,页面成功发布,每发布一次会有一个例子版本,可以通过历史版本进行恢复 点击右上角历史版本图标,进入历史版本查看页面 在历史版本页面可以选择对应历史版本记录,并通过【恢复此版本】来完成页面的历史版本切换 接下来我们为事业部模型创建表格管理页面,入口同编辑页面。设置页面标题、模型(自动带上可切换)、业务类型(运营管理后续会扩展其他类型)、视图类型(表格)后点击确认按钮进入事业部表格设计页面 进入页面设计器,对事业部表格页面进行设计(更多细节介绍,请参考界面设计产品使用手册) 在左侧【模型】选项卡下,分别把自定义字段中的【事业部负责人】和系统字段中的【名称】拖入表格组件的表格字段设计区 在左侧【组件】选项卡下,把动作分类下的【跳转动作】拖入中间设计区的动作区,并在右侧属性面板中设置动作名称为【新增】,数据控制类型为【不进行数据处理】,打开方式为【当前窗口打开】,动作跳转页面为【事业部编辑】页面,并点击保存 在左侧【组件】选项卡下,把动作分类下的【跳转动作】拖入中间设计区的行内动作区,并在右侧属性面板中设置动作名称为【编辑】,数据控制类型为【处理单条数据】,打开方式为【当前窗口打开】,动作跳转页面为【事业部编辑】页面,并点击保存 在左侧【模型】选项卡下,把动作分类下的【删除】拖入中间设计区的动作区,并在右侧属性面板中设置动作名称为【删除】,按钮样式为【次要按钮】,【二次确认】属性打开 点击右上角【显示母版】进入页面最终展示形式,点击添加菜单项,并在输入框中输入【事业部管理】 点击菜单右侧设置图标,选择【绑定已有页面】,进行菜单与页面的绑定操作 在绑定页面中,模型选择【事业部】,视图选择【事业部管理】,点击确认按钮提交 拖动【事业部管理】菜单到【积分管理】父菜单下 最后别忘了点击右上角【发布】按钮对【事业部管理】表格页面进行发布,回到界面设计器首页查看刚刚建好的两个页面 以事业部为例分别对门店、导购、会员、积分发放规则、积分发放记录、邀请下单记录等模型进行页面设计,这里不再累赘,请按照自身学习需要,尝试进行界面设计 Step4 通过流程设计器,设计对应业务流程 我们先来整理下核心流程即:邀请下单流程 Step4.1 创建导购邀请下单记录触发流程 进入流程设计器,点击【创建】按钮 注意:流程中需要获取关系类型的字段(如:O2O、O2M、M2O或M2M),这种类型都是复杂的对象字段,除关联字段(一般为ID)以外的字段,需要通过【数据获取】节点单独获取【关系字段】的对象数据。所以在流程设计中经常会用到【数据获取】节点 左上角编辑流程名称为【导购邀请下单触发流程】,点击第一个【触发】节点,触发方式选择模型触发,模型选择【导购邀请下单】,触发场景选择【新增数据时】,点击该节点的【保存】按钮 点击流程图节点间的【+】图标选择增加【获取数据】节点,或者拖动左侧物料区【获取数据】到特定的【+】图标 点击【获取数据】,在右侧属性面板中设置【获取数据条数】为单条,选择模型为【导购】,点击【筛选条件】的【{X}】图标,进行数据获取的条件设置 选择条件字段为【ID】条件操作符为【等于】,条件为变量的导购字段的ID。当上下文只有一个变量时默认不需要选择,这里默认的是【触发[导购邀请下单记录]】,设置好以后点击确认,回到属性面板设置【未获取到数据时执行方式】为【终止流程】,并点击节点【保持】按钮 再增加一个【获取数据】节点,在右侧属性面板中设置 a. 【获取数据条数】为单条,选择模型为【会员】 b. 点击【筛选条件】的【{X}】图标,进行数据获取的条件设置,选择条件字段为【ID】条件操作符为【等于】,条件为变量【导购邀请下单记录】的会员关系字段的ID字段。因为上下文中存在多个变量时需要选择对应变量,跟获取导购数据有点区别,在获取导购数据时,上下文中只有此次【导购邀请下单记录】所以不需要选择对应变量,设置好以后点击【确认】按钮 c. 回到属性面板设置【未获取到数据时执行方式】为【终止流程】 d. 最后点击节点【保持】按钮。…

    2024年5月23日
    1.9K00
  • 登录日志

    1. 登录日志 登录日志:记录企业成员/用户登录平台的历史明细,包括登录时间、位置、IP、登录设备、登录平台等信息,登录平台包括:PC Web、小程序、H5、APP。登录日志不需要通过审计规则订阅,平台会记录每位用户的登录日志。 操作支持导出、查看详情。

    2024年6月20日
    1.4K00

Leave a Reply

Please Login to Comment