drools Decision Table决策表Word文档下载推荐.docx
《drools Decision Table决策表Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《drools Decision Table决策表Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
![drools Decision Table决策表Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/c5424d05-a73a-425e-857c-ee8cb1646df3/c5424d05-a73a-425e-857c-ee8cb1646df31.gif)
//速算扣除数
privatedoublewageminus;
//当月工资扣减数
/**
*当月工资
*@return
*/
publicdoublegetWage(){
returnwage;
}
publicvoidsetWage(doublewage){
this.wage=wage;
*当月税后工资
publicdoublegetActualwage(){
returnactualwage;
publicvoidsetActualwage(doubleactualwage){
this.actualwage=actualwage;
*全月应纳税所得额
publicdoublegetWagemore(){
returnwagemore;
publicvoidsetWagemore(doublewagemore){
this.wagemore=wagemore;
*税率
publicdoublegetCess(){
returncess;
publicvoidsetCess(doublecess){
this.cess=cess;
*速算扣除数
publicdoublegetPreminus(){
returnpreminus;
publicvoidsetPreminus(doublepreminus){
this.preminus=preminus;
*当月工资扣减数
publicdoublegetWageminus(){
returnwageminus;
publicvoidsetWageminus(doublewageminus){
this.wageminus=wageminus;
publicCalculation(){
publicCalculation(doublewage){
super();
publicCalculation(doublewage,doublewagemore){
this.wagemore=wagemore;
@Override
publicStringtoString(){
return"
当月工资="
+wage+"
\n当月税后工资="
+actualwage+"
\n全月应纳税所得额="
+wagemore+
"
\n税率="
+cess+"
\n速算扣除数="
+preminus+"
\n当月工资扣减数="
+wageminus;
}
2.1.2calculation.drl
packagecom.flagleader.bean
globalCalculationcal;
no-looptrue
rule"
全月应纳税额"
salience3
when
$cal:
Calculation(wage>
0)
then
#System.out.println("
-----全月应纳税额------"
);
cal.setWagemore(cal.getWage()-3500);
update(cal);
end
设置税率"
salience2
eval(true)
-----设置税率------"
if(cal.getWagemore()<
=1500){
cal.setCess(0.03);
cal.setPreminus(0);
}
elseif(cal.getWagemore()>
1500&
&
cal.getWagemore()<
=4500){
cal.setCess(0.1);
cal.setPreminus(105);
elseif(cal.getWagemore()>
4500&
=9000){
cal.setCess(0.2);
cal.setPreminus(555);
9000&
=35000){
cal.setCess(0.25);
cal.setPreminus(1005);
35000&
=55000){
cal.setCess(0.3);
cal.setPreminus(2755);
elseif((cal.getWagemore()>
55000&
=80000)){
cal.setCess(0.35);
cal.setPreminus(5505);
80000){
cal.setCess(0.45);
cal.setPreminus(13505);
insert(cal);
税后工资"
salience1
#System.out.println("
-----税后工资------"
cal.setWageminus(cal.getWagemore()*cal.getCess()-cal.getPreminus());
cal.setActualwage(cal.getWage()-cal.getWageminus());
insert(cal);
2.1.3CalculationDrl.java
importorg.apache.log4j.Logger;
importorg.drools.KnowledgeBase;
importorg.drools.builder.KnowledgeBuilder;
importorg.drools.builder.KnowledgeBuilderFactory;
importorg.drools.builder.ResourceType;
importorg.drools.io.ResourceFactory;
importorg.drools.runtime.StatefulKnowledgeSession;
@SuppressWarnings("
restriction"
)
publicclassCalculationDrl{
staticLoggerlogger=Logger.getLogger(CalculationDrl.class);
publicstaticvoidmain(String[]args){
logger.info("
开始"
KnowledgeBuilderkBuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
//规则生成器:
将编写好的规则进行编译
kBuilder.add(ResourceFactory.newClassPathResource("
calculation.drl"
CalculationDrl.class),ResourceType.DRL);
//添加规则到规则生成其中进行编译
KnowledgeBasekBase=kBuilder.newKnowledgeBase();
//收集应用当中的知识定义知识库对象
kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());
//添加规则包
StatefulKnowledgeSessionsession=kBase.newStatefulKnowledgeSession();
//与规则的交互通道
Calculationcal=newCalculation(10000);
//输入当月工资
session.setGlobal("
cal"
cal);
session.insert(cal);
//将对象添加到交互通道中
session.fireAllRules();
//执行规则
session.dispose();
//释放资源
System.out.println(cal.toString());
结束"
2.1.4calculation.xls
2.1.5CalculationXls.java
importorg.drools.builder.DecisionTableConfiguration;
importorg.drools.builder.DecisionTableInputType;
publicclassCalculationXls{
DecisionTableConfigurationdtc=KnowledgeBuilderFactory.newDecisionTableConfiguration();
dtc.setInputType(DecisionTableInputType.XLS);
KnowledgeBuilderbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newClassPathResource("
com/flagleader/bean/calculation.xls"
CalculationXls.class),ResourceType.DTABLE,dtc);
KnowledgeBasebase=builder.newKnowledgeBase();
base.addKnowledgePackages(base.getKnowledgePackages());
StatefulKnowledgeSessionsession=base.newStatefulKnowledgeSession();
Calculationcal=newCalculation(10000,6500.0);
2.1.6GenerationRules.java
importjava.io.*;
importorg.drools.decisiontable.InputType;
importorg.drools.decisiontable.SpreadsheetCompiler;
importorg.junit.Test;
publicclassGenerationRules{
@Test
publicvoidcompile()throwsFileNotFoundException{
Filefile=newFile(
"
E:
\\qzxx_workspace\\calculation\\src\\main\\java\\com\\flagleader\\bean\\calculation.xls"
InputStreamis=newFileInputStream(file);
SpreadsheetCompilerconverter=newSpreadsheetCompiler();
Stringdrl=pile(is,InputType.XLS);
System.out.println("
\n\n"
+drl);
2.1.7calculations.drl
//generatedfromDecisionTable
importcom.flagleader.bean.Calculation;
importjava.lang.Object;
functiondoublegetCes(doublecess){
//System.out.println("
cess="
+cess);
returncess;
}
functiondoublegetPre(doublepreminus){
preminus="
+preminus);
returnpreminus;
salience65526
System.out.println("
//rulevaluesatD11,headeratD6
test_11"
salience65525
Calculation(wagemore>
0,wagemore<
=1500)
cal.setCess(getCes(0.03));
cal.setPreminus(getPre(0.00));
//rulevaluesatD12,headeratD6
test_12"
salience65524
1500,wagemore<
=4500)
cal.setCess(getCes(0.1));
cal.setPreminus(getPre(105.00));
//rulevaluesatD13,headeratD6
test_13"
salience65523
4500,wagemore<
=9000)
cal.setCess(getCes(0.2));
cal.setPreminus(getPre(555.00));
//rulevaluesatD14,headeratD6
test_14"
salience65522
9000,wagemore<
=35000)
cal.setCess(getCes(0.25));
cal.setPreminus(getPre(1005.00));
//rulevaluesatD15,headeratD6
test_15"
salience65521
35000,wagemore<
=55000)
cal.setCess(getCes(0.3));
cal.setPreminus(getPre(2755.00));
//rulevaluesatD16,headeratD6
test_16"
salience65520
55000,wagemore<
=80000)
cal.setCess(getCes(0.35));
cal.setPreminus(getPre(5505.00));
//rulevaluesatD17,headeratD6
test_17"
salience65519
80000,wagemore<
=100000)
cal.setCess(getCes(0.45));
cal.setPreminus(getPre(13505.00));
salience65518
+cal.getCess());
2.1.8CalculationDrlXls.java
publicclassCalculationDrlXls{
staticLoggerlogger=Logger.getLogger(CalculationDrlXls.class);
calculations.drl"
CalculationDrlXls.class),ResourceType.DRL);
//添加规