代码拉取完成,页面将自动刷新
根据规则脚本文件(使用Groovy
脚本语言编写,如:rules.groovy)来生成会计凭证。
规则脚本文件可以动态添加修改,不需要重启服务(重新加载规则脚本文件即可)。
在将业务数据转换成会计凭证时,往往都涉及到如何描述转换的问题,这些问题的描述从而形成转换规则。
而随着业务系统的壮大,转换规则变的复杂且繁多,并且分散在系统的各个角落里,从而造成维护上的困难。
描述转换规则的简洁性,由繁到简依次排序为:文档 < 规则记录 < 静态语言 < 动态语言 < 领域专用语言
选择Groovy
,是因为它是兼容Java
的,并且汲取了ruby
和python
等动态语言的特点。
本库则是在Groovy
基础上构建的领域专用语言。
目的在于简化转换规则的维护。
// 跳过测试进行安装
mvn package -DskipTests
1 添加规则文件:
// 定义规则,规则实际上是一个闭包函数
def rule1 = { context, vo1, name -> // 上下文参数,应用规则时传入,数量不限。
凭证 {
制单人 name
业务日期 vo2.date
年 vo2.date[YEAR]
期间 vo2.date[MONTH] + 1
凭证字 '记'
借 {
科目编码 '102';
科目名称 '银行科目';
金额 context.amt;
摘要 '测试中文'
单位 {
核算编码 context.unitId
核算名称 context.unitName
}
项目 {
核算编码 context.projectId
核算名称 context.projectName
}
}
贷 {
科目编码 '103'
科目名称 '授权额度'
金额 context.amt
关联记录 {
类名 context.getClass()?.simpleName
标识号 context.id
}
}
}
}
// 定义完规则后需注册模板
TemplateManager.reg("规则1", tmpCenterPayIn) //将规则注册为“规则1”
2 在程序中应用规则:
// 使用“规则1”生成会计凭证集合对象,当第一个参数为`Iterable`时,会将规则应用`Iterable`的明细中
VoucherList vouchers = RuleManager.apply("规则1", list, context1, "tester");
返回的VoucherList
对象为会计凭证对象集合(多张凭证)。如下:
===============
[凭证号:记1] [年度:2015] [期间:3]
[业务日期:2015-03-31] [附件数:]
借: 102[银行科目]|{单位: 0011[AAA单位]}|{项目: 00110001[测试项目1]}; (¥1234567.89); (摘要: 测试中文);
借: 102[银行科目]|{单位: 0012[BBB单位]}|{项目: 00110002[测试项目2]}; (¥12345.67); (摘要: 测试中文);
借: 102[银行科目]|{单位: 0013[CCC单位]}|{项目: 00110003[测试项目3]}; (¥123.45); (摘要: 测试中文);
贷: 103[授权额度]; (¥1234567.89); (摘要:);
[制单人:tester]
===============
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。