diff --git a/students/282692248/ood/ood-assignment/pom.xml b/students/282692248/ood/ood-assignment/pom.xml
new file mode 100644
index 0000000000..cac49a5328
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+
+ com.coderising
+ ood-assignment
+ 0.0.1-SNAPSHOT
+ jar
+
+ ood-assignment
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+
+ aliyunmaven
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+
+
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/DateUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/DateUtil.java
new file mode 100644
index 0000000000..b6cf28c096
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/DateUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp;
+
+public class DateUtil {
+
+ public static String getCurrentDateAsString() {
+
+ return null;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java
new file mode 100644
index 0000000000..0357c4d912
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java
@@ -0,0 +1,38 @@
+package com.coderising.ood.ocp;
+
+public class Logger {
+
+ public final int RAW_LOG = 1;
+ public final int RAW_LOG_WITH_DATE = 2;
+ public final int EMAIL_LOG = 1;
+ public final int SMS_LOG = 2;
+ public final int PRINT_LOG = 3;
+
+ int type = 0;
+ int method = 0;
+
+ public Logger(int logType, int logMethod){
+ this.type = logType;
+ this.method = logMethod;
+ }
+ public void log(String msg){
+
+ String logMsg = msg;
+
+ if(this.type == RAW_LOG){
+ logMsg = msg;
+ } else if(this.type == RAW_LOG_WITH_DATE){
+ String txtDate = DateUtil.getCurrentDateAsString();
+ logMsg = txtDate + ": " + msg;
+ }
+
+ if(this.method == EMAIL_LOG){
+ MailUtil.send(logMsg);
+ } else if(this.method == SMS_LOG){
+ SMSUtil.send(logMsg);
+ } else if(this.method == PRINT_LOG){
+ System.out.println(logMsg);
+ }
+ }
+}
+
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailUtil.java
new file mode 100644
index 0000000000..ec54b839c5
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp;
+
+public class MailUtil {
+
+ public static void send(String logMsg) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSUtil.java
new file mode 100644
index 0000000000..13cf802418
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp;
+
+public class SMSUtil {
+
+ public static void send(String logMsg) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/DateUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/DateUtil.java
new file mode 100644
index 0000000000..7d0b475c45
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/DateUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp.chasing;
+
+public class DateUtil {
+
+ public static String getCurrentDateAsString() {
+
+ return null;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/Logger.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/Logger.java
new file mode 100644
index 0000000000..9ee56868e2
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/Logger.java
@@ -0,0 +1,19 @@
+package com.coderising.ood.ocp.chasing;
+
+import com.coderising.ood.ocp.chasing.formatter.ILogFormatter;
+import com.coderising.ood.ocp.chasing.sender.ILogSender;
+
+public class Logger {
+
+ private ILogFormatter formatter;
+ private ILogSender sender;
+
+ public Logger(ILogFormatter formatter, ILogSender sender){
+ this.formatter = formatter;
+ this.sender = sender;
+ }
+ public void log(String msg){
+ sender.send(formatter.format(msg));
+ }
+}
+
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/MailUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/MailUtil.java
new file mode 100644
index 0000000000..3ebf73ec62
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/MailUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp.chasing;
+
+public class MailUtil {
+
+ public static void send(String logMsg) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/SMSUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/SMSUtil.java
new file mode 100644
index 0000000000..5f649d963b
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/SMSUtil.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp.chasing;
+
+public class SMSUtil {
+
+ public static void send(String logMsg) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/ILogFormatter.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/ILogFormatter.java
new file mode 100644
index 0000000000..0c713dde7d
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/ILogFormatter.java
@@ -0,0 +1,5 @@
+package com.coderising.ood.ocp.chasing.formatter;
+
+public interface ILogFormatter {
+ String format(String txt);
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/LogWithDateFormatter.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/LogWithDateFormatter.java
new file mode 100644
index 0000000000..fb9555db9a
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/LogWithDateFormatter.java
@@ -0,0 +1,12 @@
+package com.coderising.ood.ocp.chasing.formatter;
+
+import com.coderising.ood.ocp.chasing.DateUtil;
+
+public class LogWithDateFormatter implements ILogFormatter {
+
+ @Override
+ public String format(String txt) {
+ return DateUtil.getCurrentDateAsString() + ": " + txt;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/RawLog.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/RawLog.java
new file mode 100644
index 0000000000..fdf2008c54
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/formatter/RawLog.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp.chasing.formatter;
+
+public class RawLog implements ILogFormatter {
+
+ @Override
+ public String format(String txt) {
+ return txt;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/ILogSender.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/ILogSender.java
new file mode 100644
index 0000000000..339584d6e4
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/ILogSender.java
@@ -0,0 +1,5 @@
+package com.coderising.ood.ocp.chasing.sender;
+
+public interface ILogSender {
+ void send(String msg);
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/MailSender.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/MailSender.java
new file mode 100644
index 0000000000..37652883ae
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/MailSender.java
@@ -0,0 +1,12 @@
+package com.coderising.ood.ocp.chasing.sender;
+
+import com.coderising.ood.ocp.chasing.MailUtil;
+
+public class MailSender implements ILogSender {
+
+ @Override
+ public void send(String msg) {
+ MailUtil.send(msg);
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/SMSSender.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/SMSSender.java
new file mode 100644
index 0000000000..2c7f92bf3b
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/SMSSender.java
@@ -0,0 +1,10 @@
+package com.coderising.ood.ocp.chasing.sender;
+
+public class SMSSender implements ILogSender {
+
+ @Override
+ public void send(String msg) {
+ System.out.println(msg);
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/StdoutSender.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/StdoutSender.java
new file mode 100644
index 0000000000..7e10d45b4f
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/chasing/sender/StdoutSender.java
@@ -0,0 +1,12 @@
+package com.coderising.ood.ocp.chasing.sender;
+
+import com.coderising.ood.ocp.chasing.SMSUtil;
+
+public class StdoutSender implements ILogSender {
+
+ @Override
+ public void send(String msg) {
+ SMSUtil.send(msg);
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Formatter.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Formatter.java
new file mode 100644
index 0000000000..b6e2ccbc16
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Formatter.java
@@ -0,0 +1,7 @@
+package com.coderising.ood.ocp.good;
+
+public interface Formatter {
+
+ String format(String msg);
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java
new file mode 100644
index 0000000000..3c2009a674
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java
@@ -0,0 +1,13 @@
+package com.coderising.ood.ocp.good;
+
+public class FormatterFactory {
+ public static Formatter createFormatter(int type){
+ if(type == 1){
+ return new RawFormatter();
+ }
+ if (type == 2){
+ return new HtmlFormatter();
+ }
+ return null;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java
new file mode 100644
index 0000000000..3d375f5acc
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java
@@ -0,0 +1,11 @@
+package com.coderising.ood.ocp.good;
+
+public class HtmlFormatter implements Formatter {
+
+ @Override
+ public String format(String msg) {
+
+ return null;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Logger.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Logger.java
new file mode 100644
index 0000000000..f206472d0d
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Logger.java
@@ -0,0 +1,18 @@
+package com.coderising.ood.ocp.good;
+
+public class Logger {
+
+ private Formatter formatter;
+ private Sender sender;
+
+ public Logger(Formatter formatter,Sender sender){
+ this.formatter = formatter;
+ this.sender = sender;
+ }
+ public void log(String msg){
+ sender.send(formatter.format(msg)) ;
+ }
+
+
+}
+
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java
new file mode 100644
index 0000000000..7f1cb4ae30
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java
@@ -0,0 +1,11 @@
+package com.coderising.ood.ocp.good;
+
+public class RawFormatter implements Formatter {
+
+ @Override
+ public String format(String msg) {
+
+ return null;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Sender.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Sender.java
new file mode 100644
index 0000000000..aaa46c1fb7
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/good/Sender.java
@@ -0,0 +1,7 @@
+package com.coderising.ood.ocp.good;
+
+public interface Sender {
+
+ void send(String msg);
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java
new file mode 100644
index 0000000000..f328c1816a
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java
@@ -0,0 +1,23 @@
+package com.coderising.ood.srp;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Configuration {
+
+ static Map configurations = new HashMap<>();
+ static{
+ configurations.put(ConfigurationKeys.SMTP_SERVER, "smtp.163.com");
+ configurations.put(ConfigurationKeys.ALT_SMTP_SERVER, "smtp1.163.com");
+ configurations.put(ConfigurationKeys.EMAIL_ADMIN, "admin@company.com");
+ }
+ /**
+ * 应该从配置文件读, 但是这里简化为直接从一个map 中去读
+ * @param key
+ * @return
+ */
+ public String getProperty(String key) {
+
+ return configurations.get(key);
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java
new file mode 100644
index 0000000000..8695aed644
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java
@@ -0,0 +1,9 @@
+package com.coderising.ood.srp;
+
+public class ConfigurationKeys {
+
+ public static final String SMTP_SERVER = "smtp.server";
+ public static final String ALT_SMTP_SERVER = "alt.smtp.server";
+ public static final String EMAIL_ADMIN = "email.admin";
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java
new file mode 100644
index 0000000000..82e9261d18
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java
@@ -0,0 +1,25 @@
+package com.coderising.ood.srp;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DBUtil {
+
+ /**
+ * 应该从数据库读, 但是简化为直接生成。
+ * @param sql
+ * @return
+ */
+ public static List query(String sql){
+
+ List userList = new ArrayList();
+ for (int i = 1; i <= 3; i++) {
+ HashMap userInfo = new HashMap();
+ userInfo.put("NAME", "User" + i);
+ userInfo.put("EMAIL", "aa@bb.com");
+ userList.add(userInfo);
+ }
+
+ return userList;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java
new file mode 100644
index 0000000000..9f9e749af7
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java
@@ -0,0 +1,18 @@
+package com.coderising.ood.srp;
+
+public class MailUtil {
+
+ public static void sendEmail(String toAddress, String fromAddress, String subject, String message, String smtpHost,
+ boolean debug) {
+ //假装发了一封邮件
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("From:").append(fromAddress).append("\n");
+ buffer.append("To:").append(toAddress).append("\n");
+ buffer.append("Subject:").append(subject).append("\n");
+ buffer.append("Content:").append(message).append("\n");
+ System.out.println(buffer.toString());
+
+ }
+
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java
new file mode 100644
index 0000000000..402c4f6f97
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java
@@ -0,0 +1,199 @@
+package com.coderising.ood.srp;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+public class PromotionMail {
+
+
+ protected String sendMailQuery = null;
+
+
+ protected String smtpHost = null;
+ protected String altSmtpHost = null;
+ protected String fromAddress = null;
+ protected String toAddress = null;
+ protected String subject = null;
+ protected String message = null;
+
+ protected String productID = null;
+ protected String productDesc = null;
+
+ private static Configuration config;
+
+
+
+ private static final String NAME_KEY = "NAME";
+ private static final String EMAIL_KEY = "EMAIL";
+
+
+ public static void main(String[] args) throws Exception {
+
+ File f = new File("D:\\jp\\study\\coding2017-master\\students\\282692248\\ood\\ood-assignment\\src\\main\\java\\com\\coderising\\ood\\srp\\product_promotion.txt");
+ boolean emailDebug = false;
+
+ PromotionMail pe = new PromotionMail(f, emailDebug);
+
+ }
+
+
+ public PromotionMail(File file, boolean mailDebug) throws Exception {
+
+ //读取配置文件, 文件中只有一行用空格隔开, 例如 P8756 iPhone8
+ readFile(file);
+
+
+ config = new Configuration();
+
+ setSMTPHost();
+ setAltSMTPHost();
+
+
+ setFromAddress();
+
+
+ setLoadQuery();
+
+ sendEMails(mailDebug, loadMailingList());
+
+
+ }
+
+
+
+
+ protected void setProductID(String productID)
+ {
+ this.productID = productID;
+
+ }
+
+ protected String getproductID()
+ {
+ return productID;
+ }
+
+ protected void setLoadQuery() throws Exception {
+
+ sendMailQuery = "Select name from subscriptions "
+ + "where product_id= '" + productID +"' "
+ + "and send_mail=1 ";
+
+
+ System.out.println("loadQuery set");
+ }
+
+
+ protected void setSMTPHost()
+ {
+ smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER);
+ }
+
+
+ protected void setAltSMTPHost()
+ {
+ altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER);
+
+ }
+
+
+ protected void setFromAddress()
+ {
+ fromAddress = config.getProperty(ConfigurationKeys.EMAIL_ADMIN);
+ }
+
+ protected void setMessage(HashMap userInfo) throws IOException
+ {
+
+ String name = (String) userInfo.get(NAME_KEY);
+
+ subject = "您关注的产品降价了";
+ message = "尊敬的 "+name+", 您关注的产品 " + productDesc + " 降价了,欢迎购买!" ;
+
+
+
+ }
+
+
+ protected void readFile(File file) throws IOException // @02C
+ {
+ BufferedReader br = null;
+ try {
+ br = new BufferedReader(new FileReader(file));
+ String temp = br.readLine();
+ String[] data = temp.split(" ");
+
+ setProductID(data[0]);
+ setProductDesc(data[1]);
+
+ System.out.println("产品ID = " + productID + "\n");
+ System.out.println("产品描述 = " + productDesc + "\n");
+
+ } catch (IOException e) {
+ throw new IOException(e.getMessage());
+ } finally {
+ br.close();
+ }
+ }
+
+ private void setProductDesc(String desc) {
+ this.productDesc = desc;
+ }
+
+
+ protected void configureEMail(HashMap userInfo) throws IOException
+ {
+ toAddress = (String) userInfo.get(EMAIL_KEY);
+ if (toAddress.length() > 0)
+ setMessage(userInfo);
+ }
+
+ protected List loadMailingList() throws Exception {
+ return DBUtil.query(this.sendMailQuery);
+ }
+
+
+ protected void sendEMails(boolean debug, List mailingList) throws IOException
+ {
+
+ System.out.println("开始发送邮件");
+
+
+ if (mailingList != null) {
+ Iterator iter = mailingList.iterator();
+ while (iter.hasNext()) {
+ configureEMail((HashMap) iter.next());
+ try
+ {
+ if (toAddress.length() > 0)
+ MailUtil.sendEmail(toAddress, fromAddress, subject, message, smtpHost, debug);
+ }
+ catch (Exception e)
+ {
+
+ try {
+ MailUtil.sendEmail(toAddress, fromAddress, subject, message, altSmtpHost, debug);
+
+ } catch (Exception e2)
+ {
+ System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage());
+ }
+ }
+ }
+
+
+ }
+
+ else {
+ System.out.println("没有邮件发送");
+
+ }
+
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/Configuration.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/Configuration.java
new file mode 100644
index 0000000000..a34fd144aa
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/Configuration.java
@@ -0,0 +1,23 @@
+package com.coderising.ood.srp.chasing;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Configuration {
+
+ static Map configurations = new HashMap<>();
+ static{
+ configurations.put(ConfigurationKeys.SMTP_SERVER, "smtp.163.com");
+ configurations.put(ConfigurationKeys.ALT_SMTP_SERVER, "smtp1.163.com");
+ configurations.put(ConfigurationKeys.EMAIL_ADMIN, "admin@company.com");
+ }
+ /**
+ * 应该从配置文件读, 但是这里简化为直接从一个map 中去读
+ * @param key
+ * @return
+ */
+ public String getProperty(String key) {
+
+ return configurations.get(key);
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/ConfigurationKeys.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/ConfigurationKeys.java
new file mode 100644
index 0000000000..9d0f0caa1b
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/ConfigurationKeys.java
@@ -0,0 +1,9 @@
+package com.coderising.ood.srp.chasing;
+
+public class ConfigurationKeys {
+
+ public static final String SMTP_SERVER = "smtp.server";
+ public static final String ALT_SMTP_SERVER = "alt.smtp.server";
+ public static final String EMAIL_ADMIN = "email.admin";
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/PromotionMail.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/PromotionMail.java
new file mode 100644
index 0000000000..8008f6b11b
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/PromotionMail.java
@@ -0,0 +1,45 @@
+package com.coderising.ood.srp.chasing;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import com.coderising.ood.srp.chasing.model.Product;
+import com.coderising.ood.srp.chasing.model.User;
+import com.coderising.ood.srp.chasing.service.MailService;
+import com.coderising.ood.srp.chasing.service.ProductService;
+import com.coderising.ood.srp.chasing.service.PromotionService;
+import com.coderising.ood.srp.chasing.service.UserService;
+
+public class PromotionMail {
+ private MailService mailServer = new MailService(new Configuration());;
+ private ProductService productService = null;
+ private UserService userService = new UserService();
+ private PromotionService promptService = new PromotionService();
+
+ public static void main(String[] args) throws Exception {
+ File f = new File("D:\\coding2017\\students\\282692248\\ood\\ood-assignment\\src\\main\\java\\com\\coderising\\ood\\srp\\chasing\\product_promotion.txt");
+ PromotionMail pe = new PromotionMail(f);
+ pe.sendPromptMails();
+ }
+
+ public PromotionMail(File file){
+ productService = new ProductService(file);
+ }
+
+ /** 主要业务逻辑:发送促销信息 */
+ protected void sendPromptMails() throws IOException {
+ System.out.println("开始发送邮件");
+ Product product = productService.loadProduct();
+ List users = userService.loadUserByProduct(product);
+ if (users != null) {
+ for(User user:users){
+ mailServer.sendMail(user.getEmail(), promptService.getPromptProfile(),
+ promptService.buildPromptMessageForUser(product, user));
+ }
+ }
+ else {
+ System.out.println("没有邮件发送");
+ }
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/Product.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/Product.java
new file mode 100644
index 0000000000..a4843a26c6
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/Product.java
@@ -0,0 +1,27 @@
+package com.coderising.ood.srp.chasing.model;
+
+public class Product {
+ protected String productID = null;
+ protected String productDesc = null;
+
+ public Product() {}
+
+ public Product(String productID, String productDesc) {
+ super();
+ this.productID = productID;
+ this.productDesc = productDesc;
+ }
+
+ public String getProductID() {
+ return productID;
+ }
+ public void setProductID(String productID) {
+ this.productID = productID;
+ }
+ public String getProductDesc() {
+ return productDesc;
+ }
+ public void setProductDesc(String productDesc) {
+ this.productDesc = productDesc;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/User.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/User.java
new file mode 100644
index 0000000000..aed750d6ce
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/model/User.java
@@ -0,0 +1,25 @@
+package com.coderising.ood.srp.chasing.model;
+
+public class User {
+ private String name;
+ private String email;
+
+ public User(String name, String email) {
+ super();
+ this.name = name;
+ this.email = email;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getEmail() {
+ return email;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/product_promotion.txt b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/product_promotion.txt
new file mode 100644
index 0000000000..b7a974adb3
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/product_promotion.txt
@@ -0,0 +1,4 @@
+P8756 iPhone8
+P3946 XiaoMi10
+P8904 Oppo_R15
+P4955 Vivo_X20
\ No newline at end of file
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/MailService.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/MailService.java
new file mode 100644
index 0000000000..957eac2928
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/MailService.java
@@ -0,0 +1,62 @@
+package com.coderising.ood.srp.chasing.service;
+
+import com.coderising.ood.srp.chasing.Configuration;
+import com.coderising.ood.srp.chasing.ConfigurationKeys;
+import com.coderising.ood.srp.chasing.util.MailUtil;
+
+public class MailService {
+ protected String smtpHost = null;
+ protected String altSmtpHost = null;
+ protected String systemAddress = null;
+
+ public MailService(Configuration config){
+ smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER);
+ altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER);
+ systemAddress = config.getProperty(ConfigurationKeys.EMAIL_ADMIN);
+ }
+
+ /**
+ * 发送邮件
+ * @param toAddress 收信人
+ * @param subject 主题
+ * @param message 正文
+ */
+ public void sendMail(String toAddress, String subject, String message){
+ if(toAddress == null || toAddress.length() <= 0){
+ return;
+ }
+ try{
+ MailUtil.sendEmail(toAddress, systemAddress, subject, message, smtpHost);
+ }catch(Exception e){
+ try{
+ MailUtil.sendEmail(toAddress, systemAddress, subject, message, altSmtpHost);
+ }catch(Exception e2){
+ System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage());
+ }
+ }
+ }
+
+ public String getSmtpHost() {
+ return smtpHost;
+ }
+
+ public void setSmtpHost(String smtpHost) {
+ this.smtpHost = smtpHost;
+ }
+
+ public String getAltSmtpHost() {
+ return altSmtpHost;
+ }
+
+ public void setAltSmtpHost(String altSmtpHost) {
+ this.altSmtpHost = altSmtpHost;
+ }
+
+ public String getFromAddress() {
+ return systemAddress;
+ }
+
+ public void setFromAddress(String fromAddress) {
+ this.systemAddress = fromAddress;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/ProductService.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/ProductService.java
new file mode 100644
index 0000000000..00e55a806b
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/ProductService.java
@@ -0,0 +1,32 @@
+package com.coderising.ood.srp.chasing.service;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+import com.coderising.ood.srp.chasing.model.Product;
+
+public class ProductService {
+ File f;
+ public ProductService(File f){
+ this.f = f;
+ }
+ /** 获取促销商品 */
+ public Product loadProduct() throws IOException // @02C
+ {
+ BufferedReader br = null;
+ try {
+ br = new BufferedReader(new FileReader(f));
+ String temp = br.readLine();
+ String[] data = temp.split(" ");
+ System.out.println("产品ID = " + data[0] + "\n");
+ System.out.println("产品描述 = " + data[1] + "\n");
+ return new Product(data[0], data[1]);
+ } catch (IOException e) {
+ throw new IOException(e.getMessage());
+ } finally {
+ br.close();
+ }
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/PromotionService.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/PromotionService.java
new file mode 100644
index 0000000000..a4f3aa0a12
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/PromotionService.java
@@ -0,0 +1,18 @@
+package com.coderising.ood.srp.chasing.service;
+
+import java.io.IOException;
+
+import com.coderising.ood.srp.chasing.model.Product;
+import com.coderising.ood.srp.chasing.model.User;
+
+public class PromotionService {
+ /** 促销信息概要 */
+ public String getPromptProfile(){
+ return "您关注的产品降价了";
+ }
+
+ /** 为指定用户生成促销信息 */
+ public String buildPromptMessageForUser(Product product, User userInfo) throws IOException {
+ return "尊敬的 "+userInfo.getName()+", 您关注的产品 " + product.getProductDesc() + " 降价了,欢迎购买!" ;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/UserService.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/UserService.java
new file mode 100644
index 0000000000..ccc8a44b31
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/service/UserService.java
@@ -0,0 +1,18 @@
+package com.coderising.ood.srp.chasing.service;
+
+import java.util.List;
+
+import com.coderising.ood.srp.chasing.model.Product;
+import com.coderising.ood.srp.chasing.model.User;
+import com.coderising.ood.srp.chasing.util.DBUtil;
+
+public class UserService {
+ /** 获取关注指定商品的用户 */
+ public List loadUserByProduct(Product product){
+ String sql = "Select name from subscriptions "
+ + "where product_id= '" + product.getProductID() +"' "
+ + "and send_mail=1 ";
+ System.out.println("loadQuery set");
+ return DBUtil.query(sql);
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/DBUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/DBUtil.java
new file mode 100644
index 0000000000..a1f5faf1f4
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/DBUtil.java
@@ -0,0 +1,21 @@
+package com.coderising.ood.srp.chasing.util;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.coderising.ood.srp.chasing.model.User;
+
+public class DBUtil {
+
+ /**
+ * 应该从数据库读, 但是简化为直接生成。
+ * @param sql
+ * @return
+ */
+ public static List query(String sql){
+ List userList = new ArrayList<>();
+ for (int i = 1; i <= 3; i++) {
+ userList.add(new User("User" + i,"aa@bb.com"));
+ }
+ return userList;
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/MailUtil.java b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/MailUtil.java
new file mode 100644
index 0000000000..6bc230b7bb
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/chasing/util/MailUtil.java
@@ -0,0 +1,14 @@
+package com.coderising.ood.srp.chasing.util;
+
+public class MailUtil {
+
+ public static void sendEmail(String toAddress, String fromAddress, String subject, String message, String smtpHost) {
+ //假装发了一封邮件
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("From:").append(fromAddress).append("\n");
+ buffer.append("To:").append(toAddress).append("\n");
+ buffer.append("Subject:").append(subject).append("\n");
+ buffer.append("Content:").append(message).append("\n");
+ System.out.println(buffer.toString());
+ }
+}
diff --git a/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt
new file mode 100644
index 0000000000..b7a974adb3
--- /dev/null
+++ b/students/282692248/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt
@@ -0,0 +1,4 @@
+P8756 iPhone8
+P3946 XiaoMi10
+P8904 Oppo_R15
+P4955 Vivo_X20
\ No newline at end of file