跳到主要内容

定义填值规则

自动生成规则编码,比如: 订单号的生成,前缀+年月日时分秒 时间戳

如果创建一个规则实现?

  • 第一步:实现接口 IFillRuleHandler

参考实例:

/**
* 填值规则Demo:生成订单号
* 【测试示例】
*/
public class OrderNumberRule implements IFillRuleHandler {

@Override
public Object execute(JSONObject params, JSONObject formData) {
String prefix = "CN";
//订单前缀默认为CN 如果规则参数不为空,则取自定义前缀
if (params != null) {
Object obj = params.get("prefix");
if (obj != null) prefix = obj.toString();
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
int random = RandomUtils.nextInt(90) + 10;
String value = prefix + format.format(new Date()) + random;
// 根据formData的值的不同,生成不同的订单号
String name = formData.getString("name");
if (!StringUtils.isEmpty(name)) {
value += name;
}
return value;
}

}

  • 第二步:在规则管理里面配置

  • 第三步:通过接口执行规则生成

参数:

ruleCode | 规则编码

formData | 表单数据JSON

接口URL: /sys/fillRule/executeRuleByCode/{ruleCode}

  • 第四步:批量编码规则生成接口

/sys/fillRule/executeRuleByCode/executeRuleByCodeBatch

具体用法参考:

org.jeecg.modules.system.controller.SysFillRuleController#executeByRuleCodeBatch

其他技巧

如何便捷的使用系统变量

在规则参数填写 value 时,使用 #{xxx} 的方式使用系统变量。 可使用变量参考如下:

  • sysUserId:当前登录用户的ID
  • sysUserCode:当前登录用户的username
  • sysUserName:当前登录用户的真实姓名(realname)
  • sysOrgCode:当前登录用户的部门编号
  • sysDate:当前系统日期(触发规则时)
  • sysTime:当前系统日期时间(触发规则时)

JAVA代码里,如何直接调用生成编码?

 * @param ruleCode 填值规则Code
* @param formData 表单参数
FillRuleUtil.executeRule(String ruleCode, JSONObject formData)

前端JS里如何调用生成编码?

可通过put请求调用后台填值规则接口来实现生成编码。

示例

<script setup>
import { defHttp } from '/@/utils/http/axios';
const ruleBaseURL = '/sys/fillRule/executeRuleByCode/';
import { ref } from 'vue';
const orderNum = ref('');
const url = ruleBaseURL + 'order_num_rule';
const getOrderNum = () => {
defHttp.put({ url }, { isTransformResponse: false }).then((res) => {
// 执行成功,获取返回的值,并赋到页面上
if (res.success) {
orderNum.value = res.result;
}
});
};
</script>

Online表单的JS增强里如何调用生成编码?

可通过putAction方法来调用接口生成编码

表单设计器 JS 增强里如何调用生成编码?

可以通过api.put()方法实现获取填值规则的值,获取到之后再通过api.setFormData()方法赋到页面上。 api的使用方法可见 表单设计器-->高级操作手册-->JS增强文档

示例

// 获取所有 form data
var formData = api.getFormData() || {}
// 请求后台的填值规则接口地址
var url = '/sys/fillRule/executeRuleByCode/'
var ruleCode = 'order_num_rule'
api.put(url + ruleCode, formData).then(res => {
// 执行成功,获取返回的值,并赋到页面上
if (res.success) {
var value = res.result
api.setFormData('orderNum', value)
}
})