diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Affiliation.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Affiliation.java
new file mode 100644
index 0000000000..091165a2af
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Affiliation.java
@@ -0,0 +1,5 @@
+package com.coderising.payroll;
+
+public interface Affiliation {
+ public double calculateDeductions(Paycheck pc);
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Employee.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Employee.java
new file mode 100644
index 0000000000..923297c91a
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Employee.java
@@ -0,0 +1,42 @@
+package com.coderising.payroll;
+
+import java.util.Date;
+
+public class Employee {
+ String id;
+ String name;
+ String address;
+ Affiliation affiliation;
+
+
+ PaymentClassification classification;
+ PaymentSchedule schedule;
+ PaymentMethod paymentMethod;
+
+ public Employee(String name, String address){
+ this.name = name;
+ this.address = address;
+ }
+ public boolean isPayDay(Date d) {
+ return false;
+ }
+
+ public Date getPayPeriodStartDate(Date d) {
+ return null;
+ }
+
+ public void payDay(Paycheck pc){
+
+ }
+
+ public void setClassification(PaymentClassification classification) {
+ this.classification = classification;
+ }
+ public void setSchedule(PaymentSchedule schedule) {
+ this.schedule = schedule;
+ }
+ public void setPaymentMethod(PaymentMethod paymentMethod) {
+ this.paymentMethod = paymentMethod;
+ }
+}
+
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Paycheck.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Paycheck.java
new file mode 100644
index 0000000000..802c8b5c45
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/Paycheck.java
@@ -0,0 +1,35 @@
+package com.coderising.payroll;
+
+import java.util.Date;
+import java.util.Map;
+
+public class Paycheck {
+ private Date payPeriodStart;
+ private Date payPeriodEnd;
+ private double grossPay;
+ private double netPay;
+ private double deductions;
+
+ public Paycheck(Date payPeriodStart, Date payPeriodEnd){
+ this.payPeriodStart = payPeriodStart;
+ this.payPeriodEnd = payPeriodEnd;
+ }
+ public void setGrossPay(double grossPay) {
+ this.grossPay = grossPay;
+
+ }
+ public void setDeductions(double deductions) {
+ this.deductions = deductions;
+ }
+ public void setNetPay(double netPay){
+ this.netPay = netPay;
+ }
+ public Date getPayPeriodEndDate() {
+
+ return this.payPeriodEnd;
+ }
+ public Date getPayPeriodStartDate() {
+
+ return this.payPeriodStart;
+ }
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentClassification.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentClassification.java
new file mode 100644
index 0000000000..f2bf2e26e9
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentClassification.java
@@ -0,0 +1,5 @@
+package com.coderising.payroll;
+
+public interface PaymentClassification {
+ public double calculatePay(Paycheck pc);
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentMethod.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentMethod.java
new file mode 100644
index 0000000000..5e549916b6
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentMethod.java
@@ -0,0 +1,5 @@
+package com.coderising.payroll;
+
+public interface PaymentMethod {
+ public void pay(Paycheck pc);
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentSchedule.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentSchedule.java
new file mode 100644
index 0000000000..500d72404d
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/PaymentSchedule.java
@@ -0,0 +1,8 @@
+package com.coderising.payroll;
+
+import java.util.Date;
+
+public interface PaymentSchedule {
+ public boolean isPayDate(Date date);
+ public Date getPayPeriodStartDate( Date payPeriodEndDate);
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/SalesReceipt.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/SalesReceipt.java
new file mode 100644
index 0000000000..fcd3b506fc
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/SalesReceipt.java
@@ -0,0 +1,14 @@
+package com.coderising.payroll;
+
+import java.util.Date;
+
+public class SalesReceipt {
+ private Date saleDate;
+ private double amount;
+ public Date getSaleDate() {
+ return saleDate;
+ }
+ public double getAmount() {
+ return amount;
+ }
+}
diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/TimeCard.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/TimeCard.java
new file mode 100644
index 0000000000..735cc17ac1
--- /dev/null
+++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/payroll/TimeCard.java
@@ -0,0 +1,15 @@
+package com.coderising.payroll;
+
+import java.util.Date;
+
+public class TimeCard {
+ private Date date;
+ private int hours;
+
+ public Date getDate() {
+ return date;
+ }
+ public int getHours() {
+ return hours;
+ }
+}
diff --git a/students/2756638003/srp/pom.xml b/students/2756638003/srp/pom.xml
new file mode 100644
index 0000000000..5024466d17
--- /dev/null
+++ b/students/2756638003/srp/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+
+ com.coderising
+ ds-assignment
+ 0.0.1-SNAPSHOT
+ jar
+
+ ds-assignment
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+
+ aliyunmaven
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+
+
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/PromotionMail.java
new file mode 100644
index 0000000000..6f743552bb
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/PromotionMail.java
@@ -0,0 +1,131 @@
+package com.coderising.ood.srp;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import com.coderising.ood.srp.conf.Configuration;
+import com.coderising.ood.srp.conf.ConfigurationKeys;
+import com.coderising.ood.srp.conf.EmailStatus;
+import com.coderising.ood.srp.domain.Product;
+import com.coderising.ood.srp.domain.Subscriber;
+import com.coderising.ood.srp.util.ConfigUtil;
+import com.coderising.ood.srp.util.Email;
+import com.coderising.ood.srp.util.MailUtil;
+import com.coderising.ood.srp.util.SubscriberUtil;
+
+public class PromotionMail {
+
+ protected String smtpHost = null;
+ protected String altSmtpHost = null;
+ protected String fromAddress = null;
+
+ private static Configuration config;
+
+ public static void main(String[] args) throws Exception {
+ File file = new File("XX/product_promotion.txt");
+ boolean emailDebug = false;
+ new PromotionMail(file, emailDebug);
+ }
+
+ /**
+ * 从配置文件中读取商品信息
+ */
+ private List loadFile(File file) throws IOException {
+ Map conf = ConfigUtil.readTextFile(file);
+ List productList = new ArrayList(16);
+ Set> entrySet = conf.entrySet();
+ for (Entry entry : entrySet) {
+ productList.add(new Product(entry.getKey(), entry.getValue()));
+ }
+ return productList;
+ }
+
+ /**
+ * 根据商品查询订阅的用户信息
+ */
+ private List querySubscribersFormFile(List productList)
+ throws IOException {
+ StringBuilder query = new StringBuilder(
+ "Select name from Subscriber where product_id in( ");
+ for (int i = 0, len = productList.size(); i < len - 1; i++) {
+ query.append(productList.get(i).getProductID() + " ,");
+ }
+ query.append(productList.get(productList.size() - 1).getProductID());
+ query.append(") and send_mail = ?");
+ return SubscriberUtil.loadSubscriberList(query.toString(),
+ EmailStatus.READY);
+ }
+
+ /**
+ * 根据订阅者信息生成邮件
+ */
+ private Email generatorEmail(Subscriber subscriber, String host) {
+ String subject = "您关注的产品降价了";
+ String message = "尊敬的 " + subscriber.getName() + ", 您关注的产品 "
+ + subscriber.getProduct().getProductDesc() + " 降价了,欢迎购买!";
+ return new Email(subscriber.getEmail(), fromAddress, subject, message,
+ host);
+ }
+
+ public PromotionMail(File file, boolean mailDebug) throws Exception {
+ config = new Configuration();
+ setSMTPHost();
+ setAltSMTPHost();
+ setFromAddress();
+ // 从配置文件中读取商品信息
+ List productList = loadFile(file);
+ // 根据商品查询订阅的用户信息
+ List subscriberList = querySubscribersFormFile(productList);
+ // 发送邮件
+ sendEMails(mailDebug, subscriberList);
+ }
+
+ /**
+ * 发送邮件
+ */
+ protected void sendEMails(boolean debug, List subscriberList)
+ throws IOException {
+ System.out.println("开始发送邮件");
+ if (subscriberList != null && subscriberList.size() > 0) {
+ Iterator iter = subscriberList.iterator();
+ Subscriber subscriber = null;
+
+ while (iter.hasNext()) {
+ subscriber = iter.next();
+ try {
+ MailUtil.sendEmail(generatorEmail(subscriber, smtpHost),
+ debug);
+ } catch (Exception e) {
+ try {
+ MailUtil.sendEmail(
+ generatorEmail(subscriber, altSmtpHost), debug);
+ } catch (Exception e2) {
+ System.out.println("通过备用 SMTP服务器发送邮件失败: "
+ + e2.getMessage());
+ }
+ }
+ }
+ } else {
+ System.out.println("没有邮件发送");
+ }
+ }
+
+ 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);
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/Configuration.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/Configuration.java
new file mode 100644
index 0000000000..444e4cf912
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/Configuration.java
@@ -0,0 +1,29 @@
+package com.coderising.ood.srp.conf;
+
+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/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/ConfigurationKeys.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/ConfigurationKeys.java
new file mode 100644
index 0000000000..36009abc3d
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/ConfigurationKeys.java
@@ -0,0 +1,9 @@
+package com.coderising.ood.srp.conf;
+
+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/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/EmailStatus.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/EmailStatus.java
new file mode 100644
index 0000000000..3245a8d468
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/EmailStatus.java
@@ -0,0 +1,31 @@
+package com.coderising.ood.srp.conf;
+
+/**
+ * 邮件发送状态常量
+ */
+public enum EmailStatus {
+ /**
+ * 未发送
+ */
+ READY(0),
+ /**
+ * 已发送
+ */
+ SEND(1),
+ /**
+ * 已查阅
+ */
+ RECEIVED(2),
+ /**
+ * 被退回
+ */
+ REJECTED(3);
+
+ @SuppressWarnings("unused")
+ private int value;
+
+ private EmailStatus(int value) {
+ this.value = value;
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/product_promotion.txt b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/product_promotion.txt
new file mode 100644
index 0000000000..a98917f829
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/conf/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/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Product.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Product.java
new file mode 100644
index 0000000000..52656e0389
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Product.java
@@ -0,0 +1,43 @@
+package com.coderising.ood.srp.domain;
+
+/**
+ * 商品类
+ */
+public class Product {
+
+ private String productID;
+ private String productDesc;
+
+ public Product(String productID, String productDesc) {
+ super();
+ this.productID = productID;
+ this.productDesc = productDesc;
+ }
+
+ public Product() {
+ super();
+ }
+
+ 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;
+ }
+
+ @Override
+ public String toString() {
+ return "Product [productID=" + productID + ", productDesc="
+ + productDesc + "]";
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Subscriber.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Subscriber.java
new file mode 100644
index 0000000000..cdef11498f
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/domain/Subscriber.java
@@ -0,0 +1,74 @@
+package com.coderising.ood.srp.domain;
+
+/**
+ * 订阅者
+ */
+public class Subscriber {
+
+ private String subscriberId;
+ private String name;
+ private String email;
+ private Product product;
+ private Integer sendStatus;
+
+ public Subscriber(String subscriberId, String name, String email,
+ Product product) {
+ super();
+ this.subscriberId = subscriberId;
+ this.name = name;
+ this.email = email;
+ this.product = product;
+ }
+
+ public Subscriber() {
+ super();
+ }
+
+ public String getSubscriberId() {
+ return subscriberId;
+ }
+
+ public void setSubscriberId(String subscriberId) {
+ this.subscriberId = subscriberId;
+ }
+
+ 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;
+ }
+
+ public Product getProduct() {
+ return product;
+ }
+
+ public void setProduct(Product product) {
+ this.product = product;
+ }
+
+ public Integer getSendStatus() {
+ return sendStatus;
+ }
+
+ public void setSendStatus(Integer sendStatus) {
+ this.sendStatus = sendStatus;
+ }
+
+ @Override
+ public String toString() {
+ return "Subscriber [subscriberId=" + subscriberId + ", name=" + name
+ + ", email=" + email + ", product=" + product + ", sendStatus="
+ + sendStatus + "]";
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/ConfigUtil.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/ConfigUtil.java
new file mode 100644
index 0000000000..4494739dd6
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/ConfigUtil.java
@@ -0,0 +1,33 @@
+package com.coderising.ood.srp.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 配置文件读写工具类
+ *
+ */
+public class ConfigUtil {
+
+ public static Map readTextFile(File file)
+ throws IOException {
+ Map conf = new HashMap();
+ try (BufferedReader br = new BufferedReader(new FileReader(file));) {
+ String temp = null;
+ while ((temp = br.readLine()) != null) {
+ int indexOf = temp.indexOf(' ');
+ if (indexOf > -1) {
+ conf.put(temp.substring(0, indexOf),
+ temp.substring(indexOf));
+ }
+ }
+ } catch (IOException e) {
+ throw new IOException(e.getMessage());
+ }
+ return conf;
+ }
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/DBUtil.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/DBUtil.java
new file mode 100644
index 0000000000..a4facaff0b
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/DBUtil.java
@@ -0,0 +1,25 @@
+package com.coderising.ood.srp.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.coderising.ood.srp.domain.Product;
+import com.coderising.ood.srp.domain.Subscriber;
+
+public class DBUtil {
+
+ /**
+ * 应该从数据库读, 但是简化为直接生成。
+ *
+ * @param sql
+ * @return
+ */
+ public static List query(String sql, Object... args) {
+ List list = new ArrayList(16);
+ for (int i = 1; i <= 3; i++) {
+ list.add(new Subscriber(String.valueOf(i), "User" + i, "user-" + i
+ + "@bb.com", new Product("P8756", " iPhone8")));
+ }
+ return list;
+ }
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/Email.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/Email.java
new file mode 100644
index 0000000000..3422aebb2a
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/Email.java
@@ -0,0 +1,75 @@
+package com.coderising.ood.srp.util;
+
+/**
+ * 邮件类
+ */
+public class Email {
+
+ private String toAddress;
+ private String fromAddress;
+ private String subject;
+ private String message;
+ private String smtpHost;
+
+ public Email(String toAddress, String fromAddress, String subject,
+ String message, String smtpHost) {
+ super();
+ this.toAddress = toAddress;
+ this.fromAddress = fromAddress;
+ this.subject = subject;
+ this.message = message;
+ this.smtpHost = smtpHost;
+ }
+
+ public Email() {
+ super();
+ }
+
+ public String getToAddress() {
+ return toAddress;
+ }
+
+ public void setToAddress(String toAddress) {
+ this.toAddress = toAddress;
+ }
+
+ public String getFromAddress() {
+ return fromAddress;
+ }
+
+ public void setFromAddress(String fromAddress) {
+ this.fromAddress = fromAddress;
+ }
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getSmtpHost() {
+ return smtpHost;
+ }
+
+ public void setSmtpHost(String smtpHost) {
+ this.smtpHost = smtpHost;
+ }
+
+ @Override
+ public String toString() {
+ return "Email [toAddress=" + toAddress + ", fromAddress=" + fromAddress
+ + ", subject=" + subject + ", message=" + message
+ + ", smtpHost=" + smtpHost + "]";
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/MailUtil.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/MailUtil.java
new file mode 100644
index 0000000000..7994870bef
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/MailUtil.java
@@ -0,0 +1,17 @@
+package com.coderising.ood.srp.util;
+
+/**
+ * 邮件发送工具类
+ */
+public class MailUtil {
+ public static void sendEmail(Email email, boolean debug) {
+ // 假装发了一封邮件
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("From:").append(email.getFromAddress()).append("\n");
+ buffer.append("To:").append(email.getToAddress()).append("\n");
+ buffer.append("Subject:").append(email.getSubject()).append("\n");
+ buffer.append("Content:").append(email.getMessage()).append("\n");
+ System.out.println(buffer.toString());
+ }
+
+}
diff --git a/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/SubscriberUtil.java b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/SubscriberUtil.java
new file mode 100644
index 0000000000..2410a45950
--- /dev/null
+++ b/students/2756638003/srp/src/main/java/com/coderising/ood/srp/util/SubscriberUtil.java
@@ -0,0 +1,17 @@
+package com.coderising.ood.srp.util;
+
+import java.util.List;
+
+import com.coderising.ood.srp.domain.Subscriber;
+
+/**
+ * 订阅者查询工具类
+ */
+public class SubscriberUtil {
+
+ public static List loadSubscriberList(String sql,
+ Object... args) {
+ return DBUtil.query(sql);
+ }
+
+}
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
diff --git a/students/729693763/1.ood/ood-assignment/pom.xml b/students/729693763/1.ood/ood-assignment/pom.xml
new file mode 100644
index 0000000000..cac49a5328
--- /dev/null
+++ b/students/729693763/1.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/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java
new file mode 100644
index 0000000000..f328c1816a
--- /dev/null
+++ b/students/729693763/1.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/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java
new file mode 100644
index 0000000000..8695aed644
--- /dev/null
+++ b/students/729693763/1.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/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java
new file mode 100644
index 0000000000..82e9261d18
--- /dev/null
+++ b/students/729693763/1.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/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java
new file mode 100644
index 0000000000..a02504fd05
--- /dev/null
+++ b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java
@@ -0,0 +1,64 @@
+
+package com.coderising.ood.srp;
+/**
+ * @author 作者 Denny
+ * @date 创建时间:Jun 25, 2017 10:27:58 AM
+ * @version 1.0
+ * @parameter
+ * @since
+ * @return */
+
+import java.util.List;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+public class FileUtil {
+
+ /**
+ * 根据文件路径获取文件,如果文件不存在,抛出异常
+ * @param fileName
+ * @return
+ * @throws FileNotFoundException
+ */
+ public static File readFile(String fileName) throws FileNotFoundException{
+ File file = new File(fileName);
+ if(!file.exists()){
+ throw new FileNotFoundException();
+ }
+ return file;
+ }
+
+ public static List parseToString(File file, String regex) {
+ List list = new ArrayList();
+ BufferedReader bf= null;
+ try {
+ if(file != null && file.exists( )){
+ bf = new BufferedReader(new FileReader(file));
+ String temp = null;
+ while ((temp = bf.readLine()) != null) {
+ String[] strs = temp.split(regex);
+ list.add(strs);
+ }
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }finally {
+ if(bf != null){
+ try {
+ bf.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ return list;
+ }
+
+}
diff --git a/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java
new file mode 100644
index 0000000000..3c367759c4
--- /dev/null
+++ b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java
@@ -0,0 +1,48 @@
+package com.coderising.ood.srp;
+
+public class MailUtil {
+
+
+ /**
+ * 邮件单元是需要管理邮件的,包括发送到哪,端口主机等等
+ */
+ private static String fromAddress = "";
+ private static String smtpHost = "";
+ private static String altSmtpHost = "";
+
+
+ private static Configuration config = new Configuration();
+
+ public static void ConfigureEmail() {
+ altSmtpHost = (String) config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER);
+ fromAddress = (String) config.getProperty(ConfigurationKeys.EMAIL_ADMIN);
+ smtpHost = (String) config.getProperty(ConfigurationKeys.SMTP_SERVER);
+
+ }
+
+
+ public static void sendEmail(String toAddress,String subject,String message) {
+ ConfigureEmail();
+ //假装发了一封邮件
+ try{
+ 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());
+ } catch (Exception e) {
+ try {
+ System.out.println("备用SMTP服务器: ");
+ MailUtil.sendEmail(toAddress, subject, message);
+
+ } catch (Exception e2) {
+ System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage());
+ }
+ }
+
+
+ }
+
+
+}
diff --git a/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java
new file mode 100644
index 0000000000..902b6ff341
--- /dev/null
+++ b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java
@@ -0,0 +1,108 @@
+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.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class PromotionMail {
+
+ protected String subject = null;
+ protected String message = null;
+
+ private static List products = new ArrayList();
+
+ private static String filePath = "/Users/vi/Desktop/ood/ood-assignment/bin/src/main/java/com/coderising/ood/srp/product_promotion.txt";
+
+ private static ServerDAO server = new ServerDAO();
+
+ public static void main(String[] args) throws Exception {
+
+ File f = new File(filePath);
+ boolean emailDebug = false;
+
+ PromotionMail pe = new PromotionMail(f);
+ for (String[] data : products) {
+ List