From 96a90f260d5e0ca1d6c5effd4684c8ef1018b9e8 Mon Sep 17 00:00:00 2001 From: chengyu Date: Tue, 20 Jun 2017 23:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=82=AE=E4=BB=B6=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/coderising/ood/ocp/DateUtil.java | 10 +++ .../java/com/coderising/ood/ocp/Logger.java | 38 ++++++++++ .../java/com/coderising/ood/ocp/MailUtil.java | 10 +++ .../java/com/coderising/ood/ocp/SMSUtil.java | 10 +++ .../coderising/ood/ocp/good/Formatter.java | 7 ++ .../ood/ocp/good/FormatterFactory.java | 13 ++++ .../ood/ocp/good/HtmlFormatter.java | 11 +++ .../com/coderising/ood/ocp/good/Logger.java | 18 +++++ .../coderising/ood/ocp/good/RawFormatter.java | 11 +++ .../com/coderising/ood/ocp/good/Sender.java | 7 ++ .../com/coderising/ood/srp/Configuration.java | 23 ++++++ .../coderising/ood/srp/ConfigurationKeys.java | 9 +++ .../java/com/coderising/ood/srp/DBUtil.java | 25 +++++++ .../java/com/coderising/ood/srp/Mail.java | 44 ++++++++++++ .../java/com/coderising/ood/srp/Product.java | 49 +++++++++++++ .../com/coderising/ood/srp/PromotionMail.java | 72 +++++++++++++++++++ .../coderising/ood/srp/product_promotion.txt | 4 ++ 17 files changed, 361 insertions(+) create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/DateUtil.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/Logger.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/MailUtil.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/SMSUtil.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/Formatter.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/Logger.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/ocp/good/Sender.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/Configuration.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/DBUtil.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/Mail.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/Product.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/PromotionMail.java create mode 100644 students/583884851/src/main/java/com/coderising/ood/srp/product_promotion.txt diff --git a/students/583884851/src/main/java/com/coderising/ood/ocp/DateUtil.java b/students/583884851/src/main/java/com/coderising/ood/ocp/DateUtil.java new file mode 100644 index 0000000000..0d0d01098f --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/Logger.java b/students/583884851/src/main/java/com/coderising/ood/ocp/Logger.java new file mode 100644 index 0000000000..aca173e665 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/MailUtil.java b/students/583884851/src/main/java/com/coderising/ood/ocp/MailUtil.java new file mode 100644 index 0000000000..59d77649a2 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/SMSUtil.java b/students/583884851/src/main/java/com/coderising/ood/ocp/SMSUtil.java new file mode 100644 index 0000000000..fab4cd01b7 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/Formatter.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/Formatter.java new file mode 100644 index 0000000000..b6e2ccbc16 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/FormatterFactory.java new file mode 100644 index 0000000000..3c2009a674 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/HtmlFormatter.java new file mode 100644 index 0000000000..3d375f5acc --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/Logger.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/Logger.java new file mode 100644 index 0000000000..f206472d0d --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/RawFormatter.java new file mode 100644 index 0000000000..7f1cb4ae30 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/ocp/good/Sender.java b/students/583884851/src/main/java/com/coderising/ood/ocp/good/Sender.java new file mode 100644 index 0000000000..aaa46c1fb7 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/srp/Configuration.java b/students/583884851/src/main/java/com/coderising/ood/srp/Configuration.java new file mode 100644 index 0000000000..f328c1816a --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/583884851/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..8695aed644 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/583884851/src/main/java/com/coderising/ood/srp/DBUtil.java new file mode 100644 index 0000000000..82e9261d18 --- /dev/null +++ b/students/583884851/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/583884851/src/main/java/com/coderising/ood/srp/Mail.java b/students/583884851/src/main/java/com/coderising/ood/srp/Mail.java new file mode 100644 index 0000000000..f195417dac --- /dev/null +++ b/students/583884851/src/main/java/com/coderising/ood/srp/Mail.java @@ -0,0 +1,44 @@ +package com.coderising.ood.srp; + +/** + * 邮件类 + * + * @author chengyu + * @version 17/6/20 + */ +public class Mail { + protected String smtpHost = null; + protected String altSmtpHost = null; + protected String fromAddress = null; + protected String toAddress = null; + protected String subject = null; + protected String message = null; + + public Mail() { + + } + + public Mail(Configuration config) { + smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER); + altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER); + fromAddress = config.getProperty(ConfigurationKeys.EMAIL_ADMIN); + } + + public void send() { + 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()); + } + + public void setToAddress(String toAddress) { + this.toAddress = toAddress; + } + + public void setContent(String subject, String message) { + this.subject = subject; + this.message = message; + } +} diff --git a/students/583884851/src/main/java/com/coderising/ood/srp/Product.java b/students/583884851/src/main/java/com/coderising/ood/srp/Product.java new file mode 100644 index 0000000000..da05192e51 --- /dev/null +++ b/students/583884851/src/main/java/com/coderising/ood/srp/Product.java @@ -0,0 +1,49 @@ +package com.coderising.ood.srp; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +/** + * @author chengyu + * @version 17/6/20 + */ +public class Product { + protected String productID = null; + protected String productDesc = null; + + public Product() { + } + + public Product(String productID, String productDesc) { + this.productID = productID; + this.productDesc = productDesc; + } + + public static Product of(File file) throws IOException { + BufferedReader br; + br = new BufferedReader(new FileReader(file)); + 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]); + } + + 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/583884851/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/583884851/src/main/java/com/coderising/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..307cfd3dd9 --- /dev/null +++ b/students/583884851/src/main/java/com/coderising/ood/srp/PromotionMail.java @@ -0,0 +1,72 @@ +package com.coderising.ood.srp; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +public class PromotionMail { + + private Product product; + + private static final String NAME_KEY = "NAME"; + private static final String EMAIL_KEY = "EMAIL"; + + public PromotionMail() { + File f = new File("C:\\coderising\\workspace_ds\\ood-example\\src\\product_promotion.txt"); + try { + product = Product.of(f); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } + } + + public static void main(String[] args) throws Exception { + PromotionMail pe = new PromotionMail(); + List emailList = pe.loadMailingList(); + pe.sendEMails(emailList); + } + + + protected List loadMailingList() throws Exception { + String sendMailQuery = "Select name from subscriptions " + + "where product_id= '" + product.getProductID() + "' " + + "and send_mail=1 "; + return DBUtil.query(sendMailQuery); + } + + + protected void sendEMails(List mailingList) throws IOException { + + System.out.println("开始发送邮件"); + Mail mail = new Mail(new Configuration()); + + if (mailingList != null) { + Iterator iter = mailingList.iterator(); + while (iter.hasNext()) { + HashMap userInfo = (HashMap) iter.next(); + mail.setToAddress((String) userInfo.get(EMAIL_KEY)); + setContent(mail, userInfo, product); + try { + mail.send(); + } catch (Exception e) { + try { + mail.send(); + } catch (Exception e2) { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage()); + } + } + } + } else { + System.out.println("没有邮件发送"); + } + } + + private void setContent(Mail mail, HashMap userInfo, Product product) { + String subject = "您关注的产品降价了"; + String name = (String) userInfo.get(NAME_KEY); + String message = "尊敬的 " + name + ", 您关注的产品 " + product.getProductDesc() + " 降价了,欢迎购买!"; + mail.setContent(subject, message); + } +} diff --git a/students/583884851/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/583884851/src/main/java/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..0c0124cc61 --- /dev/null +++ b/students/583884851/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