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

如果创建一个规则实现?

* 第一步:实现接口 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 ruleCode 填值规则Code

* @param formData 表单参数

FillRuleUtil.executeRule(String ruleCode, JSONObject formData)

~~~

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

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

#### 示例

``` js

import { putAction } from '@api/manage'

const ruleBaseURL = '/sys/fillRule/executeRuleByCode/'

export default {

name: 'App',

data() {

return {

// 页面的数据

model: { orderNum: '' },

// 请求的url

url: {

rule: {

orderNum: ruleBaseURL + 'order_num_rule'

},

}

}

},

methods: {

getOrderNum() {

putAction(this.url.rule.orderNum, this.model).then(res => {

// 执行成功,获取返回的值,并赋到页面上

if (res.success) {

this.model.orderNum = res.result

}

})

}

}

}

```

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

和前端JS里一样,可通过`putAction`方法来调用接口生成编码

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

可以通过`api.put()`方法实现获取填值规则的值,获取到之后再通过`api.setFormData()`方法赋到页面上。

api的使用方法可见 `表单设计器-->高级操作手册-->JS增强`文档

#### 示例

``` 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)

}

})

```

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐