5 Star 26 Fork 4

LJ / VoucherRule

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.11 KB
一键复制 编辑 原始数据 按行查看 历史
laijie 提交于 2015-04-08 16:03 . 修改项目README文档

会计凭证规则处理库

1. Required

  • JDK 1.5
  • Maven 3.0.0+
  • JSR223
  • Groovy 2.0.0+

2. 介绍

根据规则脚本文件(使用Groovy脚本语言编写,如:rules.groovy)来生成会计凭证。

规则脚本文件可以动态添加修改,不需要重启服务(重新加载规则脚本文件即可)。

3. why

在将业务数据转换成会计凭证时,往往都涉及到如何描述转换的问题,这些问题的描述从而形成转换规则。

而随着业务系统的壮大,转换规则变的复杂且繁多,并且分散在系统的各个角落里,从而造成维护上的困难。

描述转换规则的简洁性,由繁到简依次排序为:文档 < 规则记录 < 静态语言 < 动态语言 < 领域专用语言

选择Groovy,是因为它是兼容Java的,并且汲取了rubypython等动态语言的特点。

本库则是在Groovy基础上构建的领域专用语言。 目的在于简化转换规则的维护。

4. 安装

  • 打包
// 跳过测试进行安装
mvn package -DskipTests

5. 使用

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]
===============
Groovy
1
https://gitee.com/nikytwo/VoucherRule.git
git@gitee.com:nikytwo/VoucherRule.git
nikytwo
VoucherRule
VoucherRule
master

搜索帮助