对天乙社区bbscs8实现的详细分析七
2008-07-14 11:04
288 查看
此文为转载:http://www.diybl.com/course/1_web/webjs/2007113/82989.html 我们仍然将分析处于service包中,首分析下上次没有分析的ForumArchiveService:(它只有一个方法) public interface ForumArchivesService { public void createForumArchives() throws BbscsException; } 看applicationContext.xml中: /** History 而以前讲过的forumMain: Main 对于这个forumHistoryDAO,其实它只不过是一个ForumHibernateDAO的引用而已,只不过加了个History构造参数! public ForumHibernateDAO(String flag) { super(); this.flag = flag; //flag不是main了,而是History了!!!那后面的 private String getObjName() { return "Forum" + this.flag;//ForumHistory! } private Class getForumClass() { return Constant.FORUM_CLASS_MAP.get(this.flag); //ForumHistory.class! } */ /**com.laoer.bbscs.dao.jdbc.ForumArchivesJDBCDAO,其实这个JDBC操作由 this.getJdbcTemplate().update(sql, o);完成的!!!注意需导入org.springframework.jdbc.core.support.JdbcDaoSupport; public void saveForumArchives(long bid, Forum f) { String sql = "insert into bbscs_forumarchives_" + (bid % 10) + " (ParentID, MainID, BoardID, BoardName, ReNum, Face, UserID, UserName, NickName, Title, Detail, Sign, ArtSize, Click, PostTime, LastTime, IPAddress, IsNew, Elite, EliteID, Agree, BeAgainst, CanNotDel, CanNotRe, Commend, DelSign, DelUserID, DelUserName, DelTime, DelIP, Amend, DoEliteName, DoEliteTime, HaveAttachFile, AttachFileName, LastPostUserName, LastPostTitle, LastPostNickName, IsTop, IsLock, Auditing, AuditingAttachFile, IsVote, IsHidden, IsHiddenValue, EditType, QuoteText, QuoteEditType, PostType, TitleColor, UserBlog, IndexStatus, EmailInform, MsgInform, VoteID, TagID, TagName, IsGuest, PreviewAttach, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; //由bid决定写入10个表中的其中一个!!! Object[] o = new Object[] { f.getParentID(), f.getMainID(), f.getBoardID(), f.getBoardName(), f.getReNum(), f.getFace(), f.getUserID(), f.getUserName(), f.getNickName(), f.getTitle(), f.getDetail(), f.getSign(), f.getArtSize(),....}; this.getJdbcTemplate().update(sql, o); } private String attachFileName2String(List attachFileName) { //将List--->String String text = ""; if (attachFileName != null) { for (int i = 0; i < attachFileName.size(); i++) { String fileName = (String) attachFileName.get(i); text = text + fileName + ","; } if (text.endsWith(",")) { text = text.substring(0, (text.length() - 1)); } } return text; } */ 在其实现类ForumArchiveServiceImp中注入了forumHistoryDAO,boardService,tempConfiguration,forumConfig,SysConfig等其它服务和DAO...其中,tempConfiguration是一个freemarker.template下面的Configuration对象. public void createForumArchives() throws BbscsException { for (int y = 12; y >= 3; y--) { Calendar cld = Calendar.getInstance(); cld.set(Calendar.HOUR_OF_DAY, 0); cld.set(Calendar.MINUTE, 0); cld.set(Calendar.SECOND, 0); cld.set(Calendar.MILLISECOND, 0); cld.add(Calendar.MONTH, -y);//三个月之前的任意月,注意这个add方法会改变年份,若y为12,则是一年前的时间,若为3,则是(相对现在)三个月前的时间 logger.info("计算时间点:" + Util.formatDateTime(cld.getTime())); /** public static String formatDateTime(Date date) { SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return outFormat.format(date); } */ long atime = cld.getTimeInMillis();//long型时间atime cld.add(Calendar.MONTH, -1);//一个月之前 String month = Util.formatDate(cld.getTime(), "yyyy-MM"); logger.info("存档月份:" + month);//若现在是2007-7,则这里是2007-6 List blist = this.getBoardService().findBoardsByParentID(0, 1, -1, Constant.FIND_BOARDS_BY_ORDER);//以前讲过,从最顶层找起!useStat=1,hidden=-1,0 //Criteria c.addOrder(Order.asc("orders")); for (int i = 0; i < blist.size(); i++) { Board b = (Board) blist.get(i); if (b.getBoardType() == 3) { this.createForumArchivesFile(b, atime, month); } List bclist = this.getBoardService().findBoardsByParentID(b.getId(), 1, -1, Constant.FIND_BOARDS_BY_ORDER);//各大版块的子版! for (int j = 0; j < bclist.size(); j++) { Board bc = (Board) bclist.get(j); if (bc.getBoardType() == 3) { this.createForumArchivesFile(bc, atime, month); }//我认为这个方法少了对子版的子版的深度保存!!! } } } } @SuppressWarnings("unchecked") private void createForumArchivesFile(Board b, long atime, String month) throws BbscsException { if (!BBSCSUtil.ArchivesMonthInFile(b.getId(), month)) { //所在月没存过! /** public static List getArchivesMonths(long bid) { List l = new ArrayList(); File archivesMonthsFile = new File(Constant.ROOTPATH + "archives/archivesmonths-" + bid + ".txt"); String month = ""; try { month = FileUtils.readFileToString(archivesMonthsFile, Constant.CHARSET); } catch (IOException e) { return l; } String[] months = month.split(","); if (months.length > 0) { for (int i = (months.length - 1); i >= 0; i--) { if (StringUtils.isNotBlank(months[i])) { l.add(months[i]); } } } return l; //archivesMonthsFile-bid.txt中存的是这个bid的存档时间! } public static boolean ArchivesMonthInFile(long bid, String month) { List l = getArchivesMonths(bid); for (String m : l) { //JDK5.0 if (m.equalsIgnoreCase(month)) { return true; } } return false; } */ try { this.getTempConfiguration().setDirectoryForTemplateLoading( new File(Constant.ROOTPATH + Constant.FTL_PATH));//public static String FTL_PATH = "WEB-INF/templates/"; this.getTempConfiguration().setDefaultEncoding(Constant.CHARSET); this.getTempConfiguration().setNumberFormat("0.##########"); Locale locale = new Locale("zh", "CN");//前者指语言后者是国家 this.getTempConfiguration().setLocale(locale); Template temp = this.getTempConfiguration().getTemplate("archivesPostMain.ftl");//产生一个Template!!! 我们用记事本等工具打开它 /**
主题 | 回复 | 作者 | 发帖时间 |
---|---|---|---|
${fm["title"]} | [+${fm["renum"]}] | ${fm["username"]} | ${fm["postTime"]} |
分页:${pagebreak} |
相关文章推荐
- 对天乙社区bbscs8实现的详细分析一
- 对天乙社区bbscs8实现的详细分析十
- 对天乙社区bbscs8实现的详细分析十六
- 对天乙社区bbscs8实现的详细分析二十三
- 对天乙社区bbscs8实现的详细分析三
- 对天乙社区bbscs8实现的详细分析二
- 对天乙社区bbscs8实现的详细分析十一
- 对天乙社区bbscs8实现的详细分析十七
- 对天乙社区bbscs8实现的详细分析二十四
- 对天乙社区bbscs8实现的详细分析四
- 对天乙社区bbscs8实现的详细分析三
- 对天乙社区bbscs8实现的详细分析十二
- 对天乙社区bbscs8实现的详细分析十八
- 对天乙社区bbscs8实现的详细分析二十六
- 对天乙社区bbscs8实现的详细分析三
- 对天乙社区bbscs8实现的详细分析四
- 对天乙社区bbscs8实现的详细分析十三
- 对天乙社区bbscs8实现的详细分析十九
- 对天乙社区bbscs8实现的详细分析一
- 对天乙社区bbscs8实现的详细分析五