- 浏览: 134741 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
Dear疼你:
<div class="quote_title ...
微信公众号发送模板消息 -
di1984HIT:
学习了。。。
微信公众号发送模板消息 -
zxs6587:
没有开启开发模式可以使用此接口发送模板消息吗????急求!!
微信公众号发送模板消息 -
郑云飞:
你好,请问,按照你的代码,为什么Android手机可以收到发送 ...
微信公众号发送模板消息 -
fsh430623:
有办法吗,我觉得扫描过后要是直接知道是哪个的二维码,多好
微信扫描公众号二维码实现登陆
基于jfinal的投票系统
1.数据库设计
投票主题表:
投票主题条目:
投票条目选项表:
投票管理端代码
浏览并投票的代码
1.数据库设计
投票主题表:
-- Create table create table VOTE_THEME ( ID VARCHAR2(32), NAME VARCHAR2(200), STARTDATE VARCHAR2(10), ENDDATE VARCHAR2(20), SFNM VARCHAR2(1) default '0', YXBJ VARCHAR2(1) default '1', SCRQ DATE default sysdate, HEADPIC VARCHAR2(200), FOOTPIC VARCHAR2(200) ) ; -- Add comments to the table comment on table VOTE_THEME is '投票主题'; -- Add comments to the columns comment on column VOTE_THEME.NAME is '主题'; comment on column VOTE_THEME.STARTDATE is '开始时间'; comment on column VOTE_THEME.ENDDATE is '截止时间'; comment on column VOTE_THEME.SFNM is '是否匿名'; comment on column VOTE_THEME.YXBJ is '有效标记'; comment on column VOTE_THEME.SCRQ is '生成日期'; comment on column VOTE_THEME.HEADPIC is '主题图片'; comment on column VOTE_THEME.FOOTPIC is '底部图片';
投票主题条目:
create table VOTE_THEME_ITEM ( ID VARCHAR2(32), NAME VARCHAR2(200), TYPE VARCHAR2(1), THEME_ID VARCHAR2(32), SCRQ DATE default sysdate, CNUM NUMBER default 1 ) ; -- Add comments to the table comment on table VOTE_THEME_ITEM is '投票项目'; -- Add comments to the columns comment on column VOTE_THEME_ITEM.TYPE is '1:单选,2:多选;3:手工输入'; comment on column VOTE_THEME_ITEM.CNUM is '可以选择的个数';
投票条目选项表:
-- Create table create table VOTE_THEME_ITEM_ANSWER ( ID VARCHAR2(32), ITEM_ID VARCHAR2(32), NAME VARCHAR2(200), COMMS CLOB, IMAGE_PATH VARCHAR2(200), FLV_PATH VARCHAR2(200), DEPTNAME VARCHAR2(50), THEME_ID VARCHAR2(32), ONUM NUMBER, CNUM NUMBER, ZGH VARCHAR2(20) ) ; -- Add comments to the table comment on table VOTE_THEME_ITEM_ANSWER is '投票题目选项';
投票管理端代码
package cn.edu.jxut.vote.controller; import java.io.File; import java.util.List; import net.loyin.jFinal.render.excel.ExcelRender; import org.apache.commons.lang.StringUtils; import cn.edu.jxut.common.config.GlobalConstants; import cn.edu.jxut.common.config.PermInterceptor; import cn.edu.jxut.common.controller.BaseController; import cn.edu.jxut.common.model.LoginUser; import cn.edu.jxut.vote.model.Theme; import cn.edu.jxut.vote.model.ThemeItem; import cn.edu.jxut.vote.model.ThemeItemAnswer; import com.jfinal.aop.Before; import com.jfinal.core.ActionKey; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Record; import com.jfinal.upload.UploadFile; @Before(PermInterceptor.class) public class VoteManagerController extends BaseController{ @ActionKey("/vote") public void index() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); setAttr("root", this.getRequest().getContextPath()); Theme theme = this.getModel(Theme.class); Page<Theme> p = Theme.dao.paginateByExample(theme, "yxbj = '1' and to_date(enddate,'yyyy-MM-dd') >= sysdate ", pageNumber, pageSize, ""); setAttr("page",p); render("/WEB-INF/vote/index.html"); } @ActionKey("/vote/add") public void toAddVote() { setAttr("root", this.getRequest().getContextPath()); render("/WEB-INF/vote/add.html"); } @ActionKey("/vote/detail") public void detail() { setAttr("root", this.getRequest().getContextPath()); String id = getPara("id"); Theme theme = Theme.dao.findById(id); List<ThemeItem> items = theme.getItems(); setAttr("item",items.get(0)); setAttr("theme",theme); render("/WEB-INF/vote/detail.html"); } @ActionKey("/vote/export") public void exportVote(){ String id = getPara("id"); String sql = "select t.id,t.name,i.name as itemname,a.name as answer,(select count(distinct user_id) from vote_user_answer a1" + " where a1.theme_id = t.id and a1.answer_id = a.id) as answercount" + " from vote_theme t, vote_theme_item i, vote_theme_item_answer a where t.id = i.theme_id" + " and i.id = a.item_id and i.theme_id = t.id and t.id = ?"; String[] col = {"投票名称","选项名称","得票数"}; String[] col1 = {"name","answer","answercount"}; List<Record> list = Db.find(sql,new Object[]{id}); this.render(new ExcelRender("投票结果.xls",col,col1,list)); } @ActionKey("/vote/save") public void voteSave() { UploadFile headpic = getFile("headpic"); UploadFile footpic = getFile("footpic"); Theme theme = this.getModel(Theme.class); ThemeItem themeItem = this.getModel(ThemeItem.class); themeItem.set("name", theme.getStr("name")); boolean update = true; if(StringUtils.isEmpty(theme.getStr("id"))){ update = false; theme.genId(); } File f = new File(GlobalConstants.filepath+File.separator+theme.getStr("id")+File.separator); System.out.println("111+++++++++++++++++++++++="+f.getAbsolutePath()); if(!f.exists()){ f.mkdirs(); } System.out.println("222+++++++++++++++++++++++="+f.getAbsolutePath()); if(headpic!=null){ File uploadFile = headpic.getFile(); uploadFile.renameTo(new File(f.getAbsolutePath()+File.separator+headpic.getFileName())); System.out.println("+++++++++++++++++++++++++++"+new File(f.getAbsolutePath()+File.separator+headpic.getFileName()).getAbsolutePath()); theme.set("headpic", ("upload"+File.separator+theme.getStr("id")+File.separator+headpic.getFileName()).replace("\\", "/")); } if(footpic!=null){ File uploadFile2 = footpic.getFile(); uploadFile2.renameTo(new File(f.getAbsolutePath()+File.separator+footpic.getFileName())); theme.set("footpic", ("upload"+File.separator+theme.getStr("id")+File.separator+footpic.getFileName()).replace("\\", "/")); } if(update){ theme.update(); themeItem.set("theme_id", theme.getStr("id")); themeItem.update(); setAttr("successMessage","修改成功!"); }else{ theme.genId(); theme.save(); themeItem.set("theme_id", theme.getStr("id")); themeItem.genId(); themeItem.save(); setAttr("successMessage","保存成功!"); } render("/WEB-INF/vote/add.html"); } @ActionKey("/vote/update") public void toUpdateVode() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); setAttr("root", this.getRequest().getContextPath()); String id = getPara("id"); Theme theme = Theme.dao.findById(id); List<ThemeItem> items = theme.getItems(); setAttr("item",items.get(0)); setAttr("theme",theme); render("/WEB-INF/vote/edit.html"); } @ActionKey("/vote/delete") public void deleteVote() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); setAttr("root", this.getRequest().getContextPath()); } @ActionKey("/vote/item/add") public void toItemAdd() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); setAttr("root", this.getRequest().getContextPath()); } @ActionKey("/vote/item/update") public void toItemUpdate() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); setAttr("root", this.getRequest().getContextPath()); } @ActionKey("/vote/item/delete") public void deleteItem() { } @ActionKey("/vote/addAnswer") public void toAddAnswer() { setAttr("themeId",getPara("id")); Theme theme = Theme.dao.findById(getPara("id")); ThemeItem item = ThemeItem.dao.findFirst("select * from vote_theme_item where theme_id = ?",new Object[]{theme.get("id")}); setAttr("item_id",item.get("id")); render("/WEB-INF/vote/answer/add.html"); } @ActionKey("/vote/answer/update") public void toUpdateAnswer() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); ThemeItemAnswer answer = ThemeItemAnswer.dao.findById(getPara("id")); setAttr("answer",answer); render("/WEB-INF/vote/answer/edit.html"); } @ActionKey("/vote/answer/save") public void saveAnswer() { UploadFile image = this.getFile("image"); UploadFile flv = this.getFile("flv"); ThemeItemAnswer answer = this.getModel(ThemeItemAnswer.class); boolean update = true; if(StringUtils.isEmpty(answer.getStr("id"))){ update = false; answer.genId(); } File f = new File(GlobalConstants.filepath+File.separator+answer.getStr("id")+File.separator); if(!f.exists()){ f.mkdirs(); } if(image!=null){ File uploadFile = image.getFile(); uploadFile.renameTo(new File(f.getAbsolutePath()+File.separator+image.getFileName())); answer.set("image_path", ("upload"+File.separator+answer.getStr("id")+File.separator+image.getFileName()).replace("\\", "/")); } if(flv!=null){ File uploadFile2 = flv.getFile(); uploadFile2.renameTo(new File(f.getAbsolutePath()+File.separator+flv.getFileName())); answer.set("flv_path", ("upload"+File.separator+answer.getStr("id")+File.separator+flv.getFileName()).replace("\\", "/")); } setAttr("root", this.getRequest().getContextPath()); if(update){ answer.update(); }else{ answer.save(); } setAttr("successMessage","保存成功!"); setAttr("themeId",answer.getStr("theme_id")); setAttr("item_id",answer.getStr("item_id")); render("/WEB-INF/vote/answer/add.html"); } @ActionKey("/vote/answer/delete") public void toDeleteAnswer() { LoginUser u = (LoginUser)getSessionAttr("LoginUser"); String id = getPara("id"); ThemeItemAnswer answer = ThemeItemAnswer.dao.findById(id); ThemeItem item = answer.getItem(); Theme theme = item.getTheme(); ThemeItemAnswer.dao.deleteById(id); setAttr("successMessage","选项删除成功!"); this.redirect("/vote/detail?id="+theme.getStr("id")); } }
浏览并投票的代码
package cn.edu.jxut.vote.controller; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.StringUtils; import cn.edu.jxut.common.controller.BaseController; import cn.edu.jxut.common.model.LoginUser; import cn.edu.jxut.vote.model.Theme; import cn.edu.jxut.vote.model.ThemeItem; import cn.edu.jxut.vote.model.ThemeItemAnswer; import cn.edu.jxut.vote.model.VoteUserAnswer; import com.jfinal.aop.ClearInterceptor; import com.jfinal.aop.ClearLayer; import com.jfinal.core.ActionKey; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Page; public class VoteViewController extends BaseController{ @ActionKey("/vote/view") @ClearInterceptor(ClearLayer.ALL) public void index() { setAttr("root", this.getRequest().getContextPath()); String id = getPara("id"); Theme theme = Theme.dao.findById(id); ThemeItem item = theme.getItems().get(0); ThemeItemAnswer answer = new ThemeItemAnswer(); answer.set("theme_id", id); answer.set("item_id", item.get("id")); String name = getPara("name"); if(StringUtils.isNotEmpty(name)){ if("请输入教师姓名".equals(name)){ name=""; } }else{ name = ""; } Page<ThemeItemAnswer> p = ThemeItemAnswer.dao.paginateByExample(answer, "name like '%"+name+"%'", this.getPageNumber(), this.getPageSize(), "cnum desc,onum"); setAttr("page",p); setAttr("theme",theme); setAttr("item",item); String sql = "select count(*) from vote_user_answer where user_id = ? and item_id = ?"; LoginUser u = (LoginUser)getSessionAttr("LoginUser"); if(u!=null){ int con = Db.queryInt(sql,new Object[]{u.get("user_id"),item.get("id")}); setAttr("cnum",con); } if("1".equals(getPara("success"))){ setAttr("successMessage","投票成功!"); }else if("0".equals(getPara("success"))){ setAttr("errorMessage","您已经投过一次了!"); }else if("-1".equals(getPara("success"))){ setAttr("errorMessage","您没有剩余的投票机会了!"); }else if("-2".equals(getPara("success"))){ setAttr("errorMessage","当前投票已经截止!"); }else if("-3".equals(getPara("success"))){ setAttr("errorMessage","当前投票还没有开始!"); } render("/WEB-INF/voteview/view.html"); } @ActionKey("/vote/viewAll") @ClearInterceptor(ClearLayer.ALL) public void viewAll() { setAttr("root", this.getRequest().getContextPath()); Theme theme = this.getModel(Theme.class); Page<Theme> p = Theme.dao.paginateByExample(theme, "yxbj = '1' and enddate >= to_char(sysdate,'yyyy-MM-dd') ", pageNumber, pageSize, ""); setAttr("page",p); render("/WEB-INF/voteview/viewAll.html"); } @ActionKey("/vote/view/detail") @ClearInterceptor(ClearLayer.ALL) public void detail() { setAttr("root", this.getRequest().getContextPath()); String id = getPara("id"); ThemeItemAnswer answer = ThemeItemAnswer.dao.findById(id); ThemeItem item = answer.getItem(); Theme theme = item.getTheme(); setAttr("answer",answer); setAttr("theme",theme); String sql = "select count(*) from vote_user_answer where user_id = ? and item_id = ?"; LoginUser u = (LoginUser)getSessionAttr("LoginUser"); if(u!=null){ int con = Db.queryInt(sql,new Object[]{u.get("user_id"),item.get("id")}); setAttr("cnum",con); } render("/WEB-INF/voteview/show.html"); } @ActionKey("/vote/vote") @ClearInterceptor(ClearLayer.ALL) public void vote(){ LoginUser u = (LoginUser)getSessionAttr("LoginUser"); String id = getPara("id"); ThemeItemAnswer answer = ThemeItemAnswer.dao.findById(id); ThemeItem item = answer.getItem(); Theme theme = item.getTheme(); if("1".equals(theme.getStr("sfnm"))){ u=new LoginUser(); u.set("user_id", this.getRequest().getRemoteAddr()); }else{ if(u==null){ this.redirect("/main?redirect=/vote/view?id="+theme.getStr("id")); return; } } String startDate = theme.getStr("startDate"); String endDate = theme.getStr("endDate"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { Date start = df.parse(startDate); Date end = df.parse(endDate); if(df.parse(df.format(new Date())).compareTo(end)>0){ this.redirect("/vote/view?success=-2&id="+theme.getStr("id")); return; } if(new Date().compareTo(start)<0){ this.redirect("/vote/view?success=-3&id="+theme.getStr("id")); return; } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } int cnum = item.getBigDecimal("cnum").intValue(); String sql = "select count(*) from vote_user_answer where user_id = ? and item_id = ?"; int con = Db.queryInt(sql,new Object[]{u.get("user_id"),item.get("id")}); if(con>=cnum){ this.redirect("/vote/view?success=-1&id="+theme.getStr("id")); return; } String sql2 = "select count(*) from vote_user_answer where user_id = ? and answer_id = ?"; int con2 = Db.queryInt(sql2,new Object[]{u.get("user_id"),answer.get("id")}); if(con2>0){ this.redirect("/vote/view?success=0&id="+theme.getStr("id")); return; } VoteUserAnswer userAnswer = new VoteUserAnswer(); userAnswer.genId(); userAnswer.set("answer_id", id); userAnswer.set("user_id", u.get("user_id")); userAnswer.set("item_id", item.get("id")); userAnswer.set("theme_id", theme.get("id")); userAnswer.save(); this.redirect("/vote/view?success=1&id="+theme.getStr("id")); } }
相关推荐
基于jfinal框架下的登录后。。登录信息集合的实现
Java jfinal实现 包含了图书分类管理、出版社管理、图书管理、图书借阅归还、图书逾期列表、还可以发送邮件提醒;运行DemoConfig.java
jfinal导出excel的demo
本系统基于JFinal web极速开发框架,采用MySql数据库,主要的功能:批量导入用户,设备,导出设备信息,管理员审核任务提醒等功能 。对于学习JFinal框架和Web开发的朋友帮助会很大
本程序是基于JFinal 1.5做的一个小站,代码没有使用什么特别的东西,用到了@JFinal作者提到的FakeStaticHandler来伪静态,其他的没什么。小站刚开 始使用Lucene来作为全文检索,后面又改成了SQL like匹配,估计要被...
jfinal实现中间件 数据同步以及单点 支持注解形式,以及自动生成model+record
SSM+Maven+Jfinal+仓库管理系统SSM+Maven+Jfinal+仓库管理系统
Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java...
管理系统系列--JFinal实现的用户权限管理系统
JFinal_Blog是基于JFinal1.5开源系统搭建的博客系统,以91zcm.com 网站作为模板和演示事例,目前已经加入了开源行列。 JFinal_Blog 1.1版本发布新增功能点: 1、将数据库连接池由C3P0升级为Druid实现; 2、废弃WEB-...
JFinal_Blog是基于JFinal1.5开源系统搭建的博客系统,以91zcm.com 网站作为模板和演示demo,目前已经加入了OSC开源项目和Github。 一、V2.0 版本新增功能点及bug修复情况: 1、添加百度Ping服务; 2、添加百度...
JFinal_Blog是基于JFinal1.5开源系统搭建的博客系统,以91zcm.com 网站作为模板和演示demo,目前已经加入了OSC开源项目和Github。 一、V2.0 版本新增功能点及bug修复情况: 1、添加百度Ping服务; 2、添加百度...
压箱底的报名系统,毕业设计作品,基于jfinal的学习模板,也适合初学者
个人博客系统