SpringBoot+Drools+模板引擎,优惠券的动态添加以及购物车
结算
⽬录
⼀、前⾔
需求:动态添加优惠券以及购物车优惠结算
解析需求:
优惠券:优惠券⾦额、优惠券名称、优惠券编码;
购物车优惠结算结果=购物车⾦额-优惠券;
解决思路:
我们把购物车优惠结果作为⼀个fact对象,通过匹配规则⽂件,来修改其购物⾦额;但这个规则⽂件是不固定的,因此我们可以通过模板引擎,传⼊优惠券相关参数,⽣成规则内容存放在数据库或⽣成规则⽂件,如图所⽰:
开发环境及⼯具:
windows10、jdk11、Spring Boot 2.5.2、Drools 7.54.0、模板引擎、MySql 8.0.25、MyBatis;
idea 2021.1.3
⼆、项⽬⽂件结构以及数据库表结构
创建⼀个Spring Boot项⽬,项⽬的⽂件结构如下:
创建⼀个数据库表:promote,sql如下:
/*
Navicat Premium Data Transfer
Source Server        : localhost
Source Server Type    : MySQL
Source Server Version : 80026
Source Host          : localhost:3306
Source Schema        : drools_test
Target Server Type    : MySQL
Target Server Version : 80026
File Encoding        : 65001
Date: 28/07/2021 14:31:23
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for promote
-- ----------------------------
DROP TABLE IF EXISTS `promote`;
CREATE TABLE `promote`  (
`id` int(0) NOT NULL AUTO_INCREMENT,
`promote_code` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '优惠券编码',
`promote_rule` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '优惠规则',
`promote_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '优惠券名称',  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
三、主要项⽬⽂件说明
1、pom⽂件
drools相关:drools-compiler、drools-mvel(Drools7.44.0以下版本可以不添加)
Spring Boot相关:spring-boot-starter-web、spring-boot-starter-log4j2、spring-boot-starter-test
mybatis:mybatis-spring-boot-starter
mysql:mysql-connector-java
模板引擎:ST4
其他:thymeleaf、lombok、fastjson、 gson
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/>
</parent>
<groupId>com.qyl</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
<drools.version>7.54.0.Final</drools.version>
</properties>
<dependencies>
<!-- drools begin-->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
springboot结构
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-mvel</artifactId>
<version>${drools.version}</version>
</dependency>
<!-- drools end -->
<!-- spring boot begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- use log4j2 remove logging-->
<exclusion>
<groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>
<!-- mybatis -->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- mysql 链接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<scope>runtime</scope>-->
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependency>
<!-- lombok begin -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- lombok end -->
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<!-- Gson -->
<dependency>
<groupId&le.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>ST4</artifactId>
<version>4.0.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <version>2.5.2</version>
</plugin>
</plugins>
</build>
</project>
2、配置⽂件