diff --git a/.gitignore b/.gitignore
index de11b9df7191fc0fe10e3a3253cd5952edbbfca7..7db15212b8af97844e12985bdea326b9cd9075f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@
/itstack-demo-design-6-01/itstack-demo-design-6-01.iml
/itstack-demo-design-6-02/itstack-demo-design-6-02.iml
/itstack-demo-design-6-00/itstack-demo-design-6-00.iml
+/itstack-demo-design-7-01/itstack-demo-design-7-01.iml
+/itstack-demo-design-7-02/itstack-demo-design-7-02.iml
diff --git a/itstack-demo-design-7-01/pom.xml b/itstack-demo-design-7-01/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d07fc5f095f994f3a01f0e7f120cb6a5fb2c894
--- /dev/null
+++ b/itstack-demo-design-7-01/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ itstack-demo-design
+ org.itstack
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ itstack-demo-design-7-01
+
+
+
\ No newline at end of file
diff --git a/itstack-demo-design-7-01/src/main/java/org/itstack/demo/design/PayController.java b/itstack-demo-design-7-01/src/main/java/org/itstack/demo/design/PayController.java
new file mode 100755
index 0000000000000000000000000000000000000000..6cd09e2cbd528ae53610339cb42da3cfadf3ac9c
--- /dev/null
+++ b/itstack-demo-design-7-01/src/main/java/org/itstack/demo/design/PayController.java
@@ -0,0 +1,38 @@
+package org.itstack.demo.design;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigDecimal;
+
+public class PayController {
+
+ private Logger logger = LoggerFactory.getLogger(PayController.class);
+
+ public boolean doPay(String uId, String tradeId, BigDecimal amount, int channelType, int modeType) {
+ // 微信支付
+ if (1 == channelType) {
+ logger.info("模拟微信渠道支付划账开始。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ if (1 == modeType) {
+ logger.info("密码支付,风控校验环境安全");
+ } else if (2 == modeType) {
+ logger.info("人脸支付,风控校验脸部识别");
+ } else if (3 == modeType) {
+ logger.info("指纹支付,风控校验指纹信息");
+ }
+ }
+ // 支付宝支付
+ else if (2 == channelType) {
+ logger.info("模拟支付宝渠道支付划账开始。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ if (1 == modeType) {
+ logger.info("密码支付,风控校验环境安全");
+ } else if (2 == modeType) {
+ logger.info("人脸支付,风控校验脸部识别");
+ } else if (3 == modeType) {
+ logger.info("指纹支付,风控校验指纹信息");
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/itstack-demo-design-7-01/src/test/java/org/itstack/demo/design/ApiTest.java b/itstack-demo-design-7-01/src/test/java/org/itstack/demo/design/ApiTest.java
new file mode 100755
index 0000000000000000000000000000000000000000..f2e0b2de8aad3097db2ed6a8e779b0512622fd20
--- /dev/null
+++ b/itstack-demo-design-7-01/src/test/java/org/itstack/demo/design/ApiTest.java
@@ -0,0 +1,20 @@
+package org.itstack.demo.design;
+
+import org.junit.Test;
+
+import java.math.BigDecimal;
+
+public class ApiTest {
+
+ @Test
+ public void test_pay() {
+ PayController pay = new PayController();
+
+ System.out.println("\r\n模拟测试场景;微信支付、人脸方式。");
+ pay.doPay("weixin_1092033111", "100000109893", new BigDecimal(100), 1, 2);
+
+ System.out.println("\r\n模拟测试场景;支付宝支付、指纹方式。");
+ pay.doPay("jlu19dlxo111","100000109894",new BigDecimal(100), 2, 3);
+ }
+
+}
diff --git a/itstack-demo-design-7-02/pom.xml b/itstack-demo-design-7-02/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d413fefdd696efa19db6da872284555753af8d30
--- /dev/null
+++ b/itstack-demo-design-7-02/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ itstack-demo-design
+ org.itstack
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ itstack-demo-design-7-02
+
+
+
\ No newline at end of file
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/Pay.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/Pay.java
new file mode 100755
index 0000000000000000000000000000000000000000..2980c34ebc1203296487d4d0bfd2f009c7d1328b
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/Pay.java
@@ -0,0 +1,21 @@
+package org.itstack.demo.design.pay.channel;
+
+import org.itstack.demo.design.pay.mode.IPayMode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigDecimal;
+
+public abstract class Pay {
+
+ protected Logger logger = LoggerFactory.getLogger(Pay.class);
+
+ protected IPayMode payMode;
+
+ public Pay(IPayMode payMode) {
+ this.payMode = payMode;
+ }
+
+ public abstract String transfer(String uId, String tradeId, BigDecimal amount);
+
+}
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/WxPay.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/WxPay.java
new file mode 100755
index 0000000000000000000000000000000000000000..261dced7a8d7ecbf7c67be5d7a6db70aba87ed35
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/WxPay.java
@@ -0,0 +1,25 @@
+package org.itstack.demo.design.pay.channel;
+
+import org.itstack.demo.design.pay.mode.IPayMode;
+
+import java.math.BigDecimal;
+
+public class WxPay extends Pay {
+
+ public WxPay(IPayMode payMode) {
+ super(payMode);
+ }
+
+ public String transfer(String uId, String tradeId, BigDecimal amount) {
+ logger.info("模拟微信渠道支付划账开始。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ boolean security = payMode.security(uId);
+ logger.info("模拟微信渠道支付风控校验。uId:{} tradeId:{} security:{}", uId, tradeId, security);
+ if (!security) {
+ logger.info("模拟微信渠道支付划账拦截。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ return "0001";
+ }
+ logger.info("模拟微信渠道支付划账成功。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ return "0000";
+ }
+
+}
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/ZfbPay.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/ZfbPay.java
new file mode 100755
index 0000000000000000000000000000000000000000..fb7ebaedf093c29f3f37e4be68129391aae3966f
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/channel/ZfbPay.java
@@ -0,0 +1,25 @@
+package org.itstack.demo.design.pay.channel;
+
+import org.itstack.demo.design.pay.mode.IPayMode;
+
+import java.math.BigDecimal;
+
+public class ZfbPay extends Pay {
+
+ public ZfbPay(IPayMode payMode) {
+ super(payMode);
+ }
+
+ public String transfer(String uId, String tradeId, BigDecimal amount) {
+ logger.info("模拟支付宝渠道支付划账开始。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ boolean security = payMode.security(uId);
+ logger.info("模拟支付宝渠道支付风控校验。uId:{} tradeId:{} security:{}", uId, tradeId, security);
+ if (!security) {
+ logger.info("模拟支付宝渠道支付划账拦截。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ return "0001";
+ }
+ logger.info("模拟支付宝渠道支付划账成功。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
+ return "0000";
+ }
+
+}
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/IPayMode.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/IPayMode.java
new file mode 100755
index 0000000000000000000000000000000000000000..9e3c4f24037857aba003fd59d584790fed8a3aba
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/IPayMode.java
@@ -0,0 +1,7 @@
+package org.itstack.demo.design.pay.mode;
+
+public interface IPayMode {
+
+ boolean security(String uId);
+
+}
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayCypher.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayCypher.java
new file mode 100755
index 0000000000000000000000000000000000000000..828c84dc9f915626364d8b458cd315915275a89a
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayCypher.java
@@ -0,0 +1,15 @@
+package org.itstack.demo.design.pay.mode;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PayCypher implements IPayMode{
+
+ protected Logger logger = LoggerFactory.getLogger(PayCypher.class);
+
+ public boolean security(String uId) {
+ logger.info("密码支付,风控校验环境安全");
+ return true;
+ }
+
+}
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFaceMode.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFaceMode.java
new file mode 100755
index 0000000000000000000000000000000000000000..6500d810768536f3fdbed6ac9be005ed5e7eca21
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFaceMode.java
@@ -0,0 +1,15 @@
+package org.itstack.demo.design.pay.mode;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PayFaceMode implements IPayMode{
+
+ protected Logger logger = LoggerFactory.getLogger(PayCypher.class);
+
+ public boolean security(String uId) {
+ logger.info("人脸支付,风控校验脸部识别");
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFingerprintMode.java b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFingerprintMode.java
new file mode 100755
index 0000000000000000000000000000000000000000..4c56c0787490e8e550d7546cfa53f097a3beb6b3
--- /dev/null
+++ b/itstack-demo-design-7-02/src/main/java/org/itstack/demo/design/pay/mode/PayFingerprintMode.java
@@ -0,0 +1,15 @@
+package org.itstack.demo.design.pay.mode;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PayFingerprintMode implements IPayMode{
+
+ protected Logger logger = LoggerFactory.getLogger(PayCypher.class);
+
+ public boolean security(String uId) {
+ logger.info("指纹支付,风控校验指纹信息");
+ return true;
+ }
+
+}
diff --git a/itstack-demo-design-7-02/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-7-02/src/test/java/org/itstack/demo/design/test/ApiTest.java
new file mode 100755
index 0000000000000000000000000000000000000000..40492ca57f7395c06ffc22758021d4a18e22ee2b
--- /dev/null
+++ b/itstack-demo-design-7-02/src/test/java/org/itstack/demo/design/test/ApiTest.java
@@ -0,0 +1,27 @@
+package org.itstack.demo.design.test;
+
+import org.itstack.demo.design.pay.channel.Pay;
+import org.itstack.demo.design.pay.channel.WxPay;
+import org.itstack.demo.design.pay.channel.ZfbPay;
+import org.itstack.demo.design.pay.mode.PayFaceMode;
+import org.itstack.demo.design.pay.mode.PayFingerprintMode;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+
+public class ApiTest {
+
+ @Test
+ public void test_pay() {
+
+ System.out.println("\r\n模拟测试场景;微信支付、人脸方式。");
+ Pay wxPay = new WxPay(new PayFaceMode());
+ wxPay.transfer("weixin_1092033111", "100000109893", new BigDecimal(100));
+
+ System.out.println("\r\n模拟测试场景;支付宝支付、指纹方式。");
+ Pay zfbPay = new ZfbPay(new PayFingerprintMode());
+ zfbPay.transfer("jlu19dlxo111","100000109894",new BigDecimal(100));
+
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 472a815c5bbc53160632e21173f3a6fb74f75968..179bb13c8d9760685055f7afbefa00dbe272c8d9 100755
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,9 @@
itstack-demo-design-6-00
itstack-demo-design-6-01
itstack-demo-design-6-02
+ itstack-demo-design-7-01
+ itstack-demo-design-02
+ itstack-demo-design-7-02