> 自动生成规则编码,比如: 订单号的生成,前缀+年月日时分秒 时间戳 如果创建一个规则实现? * 第一步:实现接口 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; } } ``` * 第二步:在规则管理里面配置 ![](https://img.kancloud.cn/d6/ae/d6ae25b38d3e1bf51ae44f1b87fd23c8_978x513.png) * 第三步:通过接口执行规则生成 参数: ruleCode | 规则编码 formData | 表单数据JSON 接口URL: /sys/fillRule/executeRuleByCode/{ruleCode} ![](https://img.kancloud.cn/0c/5d/0c5d450c886376746b3b3d31c3c3c40f_801x256.png) * 第四步:批量编码规则生成接口 /sys/fillRule/executeRuleByCode/executeRuleByCodeBatch 具体用法参考: org.jeecg.modules.system.controller.SysFillRuleController#executeByRuleCodeBatch ![](https://img.kancloud.cn/07/50/0750994f53462800e816d79eb9277a39_757x461.png) ## 其他技巧 ### JAVA代码里,如何直接调用生成编码? ~~~ * @param params 页面配置参数 * @param formData 动态参数 FillRuleUtil.executeRule(String ruleCode, JSONObject formData) ~~~ ### 前端JS里如何调用生成编码? 可通过`get`请求调用后台填值规则接口来实现生成编码。 #### 示例 ``` js import { getAction } from '@api/manage' const ruleBaseURL = '/sys/fillRule/executeRuleByCode/' export default { name: 'App', data() { return { // 页面的数据 model: {}, // 请求的url url: { orderNum: ruleBaseURL + 'order_num_rule' } } }, methods: { getOrderNum() { getAction(this.url.rule.orderNum, this.model).then(res => { // 执行成功,获取返回的值,并赋到页面上 if (res.success) { this.model.orderNum = res.result } }) } } } ``` ### Online表单的JS增强里如何调用生成编码? 和前端JS里一样,可通过`getAction`方法来调用接口生成编码 ### 表单设计器 JS 增强里如何调用生成编码? 可以通过`api.get()`方法实现获取填值规则的值,获取到之后再通过`api.setFormData()`方法赋到页面上。 api的使用方法可见 `表单设计器-->高级操作手册-->JS增强`文档 #### 示例 ``` js // 获取所有 form data var formData = api.getFormData() || {} // 请求后台的填值规则接口地址 var url = '/sys/fillRule/executeRuleByCode/' var ruleCode = 'order_num_rule' api.get(url + ruleCode, formData).then(res => { // 执行成功,获取返回的值,并赋到页面上 if (res.success) { var value = res.result api.setFormData('orderNum', value) } }) ```