<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Kie_-_Decision_Table</id>
	<title>Drools Kie - Decision Table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Kie_-_Decision_Table"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Kie_-_Decision_Table&amp;action=history"/>
	<updated>2026-04-17T12:14:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Drools_Kie_-_Decision_Table&amp;diff=41273&amp;oldid=prev</id>
		<title>Wang Hao: /* Testing total Price */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Kie_-_Decision_Table&amp;diff=41273&amp;oldid=prev"/>
		<updated>2016-08-31T03:15:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Testing total Price&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cat|Drools|030}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;true&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; lang=&amp;quot;中文版&amp;quot; headingmark2=&amp;quot;。&amp;quot; &amp;gt;&lt;br /&gt;
;title: Drools Guvnor - Decision Table&lt;br /&gt;
;author: Bernard Szlachta (NobleProg Ltd)&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drools Guvnor - Decision Table ==&lt;br /&gt;
{{Can I use your material}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation and Exercises ⌘。 ==&lt;br /&gt;
# Instructor does it himself and explains the steps&lt;br /&gt;
# The group does the exercise with the instructor&lt;br /&gt;
== ShoopingCart Fact Type (from previous exercises) ⌘。 ==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 package nppack;&lt;br /&gt;
 public class ShoppingCart implements java.io.Serializable&lt;br /&gt;
 {&lt;br /&gt;
   static final long serialVersionUID = 1L;&lt;br /&gt;
    @org.kie.api.definition.type.Label(&amp;quot;Total Price&amp;quot;)&lt;br /&gt;
    private java.math.BigDecimal totalPrice;  &lt;br /&gt;
 &lt;br /&gt;
   @org.kie.api.definition.type.Label(&amp;quot;DiscountRate&amp;quot;)&lt;br /&gt;
   private java.math.BigDecimal discountRate;&lt;br /&gt;
&lt;br /&gt;
   @org.kie.api.definition.type.Label(value = &amp;quot;Total Price After Discount&amp;quot;)&lt;br /&gt;
   private java.math.BigDecimal totalPriceAfterDiscount;&lt;br /&gt;
&lt;br /&gt;
   public ShoppingCart()&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public java.math.BigDecimal getTotalPrice()&lt;br /&gt;
   {&lt;br /&gt;
      return this.totalPrice;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setTotalPrice(java.math.BigDecimal totalPrice)&lt;br /&gt;
   {&lt;br /&gt;
      this.totalPrice = totalPrice;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public java.math.BigDecimal getDiscountRate()&lt;br /&gt;
   {&lt;br /&gt;
      return this.discountRate;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setDiscountRate(java.math.BigDecimal discountRate)&lt;br /&gt;
   {&lt;br /&gt;
      this.discountRate = discountRate;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public java.math.BigDecimal getTotalPriceAfterDiscount()&lt;br /&gt;
   {&lt;br /&gt;
      return this.totalPriceAfterDiscount;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setTotalPriceAfterDiscount(&lt;br /&gt;
         java.math.BigDecimal totalPriceAfterDiscount)&lt;br /&gt;
   {&lt;br /&gt;
      this.totalPriceAfterDiscount = totalPriceAfterDiscount;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public ShoppingCart(java.math.BigDecimal totalPrice,&lt;br /&gt;
         java.math.BigDecimal discountRate,&lt;br /&gt;
         java.math.BigDecimal totalPriceAfterDiscount)&lt;br /&gt;
   {&lt;br /&gt;
      this.totalPrice = totalPrice;&lt;br /&gt;
      this.discountRate = discountRate;&lt;br /&gt;
      this.totalPriceAfterDiscount = totalPriceAfterDiscount;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modification to previous scenario ⌘。==&lt;br /&gt;
# Copy previous project to &amp;#039;&amp;#039;&amp;#039;npproj2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Make sure that the Group ID is &amp;#039;&amp;#039;&amp;#039;nppack&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Applying Progressive Discounts 应用累进折扣 - 决策表。⌘==&lt;br /&gt;
We want to apply discounts according to the table below 根据下表应用折扣:&lt;br /&gt;
 0           -  10,000  -&amp;gt; 0%&lt;br /&gt;
 10,000(inc) -  50,000  -&amp;gt; 10%&lt;br /&gt;
 50,000(inc) -  80,000  -&amp;gt; 12%&lt;br /&gt;
 80,000(inc)  -  above  -&amp;gt; 15%&lt;br /&gt;
&lt;br /&gt;
* New Item -&amp;gt; Guided Decision Table&lt;br /&gt;
** Name: &amp;#039;&amp;#039;&amp;#039;Progressive Discount Table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[File:ClipCapIt-160823-114756.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Applying Progressive Discounts - Source 应用分段折扣 - 源码 。⌘===&lt;br /&gt;
* View Source&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 package nppack;&lt;br /&gt;
&lt;br /&gt;
 //from row number: 1&lt;br /&gt;
 rule &amp;quot;Row 1 Progressive Discount Table&amp;quot;&lt;br /&gt;
 	dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
 	when&lt;br /&gt;
 		$sc : ShoppingCart( totalPrice &amp;gt;= 10000B , totalPrice &amp;lt; 50000B )&lt;br /&gt;
 	then&lt;br /&gt;
 		modify( $sc ) {&lt;br /&gt;
 				setDiscountRate( 0.1B )&lt;br /&gt;
 		}&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 //from row number: 2&lt;br /&gt;
 rule &amp;quot;Row 2 Progressive Discount Table&amp;quot;&lt;br /&gt;
 	dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
 	when&lt;br /&gt;
 		$sc : ShoppingCart( totalPrice &amp;gt;= 50000B , totalPrice &amp;lt; 80000B )&lt;br /&gt;
 	then&lt;br /&gt;
 		modify( $sc ) {&lt;br /&gt;
 				setDiscountRate( 0.12B )&lt;br /&gt;
 		}&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 //from row number: 3&lt;br /&gt;
 rule &amp;quot;Row 3 Progressive Discount Table&amp;quot;&lt;br /&gt;
 	dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
 		$sc : ShoppingCart( totalPrice &amp;gt;= 80000B )&lt;br /&gt;
 	then&lt;br /&gt;
		modify( $sc ) {&lt;br /&gt;
 				setDiscountRate( 0.15B )&lt;br /&gt;
 		}&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Test 。⌘==&lt;br /&gt;
:[[File:ClipCapIt-160823-123006.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
== Problem with recurrence 。⌘==&lt;br /&gt;
:[[File:ClipCapIt-160831-111552.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
== Stop condition for rules 。⌘==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
package nppack;&lt;br /&gt;
dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
rule &amp;quot;Row 1 Progressive Discount Table&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
		$sc : ShoppingCart( totalPrice &amp;gt;= 10000B , totalPrice &amp;lt; 50000B , discountRate == null )&lt;br /&gt;
	then&lt;br /&gt;
		modify( $sc ) {	setDiscountRate( 0.1B ) }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Row 2 Progressive Discount Table&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
		$sc : ShoppingCart( totalPrice &amp;gt;= 50000B , totalPrice &amp;lt; 80000B , discountRate == null )&lt;br /&gt;
	then&lt;br /&gt;
		modify( $sc ) {	setDiscountRate( 0.12B ) }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Row 3 Progressive Discount Table&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
		$sc : ShoppingCart( totalPrice &amp;gt;= 80000B , discountRate == null )&lt;br /&gt;
	then&lt;br /&gt;
		modify( $sc ) {	setDiscountRate( 0.15B ) }&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Calculating Total Price rule ==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
package nppack;&lt;br /&gt;
&lt;br /&gt;
import java.lang.Number;&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Calculate total price&amp;quot;&lt;br /&gt;
	dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
		$sc : ShoppingCart(discountRate != null, priceAfterDiscount == null)&lt;br /&gt;
	then&lt;br /&gt;
		modify( $sc ) {&lt;br /&gt;
				setPriceAfterDiscount( $sc.totalPrice*(1-$sc.discountRate) ),&lt;br /&gt;
		}&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing total Price ==&lt;br /&gt;
:[[File:ClipCapIt-160831-111709.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
== Exercises 3.1 ⌘==&lt;br /&gt;
# Implement the decision table above 实现上面的决策表&lt;br /&gt;
&lt;br /&gt;
== Exercises 3.2 ⌘==&lt;br /&gt;
# Create another rule which would calculate totalPrice after discount has been applied 建立一个规则，用以计算打折以后的 totalPrice &lt;br /&gt;
&lt;br /&gt;
== Exercise 3.3 (optional)* ⌘==&lt;br /&gt;
# Add a field &amp;quot;Loyal Customer&amp;quot; in the shopping cart fact type and implement decision table, when if the customer is loyal customer, they have extra 1% off&lt;br /&gt;
# 在购物车的fact type里增加一个field &amp;quot;Loyal Customer&amp;quot; ，并且实现决策表, 当客户是loyal customer的时候, 他们再得到 1% 折扣&lt;br /&gt;
&lt;br /&gt;
== Next Module ==&lt;br /&gt;
[[Drools Kie - Rule Templates]]&lt;/div&gt;</summary>
		<author><name>Wang Hao</name></author>
	</entry>
</feed>