diff --git a/liuxin/knowledge-point/pom.xml b/liuxin/knowledge-point/pom.xml new file mode 100644 index 0000000000..3dc438c7d9 --- /dev/null +++ b/liuxin/knowledge-point/pom.xml @@ -0,0 +1,32 @@ + + 4.0.0 + + com.coderising + knowledge-point + 0.0.1-SNAPSHOT + jar + + knowledge-point + http://maven.apache.org + + + UTF-8 + + + + + + junit + junit + 4.12 + + + + + + aliyunmaven + http://maven.aliyun.com/nexus/content/groups/public/ + + + diff --git a/liuxin/knowledge-point/src/main/java/cas/CASSequence.java b/liuxin/knowledge-point/src/main/java/cas/CASSequence.java new file mode 100644 index 0000000000..dcff77d9bf --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/cas/CASSequence.java @@ -0,0 +1,18 @@ +package cas; + +import java.util.concurrent.atomic.AtomicInteger; + +public class CASSequence{ + + private AtomicInteger count = new AtomicInteger(0); + + public int next(){ + while(true){ + int current = count.get(); + int next = current +1; + if(count.compareAndSet(current, next)){ + return next; + } + } + } +} \ No newline at end of file diff --git a/liuxin/knowledge-point/src/main/java/cas/NoBlockingStack.java b/liuxin/knowledge-point/src/main/java/cas/NoBlockingStack.java new file mode 100644 index 0000000000..d7be44c69a --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/cas/NoBlockingStack.java @@ -0,0 +1,34 @@ +package cas; + +import java.util.concurrent.atomic.AtomicReference; + +public class NoBlockingStack { + static class Node { + final E item; + Node next; + public Node(E item) { this.item = item; } + } + + AtomicReference> head = new AtomicReference>(); + + public void push(E item) { + Node newHead = new Node(item); + Node oldHead; + do { + oldHead = head.get(); + newHead.next = oldHead; + } while (!head.compareAndSet(oldHead, newHead)); + } + public E pop() { + Node oldHead; + Node newHead; + do { + oldHead = head.get(); + if (oldHead == null) + return null; + newHead = oldHead.next; + } while (!head.compareAndSet(oldHead,newHead)); + return oldHead.item; + } + +} diff --git a/liuxin/knowledge-point/src/main/java/cas/Sequence.java b/liuxin/knowledge-point/src/main/java/cas/Sequence.java new file mode 100644 index 0000000000..688224e251 --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/cas/Sequence.java @@ -0,0 +1,11 @@ +package cas; + +public class Sequence{ + + private int value; + + public int next(){ + return value ++; + } + +} diff --git a/liuxin/knowledge-point/src/main/java/threadlocal/Context.java b/liuxin/knowledge-point/src/main/java/threadlocal/Context.java new file mode 100644 index 0000000000..d84584397b --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/threadlocal/Context.java @@ -0,0 +1,20 @@ +package threadlocal; +import java.util.HashMap; +import java.util.Map; + +public class Context { + + private static final ThreadLocal txThreadLocal + = new ThreadLocal(); + + public static void setTransactionID(String txID) { + txThreadLocal.set(txID); + + } + + public static String getTransactionId() { + return txThreadLocal.get(); + } + +} + diff --git a/liuxin/knowledge-point/src/main/java/threadlocal/TransactionManager.java b/liuxin/knowledge-point/src/main/java/threadlocal/TransactionManager.java new file mode 100644 index 0000000000..8a5283fcab --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/threadlocal/TransactionManager.java @@ -0,0 +1,22 @@ +package threadlocal; + +public class TransactionManager { + private static final ThreadLocal context = new ThreadLocal(); + + public static void startTransaction() { + // logic to start a transaction + // ... + String txID = null; + context.set(txID); + } + + public static String getTransactionId() { + return context.get(); + } + + public static void endTransaction() { + // logic to end a transaction + // … + context.remove(); + } +} diff --git a/liuxin/knowledge-point/src/main/java/threadpool/BlockingQueue.java b/liuxin/knowledge-point/src/main/java/threadpool/BlockingQueue.java new file mode 100644 index 0000000000..faca2d2c70 --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/threadpool/BlockingQueue.java @@ -0,0 +1,35 @@ +package threadpool; +import java.util.LinkedList; +import java.util.List; + +public class BlockingQueue { + + private List queue = new LinkedList(); + private int limit = 10; + + public BlockingQueue(int limit) { + this.limit = limit; + } + + public synchronized void enqueue(Object item) throws InterruptedException { + while (this.queue.size() == this.limit) { + wait(); + } + if (this.queue.size() == 0) { + notifyAll(); + } + this.queue.add(item); + } + + public synchronized Object dequeue() throws InterruptedException { + while (this.queue.size() == 0) { + wait(); + } + if (this.queue.size() == this.limit) { + notifyAll(); + } + + return this.queue.remove(0); + } + +} diff --git a/liuxin/knowledge-point/src/main/java/threadpool/Task.java b/liuxin/knowledge-point/src/main/java/threadpool/Task.java new file mode 100644 index 0000000000..07413d9798 --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/threadpool/Task.java @@ -0,0 +1,5 @@ +package threadpool; + +public interface Task { + public void execute(); +} diff --git a/liuxin/knowledge-point/src/main/java/threadpool/ThreadPool.java b/liuxin/knowledge-point/src/main/java/threadpool/ThreadPool.java new file mode 100644 index 0000000000..f508f76eb5 --- /dev/null +++ b/liuxin/knowledge-point/src/main/java/threadpool/ThreadPool.java @@ -0,0 +1,37 @@ +package threadpool; +import java.util.ArrayList; +import java.util.List; + + +public class ThreadPool { + + private BlockingQueue taskQueue = null; + private List threads = new ArrayList(); + private boolean isStopped = false; + + public ThreadPool(int numOfThreads, int maxNumOfTasks){ + taskQueue = new BlockingQueue(maxNumOfTasks); + + for(int i=0; i + 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/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java new file mode 100644 index 0000000000..9a4cbb0f0c --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java @@ -0,0 +1,28 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.ocp; + +import com.coderising.ood.ocp.formatter.LogFormatter; +import com.coderising.ood.ocp.handler.LogHandler; + +/** + * @Description: + * @author palmshe + * @date 2017年6月19日 下午9:10:02 + */ +public class Logger { + + private LogHandler logHandler; + private LogFormatter logFormatter; + + public Logger(LogHandler handler, LogFormatter formatter){ + this.logHandler= handler; + this.logFormatter= formatter; + } + + public void log(String msg){ + this.logHandler.handleLog(this.logFormatter.formatMsg(msg)); + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Main.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Main.java new file mode 100644 index 0000000000..9a072602b0 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/Main.java @@ -0,0 +1,29 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.ocp; + +import com.coderising.ood.ocp.formatter.DateUtil; +import com.coderising.ood.ocp.formatter.LogFormatter; +import com.coderising.ood.ocp.handler.LogHandler; +import com.coderising.ood.ocp.handler.MailUtil; +import com.coderising.ood.ocp.handler.SMSUtil; + +/** + * @Description: + * @author palmshe + * @date 2017年6月19日 下午9:36:38 + */ +public class Main { + + public static void main(String[] args) { + LogHandler sms= new SMSUtil(); + LogHandler mail= new MailUtil(); + LogFormatter date= new DateUtil(); + Logger log= new Logger(sms, date); + log.log("hello world"); + log= new Logger(mail, date); + log.log("hello coder"); + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/DateUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/DateUtil.java new file mode 100644 index 0000000000..7b45fd15dd --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/DateUtil.java @@ -0,0 +1,20 @@ +package com.coderising.ood.ocp.formatter; + +import java.util.Date; + +public class DateUtil implements LogFormatter{ + + private String getCurrentDateAsString() { + + return "current date: "+ new Date(); + } + + /* (non-Javadoc) + * @see com.coderising.ood.ocp.LogFormatter#formatMsg(java.lang.String) + */ + @Override + public String formatMsg(String msg) { + return getCurrentDateAsString()+ ", "+ msg; + } + +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/LogFormatter.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/LogFormatter.java new file mode 100644 index 0000000000..0be87702f2 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/formatter/LogFormatter.java @@ -0,0 +1,15 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.ocp.formatter; + +/** + * @Description: + * @author palmshe + * @date 2017年6月19日 下午9:07:00 + */ +public interface LogFormatter { + + String formatMsg(String msg); +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/LogHandler.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/LogHandler.java new file mode 100644 index 0000000000..e86cebba24 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/LogHandler.java @@ -0,0 +1,17 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.ocp.handler; + +import java.io.Serializable; + +/** + * @Description: + * @author palmshe + * @date 2017年6月19日 下午9:08:04 + */ +public interface LogHandler extends Serializable{ + + void handleLog(String msg); +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/MailUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/MailUtil.java new file mode 100644 index 0000000000..e9fb2d90da --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/MailUtil.java @@ -0,0 +1,9 @@ +package com.coderising.ood.ocp.handler; + +public class MailUtil implements LogHandler{ + + public void handleLog(String logMsg) { + System.out.println("MailUtil handle, msg= "+ logMsg); + } + +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/PrintUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/PrintUtil.java new file mode 100644 index 0000000000..8f2ab2b697 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/PrintUtil.java @@ -0,0 +1,21 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.ocp.handler; + +/** + * @Description: + * @author palmshe + * @date 2017年6月19日 下午9:22:49 + */ +public class PrintUtil implements LogHandler{ + + /* (non-Javadoc) + * @see com.coderising.ood.ocp.LogHandler#send(java.lang.String) + */ + @Override + public void handleLog(String msg) { + System.out.println("PrintUtil handle, msg= "+ msg); + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/SMSUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/SMSUtil.java new file mode 100644 index 0000000000..4bd916587d --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/ocp/handler/SMSUtil.java @@ -0,0 +1,9 @@ +package com.coderising.ood.ocp.handler; + +public class SMSUtil implements LogHandler{ + + public void handleLog(String logMsg) { + System.out.println("SMSUtil handle, msg= "+ logMsg); + } + +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java new file mode 100644 index 0000000000..ccffce577d --- /dev/null +++ b/students/1132643730/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 static String getProperty(String key) { + + return configurations.get(key); + } + +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..8695aed644 --- /dev/null +++ b/students/1132643730/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/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java new file mode 100644 index 0000000000..82e9261d18 --- /dev/null +++ b/students/1132643730/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/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/DataGenerator.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/DataGenerator.java new file mode 100644 index 0000000000..6e9f1c2e84 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/DataGenerator.java @@ -0,0 +1,64 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.srp; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @author palmshe + * @date 2017年6月11日 下午10:24:46 + */ +public class DataGenerator { + + /** + * @Description:获取商品 + * @param file + * @return + * @throws IOException + */ + public static Map generateGoods(File file) throws IOException{ + Map good= new HashMap(); + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(file)); + String temp = br.readLine(); + String[] data = temp.split(" "); + + good.put(PromotionMail.ID_KEY, data[0]); + good.put(PromotionMail.DESC_KEY, data[1]); + + System.out.println("产品ID = " + data[0] + "\n"); + System.out.println("产品描述 = " + data[1] + "\n"); + + } catch (IOException e) { + throw new IOException(e.getMessage()); + } finally { + br.close(); + } + return good; + } + + /** + * @Description:获取客户 + * @param good + * @return + * @throws Exception + */ + public static List loadMailingList(Map good) throws Exception { + String id= (String)good.get(PromotionMail.ID_KEY); + String sendMailQuery = "Select name from subscriptions " + + "where product_id= '" + id +"' " + + "and send_mail=1 "; + + return DBUtil.query(sendMailQuery); + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java new file mode 100644 index 0000000000..e31d8a9b75 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java @@ -0,0 +1,41 @@ +package com.coderising.ood.srp; + +public class MailUtil { + + private static String fromAddress; + private static String smtpServer; + private static String altSmtpServer; + + public MailUtil(String fromAddress, String smtpServer, String altSmtpServer){ + this.fromAddress= fromAddress; + this.smtpServer= smtpServer; + this.altSmtpServer= altSmtpServer; + } + + /** + * @Description:发送邮件 + * @param pm + * @param debug + */ + public void sendEmail(PromotionMail pm, boolean debug){ + try { + sendEmail(fromAddress, pm.toAddress, pm.subject, pm.message, smtpServer, debug); + } catch (Exception e1) { + try { + sendEmail(fromAddress, pm.toAddress, pm.subject, pm.message, altSmtpServer, debug); + } catch (Exception e2) { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage()); + } + } + } + + private void sendEmail(String from, String to, String subject, String message, String server, boolean debug){ +// 假装发了一封邮件 + StringBuilder buffer = new StringBuilder(); + buffer.append("From:").append(from).append("\n"); + buffer.append("To:").append(to).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/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java new file mode 100644 index 0000000000..9e8a514191 --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java @@ -0,0 +1,34 @@ +/** + * 版权 (c) 2017 palmshe.com + * 保留所有权利。 + */ +package com.coderising.ood.srp; + +import java.io.File; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @author palmshe + * @date 2017年6月12日 下午10:07:23 + */ +public class Main { + public static void main(String[] args) { + try { + File f = new File("C:\\Users\\Administrator.PC-20170125UBDJ\\Desktop\\coder2017\\coding2017\\students\\1132643730\\ood-assignment\\src\\main\\java\\com\\coderising\\ood\\srp\\product_promotion.txt"); + MailUtil maiUtil= new MailUtil(Configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN), Configuration.getProperty(ConfigurationKeys.SMTP_SERVER), Configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); + Map good = DataGenerator.generateGoods(f); + List users= DataGenerator.loadMailingList(good); + if (!users.isEmpty()) { + Iterator it= users.iterator(); + while (it.hasNext()) { + maiUtil.sendEmail(new PromotionMail((Map)it.next(), good), true); + } + } + } catch (Exception e) { + System.out.println("构造发送邮件数据失败:"+ e.getMessage()); + } + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..a773d878ee --- /dev/null +++ b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java @@ -0,0 +1,26 @@ +package com.coderising.ood.srp; + +import java.util.Map; + +public class PromotionMail { + + protected String toAddress = null; + protected String subject = null; + protected String message = null; + protected String productID = null; + protected String productDesc = null; + + protected static final String NAME_KEY = "NAME"; + protected static final String EMAIL_KEY = "EMAIL"; + protected static final String ID_KEY = "ID"; + protected static final String DESC_KEY = "DESC"; + + public PromotionMail(Map user, Map good){ + String name = (String)user.get(NAME_KEY); + this.productDesc= (String)good.get(DESC_KEY); + this.productID= (String)good.get(ID_KEY); + this.toAddress= (String)user.get(EMAIL_KEY); + this.subject = "您关注的产品降价了"; + this.message = "尊敬的 "+name+", 您关注的产品 " + productDesc + " 降价了,欢迎购买!" ; + } +} diff --git a/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/1132643730/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/1132643730/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/1132643730/readme.md b/students/1132643730/readme.md new file mode 100644 index 0000000000..fdae662c31 --- /dev/null +++ b/students/1132643730/readme.md @@ -0,0 +1 @@ +### 学着使用git \ No newline at end of file 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/2816977791/ood/ood-assignment/pom.xml b/students/2816977791/ood/ood-assignment/pom.xml new file mode 100644 index 0000000000..cac49a5328 --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/DateUtil.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/DateUtil.java new file mode 100644 index 0000000000..0d0d01098f --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/LogMsgConvert.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/LogMsgConvert.java new file mode 100644 index 0000000000..a2c2d82a98 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/LogMsgConvert.java @@ -0,0 +1,9 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public interface LogMsgConvert { + String getLogFromMsg(String msg); +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java new file mode 100644 index 0000000000..532dc9a611 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Logger.java @@ -0,0 +1,22 @@ +package com.coderising.ood.ocp; + +public class Logger { + + Sender sender; + LogMsgConvert convert; + + public Logger(int logType, int logMethod) { + convert = RawLogFactory.createFormatter(logType); + sender = SenderFactory.createSenderFormat(logMethod); + } + + public void log(String msg) { + sender.send(convert.getLogFromMsg(msg)); + } + + public static void main(String[] args) { + Logger logger = new Logger(1, 3); + logger.log("123"); + } +} + diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailSender.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailSender.java new file mode 100644 index 0000000000..5fa0c23759 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailSender.java @@ -0,0 +1,12 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class MailSender implements Sender { + @Override + public void send(String logMsg) { + MailUtil.send(logMsg); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailUtil.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/MailUtil.java new file mode 100644 index 0000000000..59d77649a2 --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/PrintSender.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/PrintSender.java new file mode 100644 index 0000000000..7e69eb15d9 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/PrintSender.java @@ -0,0 +1,12 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class PrintSender implements Sender { + @Override + public void send(String logMsg) { + System.out.println(logMsg); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLog.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLog.java new file mode 100644 index 0000000000..ebcfce56b9 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLog.java @@ -0,0 +1,14 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class RawLog implements LogMsgConvert{ + + @Override + public String getLogFromMsg(String msg) { + String logMsg = msg; + return logMsg; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogFactory.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogFactory.java new file mode 100644 index 0000000000..c593ae3ace --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogFactory.java @@ -0,0 +1,17 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class RawLogFactory { + public static LogMsgConvert createFormatter(int type) { + if (type == 1) { + return new RawLog(); + } + if (type == 2) { + return new RawLogWtihDate(); + } + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogWtihDate.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogWtihDate.java new file mode 100644 index 0000000000..a30ad24665 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/RawLogWtihDate.java @@ -0,0 +1,15 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class RawLogWtihDate implements LogMsgConvert { + + @Override + public String getLogFromMsg(String msg) { + String txtDate = DateUtil.getCurrentDateAsString(); + String logMsg = txtDate + ": " + msg; + return logMsg; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSSender.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSSender.java new file mode 100644 index 0000000000..9a5f4a572a --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSSender.java @@ -0,0 +1,12 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class SMSSender implements Sender { + @Override + public void send(String logMsg) { + SMSUtil.send(logMsg); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSUtil.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SMSUtil.java new file mode 100644 index 0000000000..fab4cd01b7 --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Sender.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Sender.java new file mode 100644 index 0000000000..7d0c47ed22 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/Sender.java @@ -0,0 +1,9 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public interface Sender { + void send(String logMsg); +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SenderFactory.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SenderFactory.java new file mode 100644 index 0000000000..32c09afb78 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/ocp/SenderFactory.java @@ -0,0 +1,19 @@ +package com.coderising.ood.ocp; + +/** + * @author nvarchar + * date 2017/6/28 + */ +public class SenderFactory { + + public static Sender createSenderFormat(int method) { + if (method == 1) { + return new MailSender(); + } else if (method == 2) { + return new SMSSender(); + } else if (method == 3) { + return new PrintSender(); + } + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java new file mode 100644 index 0000000000..f328c1816a --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..8695aed644 --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java new file mode 100644 index 0000000000..82e9261d18 --- /dev/null +++ b/students/2816977791/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/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java new file mode 100644 index 0000000000..eb8896e527 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/FileUtil.java @@ -0,0 +1,16 @@ +package com.coderising.ood.srp; + +import java.io.File; +import java.io.IOException; + +/** + * @author nvarchar + * date 2017/6/26 + */ +public class FileUtil { + + protected static String[] readFile(File file) throws IOException // @02C + { + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Mail.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Mail.java new file mode 100644 index 0000000000..9a72ea60d6 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Mail.java @@ -0,0 +1,33 @@ +package com.coderising.ood.srp; + +import java.util.List; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class Mail { + private User user; + + public Mail(User u) { + this.user = u; + } + + public String getAddress() { + return user.getEMailAddress(); + } + + public String getSubject() { + return "您关注的产品降价了"; + } + + public String getBody() { + return "尊敬的 " + user.getName() + ", 您关注的产品 " + this.buildProductDescList() + " 降价了,欢迎购买!"; + } + + private String buildProductDescList() { + List products = user.getSubscribedProducts(); + //.... 实现略... + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailService.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailService.java new file mode 100644 index 0000000000..3e6788915d --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailService.java @@ -0,0 +1,46 @@ +package com.coderising.ood.srp; + +/** + * 发送邮件 + * + * @author nvarchar + * date 2017/6/26 + */ +public class MailService { + private String fromAddress; + private String smtpHost; + private String altSmtpHost; + + public MailService(Configuration config) { + this.fromAddress = config.getProperty(ConfigurationKeys.EMAIL_ADMIN); + this.smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER); + this.altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER); + } + + public void sendMail(Mail mail) { + try { + sendEmail(mail, this.smtpHost); + } catch (Exception e) { + try { + sendEmail(mail, this.altSmtpHost); + } catch (Exception ex) { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + ex.getMessage()); + } + + } + } + + private void sendEmail(Mail mail, String smtpHost) { + String toAddress = mail.getAddress(); + String subject = mail.getSubject(); + String msg = mail.getBody(); + //发送邮件 + //假装发了一封邮件 + 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(msg).append("\n"); + System.out.println(buffer.toString()); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Product.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Product.java new file mode 100644 index 0000000000..45cd069953 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Product.java @@ -0,0 +1,31 @@ +package com.coderising.ood.srp; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class Product { + private String id; + private String desc; + + public Product(String id, String desc) { + this.id = id; + this.desc = desc; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ProductService.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ProductService.java new file mode 100644 index 0000000000..b5c801e1a8 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ProductService.java @@ -0,0 +1,32 @@ +package com.coderising.ood.srp; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class ProductService { + + public List getProductLists(String filePath) throws IOException { + List products = new ArrayList<>(); + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(filePath)); + String temp; + while ((temp = br.readLine()) != null) { + String[] data = temp.split(" "); + products.add(new Product(data[0], data[1])); + } + return products; + } catch (IOException e) { + throw new IOException(e.getMessage()); + } finally { + br.close(); + } + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMain.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMain.java new file mode 100644 index 0000000000..aea2699c2c --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMain.java @@ -0,0 +1,39 @@ +package com.coderising.ood.srp; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class PromotionMain { + private ProductService productService = new ProductService(); + private UserService userService = new UserService(); + + public void run(String filepath) throws IOException { + + Configuration cfg = new Configuration(); + + List productList = productService.getProductLists(filepath); + + Set users = new HashSet<>(); + for (Product product : productList) { + List userList = userService.getUsers(product); + //todo 将userlist中的user和对应的product添加到users中 + } + MailService mailService = new MailService(cfg); + for (User user : users) { + mailService.sendMail(new Mail(user)); + } + } + + public static void main(String[] args) throws Exception { + String filePath = "/Users/nvarchar/Documents/github/coding2017-2/" + + "students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt"; + PromotionMain main = new PromotionMain(); + main.run(filePath); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/User.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/User.java new file mode 100644 index 0000000000..4d2ea42edc --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/User.java @@ -0,0 +1,27 @@ +package com.coderising.ood.srp; + +import java.util.List; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class User { + private String name; + private String emailAddress; + + private List products; + + public String getName() { + return name; + } + + public String getEMailAddress() { + return emailAddress; + } + + public List getSubscribedProducts() { + return this.products; + } + +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/UserService.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/UserService.java new file mode 100644 index 0000000000..3b2e68fb31 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/UserService.java @@ -0,0 +1,15 @@ +package com.coderising.ood.srp; + +import java.util.List; + +/** + * @author nvarchar + * date 2017/6/29 + */ +public class UserService { + + public List getUsers(Product product){ + //调用DAO相关的类从数据库中读取订阅产品的用户列表 + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..0c0124cc61 --- /dev/null +++ b/students/2816977791/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/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/395135865/ood/ood-assignment/pom.xml b/students/395135865/ood/ood-assignment/pom.xml new file mode 100644 index 0000000000..cac49a5328 --- /dev/null +++ b/students/395135865/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/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java new file mode 100644 index 0000000000..d2205cdbe7 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java @@ -0,0 +1,22 @@ +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 中去读 + */ + public String getProperty(String key) { + return configurations.get(key); + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..8695aed644 --- /dev/null +++ b/students/395135865/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/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/DBUtil.java new file mode 100644 index 0000000000..82e9261d18 --- /dev/null +++ b/students/395135865/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/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/MailUtil.java new file mode 100644 index 0000000000..9f9e749af7 --- /dev/null +++ b/students/395135865/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/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java b/students/395135865/ood/ood-assignment/src/main/java/com/coderising/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..781587a846 --- /dev/null +++ b/students/395135865/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("C:\\coderising\\workspace_ds\\ood-example\\src\\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/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Email.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Email.java new file mode 100644 index 0000000000..7943a5581a --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Email.java @@ -0,0 +1,56 @@ +package com.thomsom.coderising.ood.srp; + +/** + * the email message entity class. + * + * @author Thomson Tang + * @version Created: 23/06/2017. + */ +public class Email { + private String fromAddress; + private String toAddress; + private String subject; + private String content; + + public Email() { + } + + public Email(String fromAddress, String toAddress, String subject, String content) { + this.fromAddress = fromAddress; + this.toAddress = toAddress; + this.subject = subject; + this.content = content; + } + + public String getFromAddress() { + return fromAddress; + } + + public void setFromAddress(String fromAddress) { + this.fromAddress = fromAddress; + } + + 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; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Product.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Product.java new file mode 100644 index 0000000000..9fca6b61db --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/Product.java @@ -0,0 +1,44 @@ +package com.thomsom.coderising.ood.srp; + +/** + * Product entity class. + * + * @author Thomson Tang + * @version Created: 23/06/2017. + */ +public class Product { + private String productId; + private String productName; + + private Product() { + } + + private Product(String productId, String productName) { + this.productId = productId; + this.productName = productName; + } + + public static Product newInstance(String productId, String productName) { + return new Product(productId, productName); + } + + public static Product newInstance() { + return new Product(); + } + + public String getProductId() { + return productId; + } + + public void setProductId(String productId) { + this.productId = productId; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/PromotionTask.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/PromotionTask.java new file mode 100644 index 0000000000..91fd78926a --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/PromotionTask.java @@ -0,0 +1,24 @@ +package com.thomsom.coderising.ood.srp; + +import com.thomsom.coderising.ood.srp.service.EmailService; +import com.thomsom.coderising.ood.srp.service.impl.EmailServiceImpl; + +import java.util.List; + +/** + * 应用场景类: 促销任务 + * + * @author Thomson Tang + * @version Created: 02/07/2017. + */ +public class PromotionTask { + public static void main(String[] args) { + try { + EmailService emailService = new EmailServiceImpl(); + List emails = emailService.createEmails(); + emailService.sendEmails(emails); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/UserInfo.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/UserInfo.java new file mode 100644 index 0000000000..bf653eb20d --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/UserInfo.java @@ -0,0 +1,59 @@ +package com.thomsom.coderising.ood.srp; + +import java.util.ArrayList; +import java.util.List; + +/** + * the user info entity class. + * + * @author Thomson Tang + * @version Created: 23/06/2017. + */ +public class UserInfo { + private String userId; + private String userName; + private String email; + + List products = new ArrayList<>(); + + public UserInfo() { + } + + public UserInfo(String userId, String userName, String email) { + this.userId = userId; + this.userName = userName; + this.email = email; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public List getProducts() { + return products; + } + + public void setProducts(List products) { + this.products = products; + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/EmailService.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/EmailService.java new file mode 100644 index 0000000000..d922b9fe0f --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/EmailService.java @@ -0,0 +1,28 @@ +package com.thomsom.coderising.ood.srp.service; + +import com.thomsom.coderising.ood.srp.Email; + +import java.util.List; + +/** + * 邮件服务 + * + * @author Thomson Tang + * @version Created: 29/06/2017. + */ +public interface EmailService { + /** + * 创建要发送的邮件,相当于写邮件 + * + * @return 返回若干邮件 + * @throws Exception if error + */ + List createEmails() throws Exception; + + /** + * 发送邮件 + * @param emails 要发送的邮件 + * @throws Exception if error occurs + */ + void sendEmails(List emails) throws Exception; +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/MailSender.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/MailSender.java new file mode 100644 index 0000000000..163db708e7 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/MailSender.java @@ -0,0 +1,20 @@ +package com.thomsom.coderising.ood.srp.service; + +import com.thomsom.coderising.ood.srp.Email; + +import java.util.List; + +/** + * 邮件发送服务 + * + * @author Thomson Tang + * @version Created: 30/06/2017. + */ +public interface MailSender { + + String getSenderAddress(); + + String getSmtpHost(); + + void sendMail(List emails); +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/ProductService.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/ProductService.java new file mode 100644 index 0000000000..da39ee967e --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/ProductService.java @@ -0,0 +1,29 @@ +package com.thomsom.coderising.ood.srp.service; + +import com.thomsom.coderising.ood.srp.Product; + +import java.util.List; + +/** + * 商品业务逻辑接口 + * + * @author Thomson Tang + * @version Created: 23/06/2017. + */ +public interface ProductService { + /** + * 查询所有的商品 + * + * @return 商品列表 + * @throws Exception if error + */ + List listProduct() throws Exception; + + /** + * 根据用户查询该用户关注的商品 + * + * @param userId 用户标示符 + * @return 用户关注的商品 + */ + List listSubscriptProduct(String userId); +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/UserService.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/UserService.java new file mode 100644 index 0000000000..5e9716ae6d --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/UserService.java @@ -0,0 +1,15 @@ +package com.thomsom.coderising.ood.srp.service; + +import com.thomsom.coderising.ood.srp.UserInfo; + +import java.util.List; + +/** + * the user service + * + * @author Thomson Tang + * @version Created: 29/06/2017. + */ +public interface UserService { + List listUser() throws Exception; +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/EmailServiceImpl.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/EmailServiceImpl.java new file mode 100644 index 0000000000..4906b714e3 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/EmailServiceImpl.java @@ -0,0 +1,53 @@ +package com.thomsom.coderising.ood.srp.service.impl; + +import com.thomsom.coderising.ood.srp.Email; +import com.thomsom.coderising.ood.srp.Product; +import com.thomsom.coderising.ood.srp.UserInfo; +import com.thomsom.coderising.ood.srp.service.MailSender; +import com.thomsom.coderising.ood.srp.service.EmailService; +import com.thomsom.coderising.ood.srp.service.ProductService; +import com.thomsom.coderising.ood.srp.service.UserService; + +import java.util.ArrayList; +import java.util.List; + +/** + * 邮件服务的实现类 + * + * @author Thomson Tang + * @version Created: 29/06/2017. + */ +public class EmailServiceImpl implements EmailService { + + private UserService userService; + private ProductService productService; + private MailSender mailSender; + + @Override + public List createEmails() throws Exception { + List emailList = new ArrayList<>(); + List userInfoList = userService.listUser(); + userInfoList.forEach(userInfo -> { + Email email = new Email(); + email.setToAddress(userInfo.getEmail()); + email.setSubject("您关注的产品降价了..."); + productService.listSubscriptProduct(userInfo.getUserId()); + email.setContent(buildContent(userInfo)); + emailList.add(email); + }); + + return emailList; + } + + @Override + public void sendEmails(List emails) throws Exception { + mailSender.sendMail(emails); + } + + private String buildContent(UserInfo userInfo) { + List products = productService.listSubscriptProduct(userInfo.getUserId()); + StringBuilder allProduct = new StringBuilder(); + products.stream().forEach(product -> allProduct.append(product).append(",")); + return String.format("尊敬的%s,您关注的产品%s降价了,欢迎购买!", userInfo.getUserName(), allProduct.toString()); + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/MailSenderImpl.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/MailSenderImpl.java new file mode 100644 index 0000000000..741f4e2b08 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/MailSenderImpl.java @@ -0,0 +1,35 @@ +package com.thomsom.coderising.ood.srp.service.impl; + +import com.coderising.ood.srp.Configuration; +import com.coderising.ood.srp.ConfigurationKeys; +import com.thomsom.coderising.ood.srp.Email; +import com.thomsom.coderising.ood.srp.service.MailSender; + +import java.util.List; + +/** + * 发送邮件的实现类 + * + * @author Thomson Tang + * @version Created: 01/07/2017. + */ +public class MailSenderImpl implements MailSender { + + private Configuration configuration; + + @Override + public String getSenderAddress() { + return configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN); + } + + @Override + public String getSmtpHost() { + return configuration.getProperty(ConfigurationKeys.SMTP_SERVER); + } + + @Override + public void sendMail(List emails) { + //模拟发送邮件 + emails.forEach(email -> email.setFromAddress(getSenderAddress())); + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/ProductFileServiceImpl.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/ProductFileServiceImpl.java new file mode 100644 index 0000000000..1434d92967 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/ProductFileServiceImpl.java @@ -0,0 +1,55 @@ +package com.thomsom.coderising.ood.srp.service.impl; + +import com.thomsom.coderising.ood.srp.Product; +import com.thomsom.coderising.ood.srp.service.ProductService; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +/** + * the implementation of product service which listing the products by reading from a file. + * + * @author Thomson Tang + * @version Created: 24/06/2017. + */ +public class ProductFileServiceImpl implements ProductService { + private String fileName; + + public ProductFileServiceImpl(String fileName) { + this.fileName = fileName; + } + + @Override + public List listProduct() throws Exception { + List products = new ArrayList<>(); + Path path = Paths.get(getClass().getResource(fileName).toURI()); + Stream lines = Files.lines(path); + lines.forEach(line -> products.add(resolveProduct(line))); + return products; + } + + @Override + public List listSubscriptProduct(String userId) { + return null; + } + + private Product resolveProduct(String line) { + String[] items = line.split(" "); + if (items.length > 2) { + return Product.newInstance(items[0], items[1]); + } + return Product.newInstance(); + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/UserServiceImpl.java b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/UserServiceImpl.java new file mode 100644 index 0000000000..56bcb3be6e --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/java/com/thomsom/coderising/ood/srp/service/impl/UserServiceImpl.java @@ -0,0 +1,26 @@ +package com.thomsom.coderising.ood.srp.service.impl; + +import com.thomsom.coderising.ood.srp.UserInfo; +import com.thomsom.coderising.ood.srp.service.UserService; + +import java.util.ArrayList; +import java.util.List; + +/** + * the implementation of user service. + * + * @author Thomson Tang + * @version Created: 29/06/2017. + */ +public class UserServiceImpl implements UserService { + + @Override + public List listUser() throws Exception { + List userInfos = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + UserInfo userInfo = new UserInfo(String.valueOf(i), "user" + i, String.format("user%d@qq.com", i)); + userInfos.add(userInfo); + } + return userInfos; + } +} diff --git a/students/395135865/ood/ood-assignment/src/main/resources/com/coderising/ood/srp/product_promotion.txt b/students/395135865/ood/ood-assignment/src/main/resources/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/395135865/ood/ood-assignment/src/main/resources/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/402246209/learning/pom.xml b/students/402246209/learning/pom.xml index 435c8fd478..8e4668829c 100644 --- a/students/402246209/learning/pom.xml +++ b/students/402246209/learning/pom.xml @@ -40,21 +40,17 @@ - - org.apache.maven.plugins - maven-jar-plugin - 2.6 - - - - com.mimieye.odd.srp.main.PromotionEmailMain - - - - + + + + org.apache.commons + commons-lang3 + 3.5 + + \ No newline at end of file diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Dice.java b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Dice.java new file mode 100644 index 0000000000..c791c8f900 --- /dev/null +++ b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Dice.java @@ -0,0 +1,37 @@ +package com.mimieye.odd.uml.dice; + +/** + * Created by Pierreluo on 2017/6/27. + */ +public class Dice { + private int[] values; + private int currentValueIndex; + private int capacity; + + public Dice(int capacity) { + this.capacity = capacity; + init(); + } + + private void init() { + this.values = new int[capacity]; + int i = 0; + int judge = capacity - 1; + while(true) { + values[i] = i; + if(i == judge) { + break; + } + i++; + } + this.currentValueIndex = 0; + } + + public int getCurrentValue() { + return values[currentValueIndex]; + } + + public void setCurrentValueIndex(int currentValueIndex) { + this.currentValueIndex = currentValueIndex; + } +} diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/DiceGame.java b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/DiceGame.java new file mode 100644 index 0000000000..439b5f7c7b --- /dev/null +++ b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/DiceGame.java @@ -0,0 +1,25 @@ +package com.mimieye.odd.uml.dice; + +/** + * Created by Pierreluo on 2017/6/27. + */ +public class DiceGame { + private int winValue; + + public DiceGame(int winValue) { + this.winValue = winValue; + } + + public boolean result(Dice... dices) { + int resultValue = 0; + for(Dice dice : dices) { + resultValue += dice.getCurrentValue(); + } + if(resultValue == winValue) { + return true; + } else { + return false; + } + } + +} diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Player.java b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Player.java new file mode 100644 index 0000000000..e6387788b6 --- /dev/null +++ b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/Player.java @@ -0,0 +1,47 @@ +package com.mimieye.odd.uml.dice; + +import org.apache.commons.lang3.RandomUtils; + +/** + * Created by Pierreluo on 2017/6/27. + */ +public class Player { + private Dice[] dices; + private DiceGame diceGame; + + public Player(int diceSize, int diceCapacity, int winValue) { + init(diceSize, diceCapacity, winValue); + } + + private void init(int diceSize, int diceCapacity, int winValue) { + dices = new Dice[diceSize]; + for(int i = 0; i < diceSize; i++) { + dices[i] = new Dice(diceCapacity); + } + diceGame = new DiceGame(winValue); + } + + public boolean play() { + for(Dice dice : dices) { + dice.setCurrentValueIndex(RandomUtils.nextInt(0,6)); + } + return diceGame.result(dices); + } + + public static void main(String[] args) { + Player player = new Player(2, 6, 7); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + System.out.println(player.play()); + } + +} diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceClass.jpg b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceClass.jpg new file mode 100644 index 0000000000..845c31c1ca Binary files /dev/null and b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceClass.jpg differ diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceSequence.jpg b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceSequence.jpg new file mode 100644 index 0000000000..168baadc21 Binary files /dev/null and b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/dice/diceSequence.jpg differ diff --git a/students/402246209/learning/src/main/java/com/mimieye/odd/uml/shopping/shoppingUseCase.jpg b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/shopping/shoppingUseCase.jpg new file mode 100644 index 0000000000..33e6ac55ae Binary files /dev/null and b/students/402246209/learning/src/main/java/com/mimieye/odd/uml/shopping/shoppingUseCase.jpg differ 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> list = pe.loadMailingList(data[0]); + if (list != null && list.size() > 0) { + pe.sendEMails(list, data[1]); + } + } + + + + } + + /** + * 构造器,初始化应该加载商品的详细信息。 + * @param file + * @throws IOException + */ + public PromotionMail(File file) throws IOException { + //读取配置文件, 文件中只有一行用空格隔开, 例如 P8756 iPhone8 + readFile(file); + } + +// /** +// * 促销邮件; +// * @param file +// * @param mailDebug +// * @throws Exception +// */ +// public PromotionMail(File file, boolean mailDebug) throws Exception { +// +// setLoadQuery(); +// +// sendEMails(mailDebug, loadMailingList()); +// } +// + + protected void setMessage(String name, String productDesc) throws IOException { + this.subject = "您关注的产品降价了"; + this.message = "尊敬的 " + name + ", 您关注的产品 " + productDesc + " 降价了,欢迎购买!"; + } + + protected void readFile(File file) throws IOException // @02C + { + List list = FileUtil.parseToString(file, " "); + if(list != null && !list.isEmpty()){ + products = list; + for (String[] data: products) { + System.out.println("产品ID = " + data[0] + "\n"); + System.out.println("产品描述 = " + data[1] + "\n"); + } + } + } + + + + protected List loadMailingList(String productID) throws Exception { + return server.getList(productID); + } + + + protected void sendEMails(List> mailingList,String productDesc) throws IOException + { + System.out.println("开始发送邮件"); + + if (mailingList != null) { + Iterator> iter = mailingList.iterator(); + while (iter.hasNext()) { + Map map = iter.next(); + String toAddress = (String) map.get("EMAIL"); + String name = (String) map.get("NAME"); + setMessage(name, productDesc); + if (toAddress != null && toAddress.length() > 0) + MailUtil.sendEmail(toAddress, subject, message); + } + } else { + System.out.println("没有邮件发送"); + } + } +} diff --git a/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/ServerDAO.java b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/ServerDAO.java new file mode 100644 index 0000000000..30a4c5bdde --- /dev/null +++ b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/ServerDAO.java @@ -0,0 +1,31 @@ + +package com.coderising.ood.srp; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author 作者 Denny + * @date 创建时间:Jun 25, 2017 2:20:04 PM + * @version 1.0 + * @parameter + * @since + * @return */ +public class ServerDAO { + public List> getList(String productID) { + // TODO Auto-generated method stub + List> list = new ArrayList>(); + String sql = "Select name from subscriptions " + "where product_id= '" + productID + "' " + + "and send_mail=1 "; + + System.out.println("loadQuery set"); + try { + list = DBUtil.query(sql); + } catch (Exception e) { + e.printStackTrace(); + } + + return list; + } +} diff --git a/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/729693763/1.ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..0c0124cc61 --- /dev/null +++ b/students/729693763/1.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/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/DateUtil.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/DateUtil.java new file mode 100644 index 0000000000..8defe31480 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/DateUtil.java @@ -0,0 +1,10 @@ +package com.github.wluqing.coding2017.basic.ood.ocp; + +public class DateUtil { + + public static String getCurrentDateAsString() { + + return null; + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/Logger.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/Logger.java new file mode 100644 index 0000000000..34907a0ed9 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/Logger.java @@ -0,0 +1,38 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/MailUtil.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/MailUtil.java new file mode 100644 index 0000000000..d2b51e3abd --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/MailUtil.java @@ -0,0 +1,10 @@ +package com.github.wluqing.coding2017.basic.ood.ocp; + +public class MailUtil { + + public static void send(String logMsg) { + // TODO Auto-generated method stub + + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/SMSUtil.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/SMSUtil.java new file mode 100644 index 0000000000..b499c47efb --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/SMSUtil.java @@ -0,0 +1,10 @@ +package com.github.wluqing.coding2017.basic.ood.ocp; + +public class SMSUtil { + + public static void send(String logMsg) { + // TODO Auto-generated method stub + + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Formatter.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Formatter.java new file mode 100644 index 0000000000..642fbb35d6 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Formatter.java @@ -0,0 +1,7 @@ +package com.github.wluqing.coding2017.basic.ood.ocp.good; + +public interface Formatter { + + String format(String msg); + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/FormatterFactory.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/FormatterFactory.java new file mode 100644 index 0000000000..e0542f7be6 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/FormatterFactory.java @@ -0,0 +1,13 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/HtmlFormatter.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/HtmlFormatter.java new file mode 100644 index 0000000000..d901191524 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/HtmlFormatter.java @@ -0,0 +1,11 @@ +package com.github.wluqing.coding2017.basic.ood.ocp.good; + +public class HtmlFormatter implements Formatter { + + @Override + public String format(String msg) { + + return null; + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Logger.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Logger.java new file mode 100644 index 0000000000..8b0dce72b6 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Logger.java @@ -0,0 +1,18 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/RawFormatter.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/RawFormatter.java new file mode 100644 index 0000000000..ecc8daff9e --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/RawFormatter.java @@ -0,0 +1,11 @@ +package com.github.wluqing.coding2017.basic.ood.ocp.good; + +public class RawFormatter implements Formatter { + + @Override + public String format(String msg) { + + return null; + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Sender.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Sender.java new file mode 100644 index 0000000000..407ac9f2c2 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/ocp/good/Sender.java @@ -0,0 +1,7 @@ +package com.github.wluqing.coding2017.basic.ood.ocp.good; + +public interface Sender { + + void send(String msg); + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Affiliation.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Affiliation.java new file mode 100644 index 0000000000..587ce68f29 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Affiliation.java @@ -0,0 +1,5 @@ +package com.github.wluqing.coding2017.basic.ood.payroll; + +public interface Affiliation { + public double calculateDeductions(Paycheck pc); +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Employee.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Employee.java new file mode 100644 index 0000000000..8c7ee3a469 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Employee.java @@ -0,0 +1,42 @@ +package com.github.wluqing.coding2017.basic.ood.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/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Paycheck.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Paycheck.java new file mode 100644 index 0000000000..c6ed31d5e3 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/Paycheck.java @@ -0,0 +1,35 @@ +package com.github.wluqing.coding2017.basic.ood.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/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentClassification.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentClassification.java new file mode 100644 index 0000000000..af249d9557 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentClassification.java @@ -0,0 +1,5 @@ +package com.github.wluqing.coding2017.basic.ood.payroll; + +public interface PaymentClassification { + public double calculatePay(Paycheck pc); +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentMethod.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentMethod.java new file mode 100644 index 0000000000..9b25d28fed --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentMethod.java @@ -0,0 +1,5 @@ +package com.github.wluqing.coding2017.basic.ood.payroll; + +public interface PaymentMethod { + public void pay(Paycheck pc); +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentSchedule.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentSchedule.java new file mode 100644 index 0000000000..63791efbb8 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/PaymentSchedule.java @@ -0,0 +1,8 @@ +package com.github.wluqing.coding2017.basic.ood.payroll; + +import java.util.Date; + +public interface PaymentSchedule { + public boolean isPayDate(Date date); + public Date getPayPeriodStartDate( Date payPeriodEndDate); +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/SalesReceipt.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/SalesReceipt.java new file mode 100644 index 0000000000..79c0d8882b --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/SalesReceipt.java @@ -0,0 +1,14 @@ +package com.github.wluqing.coding2017.basic.ood.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/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/TimeCard.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/TimeCard.java new file mode 100644 index 0000000000..7860212a4d --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/payroll/TimeCard.java @@ -0,0 +1,15 @@ +package com.github.wluqing.coding2017.basic.ood.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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/Configuration.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/Configuration.java new file mode 100644 index 0000000000..d431224c09 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/Configuration.java @@ -0,0 +1,23 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/ConfigurationKeys.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..87749f5066 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/ConfigurationKeys.java @@ -0,0 +1,9 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/DBUtil.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/DBUtil.java new file mode 100644 index 0000000000..d4df5ad069 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/DBUtil.java @@ -0,0 +1,25 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/MailUtil.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/MailUtil.java new file mode 100644 index 0000000000..82c1a3279a --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/MailUtil.java @@ -0,0 +1,18 @@ +package com.github.wluqing.coding2017.basic.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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/PromotionMail.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..0dba90c8ec --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/PromotionMail.java @@ -0,0 +1,199 @@ +package com.github.wluqing.coding2017.basic.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("C:\\coderising\\workspace_ds\\ood-example\\src\\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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/MailBodyTemplate.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/MailBodyTemplate.java new file mode 100644 index 0000000000..87ef5a8c8b --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/MailBodyTemplate.java @@ -0,0 +1,5 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good.template; + +public interface MailBodyTemplate { + public String render(); +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/TextMailBodyTemplate.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/TextMailBodyTemplate.java new file mode 100644 index 0000000000..e515229473 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good/template/TextMailBodyTemplate.java @@ -0,0 +1,19 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good.template; + +import java.util.Map; + +public class TextMailBodyTemplate implements MailBodyTemplate { + + private MapparamMap ; + + public TextMailBodyTemplate(Map map){ + paramMap = map; + } + + @Override + public String render() { + //使用某种模板技术实现Render + return null; + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Configuration.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Configuration.java new file mode 100644 index 0000000000..71a78aae1e --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Configuration.java @@ -0,0 +1,23 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; +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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ConfigurationKeys.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ConfigurationKeys.java new file mode 100644 index 0000000000..928978a1b8 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ConfigurationKeys.java @@ -0,0 +1,9 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +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/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Mail.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Mail.java new file mode 100644 index 0000000000..3d10b3d64a --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Mail.java @@ -0,0 +1,27 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +import java.util.List; + +public class Mail { + + private User user; + + public Mail(User u){ + this.user = u; + } + public String getAddress(){ + return user.getEMailAddress(); + } + public String getSubject(){ + return "您关注的产品降价了"; + } + public String getBody(){ + + return "尊敬的 "+user.getName()+", 您关注的产品 " + this.buildProductDescList() + " 降价了,欢迎购买!" ; + } + private String buildProductDescList() { + List products = user.getSubscribedProducts(); + //.... 实现略... + return null; + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/MailSender.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/MailSender.java new file mode 100644 index 0000000000..02487cbbd9 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/MailSender.java @@ -0,0 +1,35 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +public class MailSender { + + private String fromAddress ; + private String smtpHost; + private String altSmtpHost; + + public MailSender(Configuration config){ + this.fromAddress = config.getProperty(ConfigurationKeys.EMAIL_ADMIN); + this.smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER); + this.altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER); + } + + public void sendMail(Mail mail){ + try{ + sendEmail(mail,this.smtpHost); + }catch(Exception e){ + try{ + sendEmail(mail,this.altSmtpHost); + }catch (Exception ex){ + System.out.println("通过备用 SMTP服务器发送邮件失败: " + ex.getMessage()); + } + + } + } + + private void sendEmail(Mail mail, String smtpHost){ + + String toAddress = mail.getAddress(); + String subject = mail.getSubject(); + String msg = mail.getBody(); + //发送邮件 + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Product.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Product.java new file mode 100644 index 0000000000..1f19b2fe65 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/Product.java @@ -0,0 +1,14 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + + + +public class Product { + + private String id; + private String desc; + public String getDescription(){ + return desc; + } + + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ProductService.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ProductService.java new file mode 100644 index 0000000000..0b3e061f51 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/ProductService.java @@ -0,0 +1,9 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + + +public class ProductService { + public Product getPromotionProduct(){ + //从文本文件中读取文件列表 + return null; + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/PromotionJob.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/PromotionJob.java new file mode 100644 index 0000000000..4dbe9fdd29 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/PromotionJob.java @@ -0,0 +1,24 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +import java.util.List; + +public class PromotionJob { + + private ProductService productService = null ; //获取production service + private UserService userService = null ;// 获取UserService + + public void run(){ + + Configuration cfg = new Configuration(); + + Product p = productService.getPromotionProduct(); + + List users = userService.getUsers(p); + + MailSender mailSender = new MailSender(cfg); + + for(User user : users){ + mailSender.sendMail(new Mail(user)); + } + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/User.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/User.java new file mode 100644 index 0000000000..b5193a4755 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/User.java @@ -0,0 +1,24 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +import java.util.List; + + + +public class User { + + private String name; + private String emailAddress; + + private List subscribedProducts; + + public String getName(){ + return name; + } + public String getEMailAddress() { + return emailAddress; + } + public List getSubscribedProducts(){ + return this.subscribedProducts; + } + +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/UserService.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/UserService.java new file mode 100644 index 0000000000..aaa6a58a0d --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good1/UserService.java @@ -0,0 +1,11 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good1; + +import java.util.List; + +public class UserService { + + public List getUsers(Product product){ + //调用DAO相关的类从数据库中读取订阅产品的用户列表 + return null; + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/ProductService.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/ProductService.java new file mode 100644 index 0000000000..c5439cac5e --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/ProductService.java @@ -0,0 +1,12 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good2; + +import java.util.List; + +import com.github.wluqing.coding2017.basic.ood.srp.good1.Product; + +public class ProductService { + public List getPromotionProducts(){ + //从文本文件中读取文件列表 + return null; + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/UserService.java b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/UserService.java new file mode 100644 index 0000000000..7813fb663c --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/good2/UserService.java @@ -0,0 +1,13 @@ +package com.github.wluqing.coding2017.basic.ood.srp.good2; + +import java.util.List; + +import com.github.wluqing.coding2017.basic.ood.srp.good1.Product; +import com.github.wluqing.coding2017.basic.ood.srp.good1.User; + +public class UserService { + public List getUsers(List products){ + //调用DAO相关的类从数据库中读取订阅产品的用户列表 + return null; + } +} diff --git a/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/product_promotion.txt b/students/962040254/src/com/github/wluqing/coding2017/basic/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/962040254/src/com/github/wluqing/coding2017/basic/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