From b684e959f56984552b1073c5e518b2119a38a703 Mon Sep 17 00:00:00 2001 From: gongxun Date: Mon, 12 Jun 2017 19:02:26 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../first/ood/srp/Configuration.java | 28 +++++++++ .../first/ood/srp/ConfigurationKeys.java | 10 ++++ students/785396327/first/ood/srp/DBUtil.java | 38 ++++++++++++ students/785396327/first/ood/srp/Email.java | 59 +++++++++++++++++++ .../785396327/first/ood/srp/EmailParser.java | 54 +++++++++++++++++ .../785396327/first/ood/srp/FileParser.java | 44 ++++++++++++++ .../785396327/first/ood/srp/MailSender.java | 22 +++++++ .../785396327/first/ood/srp/MailUtil.java | 16 +++++ .../first/ood/srp/PromotionMail.java | 26 ++++++++ .../785396327/first/ood/srp/SendMailTest.java | 11 ++++ .../785396327/first/ood/srp/StringUtils.java | 17 ++++++ .../first/ood/srp/product_promotion.txt | 4 ++ 12 files changed, 329 insertions(+) create mode 100644 students/785396327/first/ood/srp/Configuration.java create mode 100644 students/785396327/first/ood/srp/ConfigurationKeys.java create mode 100644 students/785396327/first/ood/srp/DBUtil.java create mode 100644 students/785396327/first/ood/srp/Email.java create mode 100644 students/785396327/first/ood/srp/EmailParser.java create mode 100644 students/785396327/first/ood/srp/FileParser.java create mode 100644 students/785396327/first/ood/srp/MailSender.java create mode 100644 students/785396327/first/ood/srp/MailUtil.java create mode 100644 students/785396327/first/ood/srp/PromotionMail.java create mode 100644 students/785396327/first/ood/srp/SendMailTest.java create mode 100644 students/785396327/first/ood/srp/StringUtils.java create mode 100644 students/785396327/first/ood/srp/product_promotion.txt diff --git a/students/785396327/first/ood/srp/Configuration.java b/students/785396327/first/ood/srp/Configuration.java new file mode 100644 index 0000000000..2d4130423e --- /dev/null +++ b/students/785396327/first/ood/srp/Configuration.java @@ -0,0 +1,28 @@ +package first.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/785396327/first/ood/srp/ConfigurationKeys.java b/students/785396327/first/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..28de2ced0a --- /dev/null +++ b/students/785396327/first/ood/srp/ConfigurationKeys.java @@ -0,0 +1,10 @@ +package first.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"; + public static final String NAME_KEY = "NAME"; + public static final String EMAIL_KEY = "EMAIL"; +} diff --git a/students/785396327/first/ood/srp/DBUtil.java b/students/785396327/first/ood/srp/DBUtil.java new file mode 100644 index 0000000000..463b464df4 --- /dev/null +++ b/students/785396327/first/ood/srp/DBUtil.java @@ -0,0 +1,38 @@ +package first.ood.srp; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DBUtil { + + /** + * 应该从数据库读, 但是简化为直接生成。 + * + * @param sql + * @return + */ + public static List> query(String sql) { +// validateSQL(sql, params); + + List userList = new ArrayList(); + for (int i = 1; i <= 3; i++) { + Map userInfo = new HashMap(); + userInfo.put("NAME", "User" + i); + userInfo.put("EMAIL", "aa@bb.com"); + userList.add(userInfo); + } + + return userList; + } + + private static void validateSQL(String sql, Object[] params) { + if (StringUtils.isEmpty(sql)) + throw new RuntimeException("empty sql"); + String[] sqlFaction = sql.split("\\?"); + if (sqlFaction.length - 1 != params.length) + throw new RuntimeException("wrong number of parameters"); + + } +} diff --git a/students/785396327/first/ood/srp/Email.java b/students/785396327/first/ood/srp/Email.java new file mode 100644 index 0000000000..417e9aba6d --- /dev/null +++ b/students/785396327/first/ood/srp/Email.java @@ -0,0 +1,59 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/12. + */ +public class Email { + protected String smtpHost; + protected String altSmtpHost; + protected String fromAddress; + protected String toAddress; + protected String subject; + protected String message; + + public Email() { + + } + + public Email(String smtpHost, String altSmtpHost, String fromAddress, String toAddress, String subject, String message) { + this.smtpHost = smtpHost; + this.altSmtpHost = altSmtpHost; + this.fromAddress = fromAddress; + this.toAddress = toAddress; + this.subject = subject; + this.message = message; + } + + protected void setSMTPHost(String smtpHost) { + this.smtpHost = smtpHost; + } + + protected void setAltSMTPHost(String altSmtpHost) { + this.altSmtpHost = altSmtpHost; + + } + + protected void setFromAddress(String fromAddress) { + this.fromAddress = fromAddress; + } + + protected void setMessage(String message) { + this.message = message; + } + + public String getToAddress() { + return toAddress; + } + + public void setToAddress(String toAddress) { + this.toAddress = toAddress; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } +} diff --git a/students/785396327/first/ood/srp/EmailParser.java b/students/785396327/first/ood/srp/EmailParser.java new file mode 100644 index 0000000000..1129beaf34 --- /dev/null +++ b/students/785396327/first/ood/srp/EmailParser.java @@ -0,0 +1,54 @@ +package first.ood.srp; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by gongxun on 2017/6/12. + */ +public class EmailParser { + + public List parseEmailList(String filepath, String loadQuery) { + List mailList = new ArrayList(); + Email email = parseCommonInfo(filepath); + List> individualInfo = getIndividualInfo(loadQuery); + for (HashMap map : individualInfo) { + PromotionMail promotionMail = new PromotionMail(email); + promotionMail.setToAddress(parseToAddress(map)); + promotionMail.setMessage(parseMessage(map, promotionMail)); + promotionMail.setSubject("您关注的产品降价了"); + mailList.add(promotionMail); + } + return mailList; + } + + private String parseMessage(HashMap map, PromotionMail promotionMail) { + String name = map.get(ConfigurationKeys.NAME_KEY); + String message = "尊敬的 " + name + ", 您关注的产品 " + promotionMail.getProductDesc() + " 降价了,欢迎购买!"; + return message; + } + + private String parseToAddress(HashMap map) { + return map.get(ConfigurationKeys.EMAIL_KEY); + } + + private PromotionMail parseCommonInfo(String filepath) { + Email email = new Email(); + + FileParser fileParser = new FileParser(filepath); +// email.setProductID(fileParser.parseProductID()); +// email.setProductDesc(fileParser.parseProductDesc()); + + Configuration configuration = new Configuration(); +// promotionMail.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); +// promotionMail.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); +// promotionMail.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); +// return promotionMail; + return null; + } + + private List> getIndividualInfo(String loadQuery) { + return DBUtil.query(loadQuery); + } +} diff --git a/students/785396327/first/ood/srp/FileParser.java b/students/785396327/first/ood/srp/FileParser.java new file mode 100644 index 0000000000..52827cdd32 --- /dev/null +++ b/students/785396327/first/ood/srp/FileParser.java @@ -0,0 +1,44 @@ +package first.ood.srp; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +/** + * Created by gongxun on 2017/6/12. + */ +public class FileParser { + private String[] data; + + public FileParser(String filePath) { + try { + if (StringUtils.isEmpty(filePath)) + throw new RuntimeException("init file parser must contains a legal file"); + readFile(filePath); + } catch (IOException e) { + throw new RuntimeException("parse file cause errors"); + } + } + + private void readFile(String filePath) throws IOException + { + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(filePath)); + String temp = br.readLine(); + data = temp.split(" "); + } catch (IOException e) { + throw new IOException(e.getMessage()); + } finally { + br.close(); + } + } + + public String parseProductID() { + return data[0]; + } + + public String parseProductDesc() { + return data[1]; + } +} diff --git a/students/785396327/first/ood/srp/MailSender.java b/students/785396327/first/ood/srp/MailSender.java new file mode 100644 index 0000000000..90d7f42bdb --- /dev/null +++ b/students/785396327/first/ood/srp/MailSender.java @@ -0,0 +1,22 @@ +package first.ood.srp; + +import java.util.Iterator; +import java.util.List; + +/** + * Created by gongxun on 2017/6/12. + */ +public class MailSender { + + private void sendMail(PromotionMail mail, boolean isDebug) { + MailUtil.sendEmail(mail.toAddress, mail.fromAddress, mail.subject, mail.message, StringUtils.isEmpty(mail.smtpHost) == true ? mail.smtpHost : mail.altSmtpHost, isDebug); + } + + public void sendMailList(List mailList, boolean isDebug) { + if (mailList != null) { + for (Iterator iterator = mailList.iterator(); iterator.hasNext(); ) { + sendMail(iterator.next(), isDebug); + } + } + } +} diff --git a/students/785396327/first/ood/srp/MailUtil.java b/students/785396327/first/ood/srp/MailUtil.java new file mode 100644 index 0000000000..2ec9de8c42 --- /dev/null +++ b/students/785396327/first/ood/srp/MailUtil.java @@ -0,0 +1,16 @@ +package first.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/785396327/first/ood/srp/PromotionMail.java b/students/785396327/first/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..1a604b7fe3 --- /dev/null +++ b/students/785396327/first/ood/srp/PromotionMail.java @@ -0,0 +1,26 @@ +package first.ood.srp; + +public class PromotionMail extends Email { + private String productID = null; + private String productDesc = null; + + public PromotionMail(Email email) { + super(email.smtpHost, email.altSmtpHost, email.fromAddress, email.toAddress, email.subject, email.message); + } + + public void setProductID(String productID) { + this.productID = productID; + } + + public String getproductID() { + return productID; + } + + public void setProductDesc(String desc) { + this.productDesc = desc; + } + + public String getProductDesc() { + return this.productDesc; + } +} diff --git a/students/785396327/first/ood/srp/SendMailTest.java b/students/785396327/first/ood/srp/SendMailTest.java new file mode 100644 index 0000000000..69681f6c6d --- /dev/null +++ b/students/785396327/first/ood/srp/SendMailTest.java @@ -0,0 +1,11 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/12. + */ +public class SendMailTest { + + public static void main(String[] args) { + String loadQuery = "Select name from subscriptions where product_id= ? and send_mail=1"; + } +} diff --git a/students/785396327/first/ood/srp/StringUtils.java b/students/785396327/first/ood/srp/StringUtils.java new file mode 100644 index 0000000000..f5321161bb --- /dev/null +++ b/students/785396327/first/ood/srp/StringUtils.java @@ -0,0 +1,17 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/12. + */ +public class StringUtils { + + /** + * 判断文件路径是否为空 + * + * @param filePath + * @return + */ + public static boolean isEmpty(String filePath) { + return filePath == null || filePath.trim().isEmpty(); + } +} diff --git a/students/785396327/first/ood/srp/product_promotion.txt b/students/785396327/first/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/785396327/first/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 From 060700d899c23d957d4b6d3394fd6e9c772bfad8 Mon Sep 17 00:00:00 2001 From: gongxun Date: Mon, 12 Jun 2017 22:06:25 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .../785396327/first/ood/srp/BeanUtils.java | 12 ++++ students/785396327/first/ood/srp/DBUtil.java | 11 +++- students/785396327/first/ood/srp/Email.java | 13 ----- .../785396327/first/ood/srp/EmailParser.java | 55 +++++++++++-------- .../first/ood/srp/PromotionMail.java | 8 +-- .../785396327/first/ood/srp/SendMailTest.java | 9 +++ 7 files changed, 66 insertions(+), 45 deletions(-) create mode 100644 students/785396327/first/ood/srp/BeanUtils.java diff --git a/.gitignore b/.gitignore index f1e9957cfa..4b65de1971 100644 --- a/.gitignore +++ b/.gitignore @@ -280,6 +280,9 @@ target liuxin/.DS_Store liuxin/src/.DS_Store +students/* +!students/785396327 + diff --git a/students/785396327/first/ood/srp/BeanUtils.java b/students/785396327/first/ood/srp/BeanUtils.java new file mode 100644 index 0000000000..617c96666e --- /dev/null +++ b/students/785396327/first/ood/srp/BeanUtils.java @@ -0,0 +1,12 @@ +package first.ood.srp; + +/** + * Created by IBM on 2017/6/12. + */ +public class BeanUtils { + + public static void copyProperties(Object dst, Object src) { + //拷贝方法暂不实现 + } + +} diff --git a/students/785396327/first/ood/srp/DBUtil.java b/students/785396327/first/ood/srp/DBUtil.java index 463b464df4..473b8b1ca4 100644 --- a/students/785396327/first/ood/srp/DBUtil.java +++ b/students/785396327/first/ood/srp/DBUtil.java @@ -13,8 +13,8 @@ public class DBUtil { * @param sql * @return */ - public static List> query(String sql) { -// validateSQL(sql, params); + public static List> query(String sql, Object[] params) { + formateSQL(sql, params); List userList = new ArrayList(); for (int i = 1; i <= 3; i++) { @@ -27,12 +27,17 @@ public static List> query(String sql) { return userList; } - private static void validateSQL(String sql, Object[] params) { + private static String formateSQL(String sql, Object[] params) { if (StringUtils.isEmpty(sql)) throw new RuntimeException("empty sql"); String[] sqlFaction = sql.split("\\?"); if (sqlFaction.length - 1 != params.length) throw new RuntimeException("wrong number of parameters"); + for (int i = 0; i < params.length; i++) { + sql = sql.replaceFirst("\\?", "'" + params[i].toString() + "'"); + } + return sql; } + } diff --git a/students/785396327/first/ood/srp/Email.java b/students/785396327/first/ood/srp/Email.java index 417e9aba6d..11a2c408ae 100644 --- a/students/785396327/first/ood/srp/Email.java +++ b/students/785396327/first/ood/srp/Email.java @@ -11,19 +11,6 @@ public class Email { protected String subject; protected String message; - public Email() { - - } - - public Email(String smtpHost, String altSmtpHost, String fromAddress, String toAddress, String subject, String message) { - this.smtpHost = smtpHost; - this.altSmtpHost = altSmtpHost; - this.fromAddress = fromAddress; - this.toAddress = toAddress; - this.subject = subject; - this.message = message; - } - protected void setSMTPHost(String smtpHost) { this.smtpHost = smtpHost; } diff --git a/students/785396327/first/ood/srp/EmailParser.java b/students/785396327/first/ood/srp/EmailParser.java index 1129beaf34..4c14b8a66f 100644 --- a/students/785396327/first/ood/srp/EmailParser.java +++ b/students/785396327/first/ood/srp/EmailParser.java @@ -9,18 +9,10 @@ */ public class EmailParser { - public List parseEmailList(String filepath, String loadQuery) { - List mailList = new ArrayList(); - Email email = parseCommonInfo(filepath); - List> individualInfo = getIndividualInfo(loadQuery); - for (HashMap map : individualInfo) { - PromotionMail promotionMail = new PromotionMail(email); - promotionMail.setToAddress(parseToAddress(map)); - promotionMail.setMessage(parseMessage(map, promotionMail)); - promotionMail.setSubject("您关注的产品降价了"); - mailList.add(promotionMail); - } - return mailList; + public List parseEmailList(String filepath, String loadQuery, Object[] params) { + PromotionMail email = packageInfoFromConfig(); + packageInfoFromFile(email, filepath); + return packageInfoFromDB(loadQuery, email, params); } private String parseMessage(HashMap map, PromotionMail promotionMail) { @@ -33,22 +25,39 @@ private String parseToAddress(HashMap map) { return map.get(ConfigurationKeys.EMAIL_KEY); } - private PromotionMail parseCommonInfo(String filepath) { - Email email = new Email(); + private List packageInfoFromDB(String loadQuery, PromotionMail email, Object[] params) { + List> individualInfo = getIndividualInfo(loadQuery, params); + List mailList = new ArrayList(); + for (HashMap map : individualInfo) { + PromotionMail completeMail = new PromotionMail(); + BeanUtils.copyProperties(completeMail, email); + completeMail.setToAddress(parseToAddress(map)); + completeMail.setMessage(parseMessage(map, completeMail)); + completeMail.setSubject("您关注的产品降价了"); + mailList.add(completeMail); + } + return mailList; + } + + private PromotionMail packageInfoFromFile(PromotionMail email, String filepath) { FileParser fileParser = new FileParser(filepath); -// email.setProductID(fileParser.parseProductID()); -// email.setProductDesc(fileParser.parseProductDesc()); + email.setProductDesc(fileParser.parseProductDesc()); + email.setProductID(fileParser.parseProductID()); + return email; + } + + private PromotionMail packageInfoFromConfig() { + PromotionMail email = new PromotionMail(); Configuration configuration = new Configuration(); -// promotionMail.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); -// promotionMail.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); -// promotionMail.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); -// return promotionMail; - return null; + email.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); + email.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); + email.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); + return email; } - private List> getIndividualInfo(String loadQuery) { - return DBUtil.query(loadQuery); + private List> getIndividualInfo(String loadQuery, Object[] params) { + return DBUtil.query(loadQuery, params); } } diff --git a/students/785396327/first/ood/srp/PromotionMail.java b/students/785396327/first/ood/srp/PromotionMail.java index 1a604b7fe3..48096fa54a 100644 --- a/students/785396327/first/ood/srp/PromotionMail.java +++ b/students/785396327/first/ood/srp/PromotionMail.java @@ -1,12 +1,8 @@ package first.ood.srp; public class PromotionMail extends Email { - private String productID = null; - private String productDesc = null; - - public PromotionMail(Email email) { - super(email.smtpHost, email.altSmtpHost, email.fromAddress, email.toAddress, email.subject, email.message); - } + private String productID; + private String productDesc; public void setProductID(String productID) { this.productID = productID; diff --git a/students/785396327/first/ood/srp/SendMailTest.java b/students/785396327/first/ood/srp/SendMailTest.java index 69681f6c6d..d82df14609 100644 --- a/students/785396327/first/ood/srp/SendMailTest.java +++ b/students/785396327/first/ood/srp/SendMailTest.java @@ -1,5 +1,7 @@ package first.ood.srp; +import java.util.List; + /** * Created by gongxun on 2017/6/12. */ @@ -7,5 +9,12 @@ public class SendMailTest { public static void main(String[] args) { String loadQuery = "Select name from subscriptions where product_id= ? and send_mail=1"; + String filepath = "D:\\workspace\\IDEA\\homework\\coding2017_section2\\coding2017\\students\\785396327\\first\\ood\\srp\\product_promotion.txt"; + boolean isDebug = false; + + EmailParser emailParser = new EmailParser(); + List promotionMails = emailParser.parseEmailList(filepath, loadQuery); + MailSender mailSender = new MailSender(); + mailSender.sendMailList(promotionMails, isDebug); } } From c46230c4f1587df2c2bc4b1939f3e3328d12ae4d Mon Sep 17 00:00:00 2001 From: gongxun Date: Mon, 12 Jun 2017 22:11:58 +0800 Subject: [PATCH 3/5] update --- students/785396327/first/ood/srp/EmailParser.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/students/785396327/first/ood/srp/EmailParser.java b/students/785396327/first/ood/srp/EmailParser.java index 4c14b8a66f..06782d2c09 100644 --- a/students/785396327/first/ood/srp/EmailParser.java +++ b/students/785396327/first/ood/srp/EmailParser.java @@ -9,10 +9,10 @@ */ public class EmailParser { - public List parseEmailList(String filepath, String loadQuery, Object[] params) { + public List parseEmailList(String filepath, String loadQuery) { PromotionMail email = packageInfoFromConfig(); packageInfoFromFile(email, filepath); - return packageInfoFromDB(loadQuery, email, params); + return packageInfoFromDB(loadQuery, email); } private String parseMessage(HashMap map, PromotionMail promotionMail) { @@ -26,8 +26,8 @@ private String parseToAddress(HashMap map) { } - private List packageInfoFromDB(String loadQuery, PromotionMail email, Object[] params) { - List> individualInfo = getIndividualInfo(loadQuery, params); + private List packageInfoFromDB(String loadQuery, PromotionMail email) { + List> individualInfo = getIndividualInfo(loadQuery, new Object[]{email.getproductID()}); List mailList = new ArrayList(); for (HashMap map : individualInfo) { PromotionMail completeMail = new PromotionMail(); From 312602f928acca1625ea44d742f5adea308f7101 Mon Sep 17 00:00:00 2001 From: gongxun Date: Wed, 14 Jun 2017 18:51:06 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../785396327/first/ood/srp/ConfigParser.java | 9 +++ .../785396327/first/ood/srp/DBParser.java | 22 +++++++ .../785396327/first/ood/srp/EmailParser.java | 63 ++++--------------- .../785396327/first/ood/srp/FileParser.java | 16 ++--- .../first/ood/srp/PromotionFileParser.java | 27 ++++++++ .../ood/srp/PromotionMailConfigParser.java | 15 +++++ .../first/ood/srp/PromotionMailDBParser.java | 39 ++++++++++++ .../785396327/first/ood/srp/SendMailTest.java | 10 ++- 8 files changed, 137 insertions(+), 64 deletions(-) create mode 100644 students/785396327/first/ood/srp/ConfigParser.java create mode 100644 students/785396327/first/ood/srp/DBParser.java create mode 100644 students/785396327/first/ood/srp/PromotionFileParser.java create mode 100644 students/785396327/first/ood/srp/PromotionMailConfigParser.java create mode 100644 students/785396327/first/ood/srp/PromotionMailDBParser.java diff --git a/students/785396327/first/ood/srp/ConfigParser.java b/students/785396327/first/ood/srp/ConfigParser.java new file mode 100644 index 0000000000..21ab317bc9 --- /dev/null +++ b/students/785396327/first/ood/srp/ConfigParser.java @@ -0,0 +1,9 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/14. + */ +public abstract class ConfigParser { + + abstract void parseInfoFromConfig(Email email); +} diff --git a/students/785396327/first/ood/srp/DBParser.java b/students/785396327/first/ood/srp/DBParser.java new file mode 100644 index 0000000000..d85f602528 --- /dev/null +++ b/students/785396327/first/ood/srp/DBParser.java @@ -0,0 +1,22 @@ +package first.ood.srp; + +import java.util.HashMap; +import java.util.List; + +/** + * Created by gongxun on 2017/6/14. + */ +public abstract class DBParser { + private String sql; + + protected DBParser(String sql) { + this.sql = sql; + } + + protected List parseInfoFromDB(Email email) { + List> data = DBUtil.query(sql, null); + return convertData(email, data); + } + + abstract List convertData(Email email, List> data); +} diff --git a/students/785396327/first/ood/srp/EmailParser.java b/students/785396327/first/ood/srp/EmailParser.java index 06782d2c09..74341ad610 100644 --- a/students/785396327/first/ood/srp/EmailParser.java +++ b/students/785396327/first/ood/srp/EmailParser.java @@ -1,63 +1,26 @@ package first.ood.srp; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; /** * Created by gongxun on 2017/6/12. */ public class EmailParser { - - public List parseEmailList(String filepath, String loadQuery) { - PromotionMail email = packageInfoFromConfig(); - packageInfoFromFile(email, filepath); - return packageInfoFromDB(loadQuery, email); - } - - private String parseMessage(HashMap map, PromotionMail promotionMail) { - String name = map.get(ConfigurationKeys.NAME_KEY); - String message = "尊敬的 " + name + ", 您关注的产品 " + promotionMail.getProductDesc() + " 降价了,欢迎购买!"; - return message; - } - - private String parseToAddress(HashMap map) { - return map.get(ConfigurationKeys.EMAIL_KEY); - } - - - private List packageInfoFromDB(String loadQuery, PromotionMail email) { - List> individualInfo = getIndividualInfo(loadQuery, new Object[]{email.getproductID()}); - List mailList = new ArrayList(); - for (HashMap map : individualInfo) { - PromotionMail completeMail = new PromotionMail(); - BeanUtils.copyProperties(completeMail, email); - completeMail.setToAddress(parseToAddress(map)); - completeMail.setMessage(parseMessage(map, completeMail)); - completeMail.setSubject("您关注的产品降价了"); - mailList.add(completeMail); - } - return mailList; - } - - private PromotionMail packageInfoFromFile(PromotionMail email, String filepath) { - FileParser fileParser = new FileParser(filepath); - email.setProductDesc(fileParser.parseProductDesc()); - email.setProductID(fileParser.parseProductID()); - return email; + private ConfigParser configParser; + private FileParser fileParser; + private DBParser dbParser; + + public EmailParser(ConfigParser configParser,FileParser fileParser,DBParser dbParser) { + this.configParser = configParser; + this.fileParser = fileParser; + this.dbParser = dbParser; } - private PromotionMail packageInfoFromConfig() { - PromotionMail email = new PromotionMail(); - - Configuration configuration = new Configuration(); - email.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); - email.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); - email.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); - return email; + public List parseEmailList() { + PromotionMail promotionMail = new PromotionMail(); + configParser.parseInfoFromConfig(promotionMail); + fileParser.parseInfoFromFile(promotionMail); + return dbParser.parseInfoFromDB(promotionMail); } - private List> getIndividualInfo(String loadQuery, Object[] params) { - return DBUtil.query(loadQuery, params); - } } diff --git a/students/785396327/first/ood/srp/FileParser.java b/students/785396327/first/ood/srp/FileParser.java index 52827cdd32..1f14c11389 100644 --- a/students/785396327/first/ood/srp/FileParser.java +++ b/students/785396327/first/ood/srp/FileParser.java @@ -7,10 +7,10 @@ /** * Created by gongxun on 2017/6/12. */ -public class FileParser { - private String[] data; +public abstract class FileParser { + protected String[] data; - public FileParser(String filePath) { + protected FileParser(String filePath) { try { if (StringUtils.isEmpty(filePath)) throw new RuntimeException("init file parser must contains a legal file"); @@ -20,8 +20,7 @@ public FileParser(String filePath) { } } - private void readFile(String filePath) throws IOException - { + private void readFile(String filePath) throws IOException { BufferedReader br = null; try { br = new BufferedReader(new FileReader(filePath)); @@ -34,11 +33,6 @@ private void readFile(String filePath) throws IOException } } - public String parseProductID() { - return data[0]; - } + protected abstract void parseInfoFromFile(Email email); - public String parseProductDesc() { - return data[1]; - } } diff --git a/students/785396327/first/ood/srp/PromotionFileParser.java b/students/785396327/first/ood/srp/PromotionFileParser.java new file mode 100644 index 0000000000..78a8dfaa66 --- /dev/null +++ b/students/785396327/first/ood/srp/PromotionFileParser.java @@ -0,0 +1,27 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/14. + */ +public class PromotionFileParser extends FileParser { + + + public PromotionFileParser(String filePath) { + super(filePath); + } + + @Override + protected void parseInfoFromFile(Email email) { + PromotionMail promotionMail = (PromotionMail) email; + promotionMail.setProductID(parseProductID()); + promotionMail.setProductDesc(parseProductDesc()); + } + + private String parseProductID() { + return super.data[0]; + } + + private String parseProductDesc() { + return super.data[1]; + } +} diff --git a/students/785396327/first/ood/srp/PromotionMailConfigParser.java b/students/785396327/first/ood/srp/PromotionMailConfigParser.java new file mode 100644 index 0000000000..dd6ce2e89f --- /dev/null +++ b/students/785396327/first/ood/srp/PromotionMailConfigParser.java @@ -0,0 +1,15 @@ +package first.ood.srp; + +/** + * Created by gongxun on 2017/6/14. + */ +public class PromotionMailConfigParser extends ConfigParser { + + @Override + void parseInfoFromConfig(Email email) { + Configuration configuration = new Configuration(); + email.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); + email.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); + email.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); + } +} diff --git a/students/785396327/first/ood/srp/PromotionMailDBParser.java b/students/785396327/first/ood/srp/PromotionMailDBParser.java new file mode 100644 index 0000000000..68878c02d4 --- /dev/null +++ b/students/785396327/first/ood/srp/PromotionMailDBParser.java @@ -0,0 +1,39 @@ +package first.ood.srp; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by gongxun on 2017/6/14. + */ +public class PromotionMailDBParser extends DBParser { + + protected PromotionMailDBParser(String sql) { + super(sql); + } + + @Override + List convertData(Email email, List> data) { + List mailList = new ArrayList(); + for (HashMap map : data) { + PromotionMail completeMail = new PromotionMail(); + BeanUtils.copyProperties(completeMail, email); + completeMail.setToAddress(parseToAddress(map)); + completeMail.setMessage(parseMessage(map, completeMail)); + completeMail.setSubject("您关注的产品降价了"); + mailList.add(completeMail); + } + return mailList; + } + + private String parseMessage(HashMap map, PromotionMail promotionMail) { + String name = map.get(ConfigurationKeys.NAME_KEY); + String message = "尊敬的 " + name + ", 您关注的产品 " + promotionMail.getProductDesc() + " 降价了,欢迎购买!"; + return message; + } + + private String parseToAddress(HashMap map) { + return map.get(ConfigurationKeys.EMAIL_KEY); + } +} diff --git a/students/785396327/first/ood/srp/SendMailTest.java b/students/785396327/first/ood/srp/SendMailTest.java index d82df14609..ef917aa593 100644 --- a/students/785396327/first/ood/srp/SendMailTest.java +++ b/students/785396327/first/ood/srp/SendMailTest.java @@ -8,12 +8,16 @@ public class SendMailTest { public static void main(String[] args) { - String loadQuery = "Select name from subscriptions where product_id= ? and send_mail=1"; + String sql = "Select name from subscriptions where product_id= ? and send_mail=1"; String filepath = "D:\\workspace\\IDEA\\homework\\coding2017_section2\\coding2017\\students\\785396327\\first\\ood\\srp\\product_promotion.txt"; boolean isDebug = false; - EmailParser emailParser = new EmailParser(); - List promotionMails = emailParser.parseEmailList(filepath, loadQuery); + ConfigParser configParser = new PromotionMailConfigParser(); + FileParser fileParser = new PromotionFileParser(filepath); + DBParser DBParser = new PromotionMailDBParser(sql); + + EmailParser emailParser = new EmailParser(configParser, fileParser, DBParser); + List promotionMails = emailParser.parseEmailList(); MailSender mailSender = new MailSender(); mailSender.sendMailList(promotionMails, isDebug); } From 988a0c79020702af67cbec4f2179d5a5b35d8d7f Mon Sep 17 00:00:00 2001 From: gongxun Date: Sat, 17 Jun 2017 21:53:58 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E5=B0=8F?= =?UTF-8?q?=E7=BB=86=E8=8A=82=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../785396327/first/ood/srp/BeanUtils.java | 12 -------- .../785396327/first/ood/srp/ConfigParser.java | 2 +- .../785396327/first/ood/srp/DBParser.java | 16 +++++----- students/785396327/first/ood/srp/Email.java | 2 +- .../785396327/first/ood/srp/EmailParser.java | 2 +- .../785396327/first/ood/srp/MailSender.java | 23 +++++++++++---- .../first/ood/srp/PromotionFileParser.java | 2 +- .../ood/srp/PromotionMailConfigParser.java | 2 +- .../first/ood/srp/PromotionMailDBParser.java | 29 ++++++++++++------- .../785396327/first/ood/srp/SendMailTest.java | 6 ++-- .../785396327/first/ood/srp/StringUtils.java | 10 +++---- 11 files changed, 58 insertions(+), 48 deletions(-) delete mode 100644 students/785396327/first/ood/srp/BeanUtils.java diff --git a/students/785396327/first/ood/srp/BeanUtils.java b/students/785396327/first/ood/srp/BeanUtils.java deleted file mode 100644 index 617c96666e..0000000000 --- a/students/785396327/first/ood/srp/BeanUtils.java +++ /dev/null @@ -1,12 +0,0 @@ -package first.ood.srp; - -/** - * Created by IBM on 2017/6/12. - */ -public class BeanUtils { - - public static void copyProperties(Object dst, Object src) { - //拷贝方法暂不实现 - } - -} diff --git a/students/785396327/first/ood/srp/ConfigParser.java b/students/785396327/first/ood/srp/ConfigParser.java index 21ab317bc9..87e00e707e 100644 --- a/students/785396327/first/ood/srp/ConfigParser.java +++ b/students/785396327/first/ood/srp/ConfigParser.java @@ -1,7 +1,7 @@ package first.ood.srp; /** - * Created by gongxun on 2017/6/14. + * Created by william on 2017/6/14. */ public abstract class ConfigParser { diff --git a/students/785396327/first/ood/srp/DBParser.java b/students/785396327/first/ood/srp/DBParser.java index d85f602528..3e49e6abd7 100644 --- a/students/785396327/first/ood/srp/DBParser.java +++ b/students/785396327/first/ood/srp/DBParser.java @@ -4,19 +4,21 @@ import java.util.List; /** - * Created by gongxun on 2017/6/14. + * Created by william on 2017/6/14. */ -public abstract class DBParser { - private String sql; +public abstract class DBParser { + protected String sql; + protected Object[] params; - protected DBParser(String sql) { + protected DBParser(String sql, Object[] params) { this.sql = sql; + this.params = params; } - protected List parseInfoFromDB(Email email) { - List> data = DBUtil.query(sql, null); + protected List parseInfoFromDB(T email) { + List> data = DBUtil.query(sql, params); return convertData(email, data); } - abstract List convertData(Email email, List> data); + abstract List convertData(T email, List> data); } diff --git a/students/785396327/first/ood/srp/Email.java b/students/785396327/first/ood/srp/Email.java index 11a2c408ae..ebca19e579 100644 --- a/students/785396327/first/ood/srp/Email.java +++ b/students/785396327/first/ood/srp/Email.java @@ -1,7 +1,7 @@ package first.ood.srp; /** - * Created by gongxun on 2017/6/12. + * Created by william on 2017/6/12. */ public class Email { protected String smtpHost; diff --git a/students/785396327/first/ood/srp/EmailParser.java b/students/785396327/first/ood/srp/EmailParser.java index 74341ad610..e6f422b52f 100644 --- a/students/785396327/first/ood/srp/EmailParser.java +++ b/students/785396327/first/ood/srp/EmailParser.java @@ -3,7 +3,7 @@ import java.util.List; /** - * Created by gongxun on 2017/6/12. + * Created by william on 2017/6/12. */ public class EmailParser { private ConfigParser configParser; diff --git a/students/785396327/first/ood/srp/MailSender.java b/students/785396327/first/ood/srp/MailSender.java index 90d7f42bdb..a2ed82db46 100644 --- a/students/785396327/first/ood/srp/MailSender.java +++ b/students/785396327/first/ood/srp/MailSender.java @@ -4,17 +4,28 @@ import java.util.List; /** - * Created by gongxun on 2017/6/12. + * Created by william on 2017/6/12. */ -public class MailSender { +public class MailSender { - private void sendMail(PromotionMail mail, boolean isDebug) { - MailUtil.sendEmail(mail.toAddress, mail.fromAddress, mail.subject, mail.message, StringUtils.isEmpty(mail.smtpHost) == true ? mail.smtpHost : mail.altSmtpHost, isDebug); + private void sendMail(Email mail, boolean isDebug) { + if (!StringUtils.isEmpty(mail.toAddress)) + try { + MailUtil.sendEmail( + mail.toAddress, + mail.fromAddress, + mail.subject, + mail.message, + StringUtils.isEmpty(mail.smtpHost) == true ? mail.smtpHost : mail.altSmtpHost, + isDebug); + } catch (Exception e) { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + e.getMessage()); + } } - public void sendMailList(List mailList, boolean isDebug) { + public void sendMailList(List mailList, boolean isDebug) { if (mailList != null) { - for (Iterator iterator = mailList.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = mailList.iterator(); iterator.hasNext(); ) { sendMail(iterator.next(), isDebug); } } diff --git a/students/785396327/first/ood/srp/PromotionFileParser.java b/students/785396327/first/ood/srp/PromotionFileParser.java index 78a8dfaa66..1d57b8de2e 100644 --- a/students/785396327/first/ood/srp/PromotionFileParser.java +++ b/students/785396327/first/ood/srp/PromotionFileParser.java @@ -1,7 +1,7 @@ package first.ood.srp; /** - * Created by gongxun on 2017/6/14. + * Created by william on 2017/6/14. */ public class PromotionFileParser extends FileParser { diff --git a/students/785396327/first/ood/srp/PromotionMailConfigParser.java b/students/785396327/first/ood/srp/PromotionMailConfigParser.java index dd6ce2e89f..6fd8feb08c 100644 --- a/students/785396327/first/ood/srp/PromotionMailConfigParser.java +++ b/students/785396327/first/ood/srp/PromotionMailConfigParser.java @@ -1,7 +1,7 @@ package first.ood.srp; /** - * Created by gongxun on 2017/6/14. + * Created by william on 2017/6/14. */ public class PromotionMailConfigParser extends ConfigParser { diff --git a/students/785396327/first/ood/srp/PromotionMailDBParser.java b/students/785396327/first/ood/srp/PromotionMailDBParser.java index 68878c02d4..55e740474f 100644 --- a/students/785396327/first/ood/srp/PromotionMailDBParser.java +++ b/students/785396327/first/ood/srp/PromotionMailDBParser.java @@ -5,24 +5,33 @@ import java.util.List; /** - * Created by gongxun on 2017/6/14. + * Created by william on 2017/6/14. */ public class PromotionMailDBParser extends DBParser { - protected PromotionMailDBParser(String sql) { - super(sql); + protected PromotionMailDBParser(String sql, Object[] params) { + super(sql, params); } + /** + * 由于sql参数需要运行时提供所以重写parseInfoFromDB方法 + * @param email + * @return + */ @Override - List convertData(Email email, List> data) { + protected List parseInfoFromDB(PromotionMail email) { + List> data = DBUtil.query(super.sql, new Object[]{email.getproductID()}); + return convertData(email, data); + } + + @Override + List convertData(PromotionMail email, List> data) { List mailList = new ArrayList(); for (HashMap map : data) { - PromotionMail completeMail = new PromotionMail(); - BeanUtils.copyProperties(completeMail, email); - completeMail.setToAddress(parseToAddress(map)); - completeMail.setMessage(parseMessage(map, completeMail)); - completeMail.setSubject("您关注的产品降价了"); - mailList.add(completeMail); + email.setToAddress(parseToAddress(map)); + email.setMessage(parseMessage(map, email)); + email.setSubject("您关注的产品降价了"); + mailList.add(email); } return mailList; } diff --git a/students/785396327/first/ood/srp/SendMailTest.java b/students/785396327/first/ood/srp/SendMailTest.java index ef917aa593..2b54947c05 100644 --- a/students/785396327/first/ood/srp/SendMailTest.java +++ b/students/785396327/first/ood/srp/SendMailTest.java @@ -3,7 +3,7 @@ import java.util.List; /** - * Created by gongxun on 2017/6/12. + * Created by william on 2017/6/12. */ public class SendMailTest { @@ -14,11 +14,11 @@ public static void main(String[] args) { ConfigParser configParser = new PromotionMailConfigParser(); FileParser fileParser = new PromotionFileParser(filepath); - DBParser DBParser = new PromotionMailDBParser(sql); + DBParser DBParser = new PromotionMailDBParser(sql, null); EmailParser emailParser = new EmailParser(configParser, fileParser, DBParser); List promotionMails = emailParser.parseEmailList(); - MailSender mailSender = new MailSender(); + MailSender mailSender = new MailSender(); mailSender.sendMailList(promotionMails, isDebug); } } diff --git a/students/785396327/first/ood/srp/StringUtils.java b/students/785396327/first/ood/srp/StringUtils.java index f5321161bb..ec0483fa8b 100644 --- a/students/785396327/first/ood/srp/StringUtils.java +++ b/students/785396327/first/ood/srp/StringUtils.java @@ -1,17 +1,17 @@ package first.ood.srp; /** - * Created by gongxun on 2017/6/12. + * Created by william on 2017/6/12. */ public class StringUtils { /** - * 判断文件路径是否为空 + * 判断字符串是否为空 * - * @param filePath + * @param str * @return */ - public static boolean isEmpty(String filePath) { - return filePath == null || filePath.trim().isEmpty(); + public static boolean isEmpty(String str) { + return str == null || str.trim().isEmpty(); } }