定义填值规则
自动生成规则编码,比如: 订单号的生成,前缀+年月日时分秒 时间戳
如果创建一个规则实现?
- 第一步:实现接口 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
:当前登录用户的IDsysUserCode
:当前登录用户的usernamesysUserName
:当前登录用户的真实姓名(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)
}
})