OA系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BaseSupportImpl.java:
对Dao层和Service层的接口实现方法的抽取,采用泛型实现
添加对事务的处理
BaseAction.java:
提供Action对ModelDriven的支持,通过反射获取表单model的真实类型,通过反射创建实例
protected T model;
public BaseAction() {
getSession().persist(topic); // 保存
super.add(topic);
// 2,维护相关的特殊属性
Forum forum = topic.getForum();
forum.setTopicCount(forum.getTopicCount() + 1); // 主题数量
ForumServiceImpl继承BaseSupportImpl并实现ForumService接口.
*重写BaseSupportImpl中的add(T t)方法。
找出所有版块中position的最大值并赋给新建的版块。
@Override
publicvoidadd(Forum forum) {
List<Integer> list = getSession().createQuery(
RoleAction需要提供privilegeUI()方法,目的是向添加和编辑页面提供权限数据。
RoleAction需要提供setPrivilege()方法,设置岗位权限。
用户模块
功能分析
用户模块主要提供用户注册,用户登录与退出,用户管理功能。
Domain:User
Service:UserService
//找到上方的Forum
Forumother = (Forum) getSession().createQuery("FROM Forum f WHERE f.position<? ORDER BY f.position DESC")
.setParameter(0, forum.getPosition())
forum.setArticleCount(forum.getArticleCount() + 1);// 文章数量(主题数+回复数)
forum.setLastTopic(topic); // 最后发表的主题
getSession().merge(forum);
}
主题和回复的分页
在TopicAction中添加topicShow()方法
"SELECT position FROM Forum").list();
if(list.size() == 0) {
forum.setPosition(0);
}else{
intmax = Collections.max(list) + 1;
forum.setPosition(max);
}
forum.setTopicCount(0);
topic.setLastUpdateTime(reply.getPostTime()); //主题最后回复时间
topic.setReplyCount(topic.getReplyCount()+1); //回复数量
getSession().merge(topic);
// 3,维护forum的特殊属性
初始化密码:将用户的密码修改为123456。
论坛模块
版块管理
Domain:Forum(版块)
Forum中position字段用于保存顺序,显示时按此字段的值由小到大排列
Service:ForumService
ForumService继承BaseSupport接口
ServiceImpl:ForumServiceImpl
publicString topicShow() {
Topictopic= topicService.findbyid(topicId);
ActionContext.getContext().put("topic", topic);
// 准备分页信息, 最终版
newQueryHelper(Reply.class, "r")//
@Override
publicvoidadd(Reply reply) {
// 1,设置属性并保存
getSession().persist(reply);
super.add(reply);
// 2,维护topic的特殊属性
Topic topic = reply.getTopic();
topic.setLastReply(reply); // 主题最后回复
RoleService接口继承BaseSupport接口
ServiceImpl : RoleServiceImpl
RoleServiceImpl继承BaseSupportImpl并实现RoleService接口
Action :RoleAction
RoleAction继承BaseAction,BaseAction中需声明RoleSerive的实例。
查找顶级列表findTopList()
Action :DepartmentAction
DepartmentAction继承BaseAction,BaseAction中声明DepartmentService的实例。
岗位管理
基本增删改查
为岗位增加权限
Domain :Role
Service :RoleService
a.移动到其他板块
b.修改主题
c.删除主题
2,管理回复
a.修改回复
b.删除回复
权限模块
系统模块
部门管理
基本增删改查。
对上级部门的处理。
Domain :Department
Service :DepartmentService
DepartmentService接口继承BaseSupport接口
ServiceImpl :DepartmentServiceImpl
DepartmentServiceImpl继承BaseSupportImpl并实现DeparmentService接口,自身实现两个方法:查找子列表findChildren(String parentId)、
引言
编写目的
环境搭建
系统采用spring2.5.6 + struts2.1.8 + hibernate 2.1.2整合开发。
数据库采用Mysql 5.7.3
开发软件myeclipse 10.7
功能分析与数据库设计
数据库设计图:
Uml类间图:
Action流程图:
base类:
BaseSupport.java :
try {
//通过反射获取model的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass()
.getGenericSuperclass();
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
修改密码
用户登陆后可以修改自身登陆密码。
用户退出
删除session中的用户信息,并新建一个空白cookie替换原来的”logininfo”cookie。
用户管理
用户管理功能只对管理员提供。
功能:删除用户,编辑用户,初始化密码。
删除用户:将用户信息从数据库中删除,并删除其发布的主题,回复等关联信息。
编辑用户:与添加用户类似。
Action:UserAction
用户注册
用户注册功能只对管理员提供。
用户注册需要后台提供岗位列表roleList和部门列表departmentList,以供用户选择。
在Service层中需要校验用户名是否已经注册。
用户登录
登陆成功将用户名与密码加密存入session中。
用户可以选择下次是否自动登陆。是:将用户名与密码加密后保存在cookie(logininfo)中,设置cookie存活时间。
returngetSession().createQuery(//
"FROM Forum f ORDER BY f.position")//
.list();
}
*自身增加moveUp和moveDown方法
找到当前要移动的版块的相邻版块,若当前为最上部或者最底部,则不能移动。
否则交换两个版块的p源自文库sition的值,更新数据。(也可以不写,因为当前对象是持久化状态。)
ServiceImpl:UserServiceImpl
UserServiceImpl继承BaseSupportImpl并实现UserService接口,需要提供findByUserNameAndPassword(String username, String password)方法,作用为通过账号密码查询用户。
//通过反射创建model的实例
model = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public T getModel() {
return model;
}
提供Service实例的声明
@Resource(name = "roleService")
protected RoleService roleService;
...
提供分页所需的公共参数
工具类:
MD5Util.java:MD5加密
QueryHelper.java:分页
UUIDUtil.java:产生随机32UUID
Installer.java:安装初始化权限
DepartmentUtils.java:生成部门树状结构
forum.setArticleCount(0);
forum.setLastTopic(null);
super.add(forum);
}
*重写BaseSupportImpl中的findall()方法。
根据Fourm的position的值从小到大查询。
@Override
publicList<Forum> findall() {
@Override
publicvoidadd(Topic topic) {
// 1,设置属性并保存
topic.setType(Topic.TYPE_NORMAL); // 默认为普通帖
topic.setReplyCount(0);
topic.setLastReply(null);
topic.setLastUpdateTime(topic.getPostTime());
功能分析:
说明:
1,“显示指定版块”功能中的主题列表需要分页
2,“显示指定主题”功能中的回复列表需要分页
3,“发帖”与“回帖”时,使用在线编辑器FCKeditor编辑文章内容
*关键功能
发表主题或者回复主题时,需要维护数据。
在ReplyServiceImpl中重写BaseSupport中的add()方法。
Forum forum = topic.getForum();
forum.setArticleCount(forum.getArticleCount() + 1);// 文章数量(主题数+回复数)
getSession().merge(forum);
}
在TopicServiceImpl中重写BaseSupport中的add()方法。
对Dao层和Service层的接口的抽取,采用泛型实现
void add(T t);
void delete(String id);
void update(T t);
List<T> findall();
T findbyid(String id);
List<T> findbyids(String... ids);
.addCondition("r.topic=?", topic)//
.addOrderProperty("r.postTime",true)//
.preparePageBean(replyService, pageNum, pageSize);
return"topicShow";
}
文章管理
功能:
1,管理主题
.setFirstResult(0)
.setMaxResults(1)
.uniqueResult();
Action:ForumManage
ForumManage继承BaseAction,BaseAction需声明ForumService的实例
论坛使用
版块列表
主题列表
主题查看
设计实体:
说明
1,把Topic与Reply中共有的属性放到父类Article中,Topic与Reply继承Article,Hibernate映射时采用Topic与Reply,Article不对应表,主键生成策略为increment。
对Dao层和Service层的接口实现方法的抽取,采用泛型实现
添加对事务的处理
BaseAction.java:
提供Action对ModelDriven的支持,通过反射获取表单model的真实类型,通过反射创建实例
protected T model;
public BaseAction() {
getSession().persist(topic); // 保存
super.add(topic);
// 2,维护相关的特殊属性
Forum forum = topic.getForum();
forum.setTopicCount(forum.getTopicCount() + 1); // 主题数量
ForumServiceImpl继承BaseSupportImpl并实现ForumService接口.
*重写BaseSupportImpl中的add(T t)方法。
找出所有版块中position的最大值并赋给新建的版块。
@Override
publicvoidadd(Forum forum) {
List<Integer> list = getSession().createQuery(
RoleAction需要提供privilegeUI()方法,目的是向添加和编辑页面提供权限数据。
RoleAction需要提供setPrivilege()方法,设置岗位权限。
用户模块
功能分析
用户模块主要提供用户注册,用户登录与退出,用户管理功能。
Domain:User
Service:UserService
//找到上方的Forum
Forumother = (Forum) getSession().createQuery("FROM Forum f WHERE f.position<? ORDER BY f.position DESC")
.setParameter(0, forum.getPosition())
forum.setArticleCount(forum.getArticleCount() + 1);// 文章数量(主题数+回复数)
forum.setLastTopic(topic); // 最后发表的主题
getSession().merge(forum);
}
主题和回复的分页
在TopicAction中添加topicShow()方法
"SELECT position FROM Forum").list();
if(list.size() == 0) {
forum.setPosition(0);
}else{
intmax = Collections.max(list) + 1;
forum.setPosition(max);
}
forum.setTopicCount(0);
topic.setLastUpdateTime(reply.getPostTime()); //主题最后回复时间
topic.setReplyCount(topic.getReplyCount()+1); //回复数量
getSession().merge(topic);
// 3,维护forum的特殊属性
初始化密码:将用户的密码修改为123456。
论坛模块
版块管理
Domain:Forum(版块)
Forum中position字段用于保存顺序,显示时按此字段的值由小到大排列
Service:ForumService
ForumService继承BaseSupport接口
ServiceImpl:ForumServiceImpl
publicString topicShow() {
Topictopic= topicService.findbyid(topicId);
ActionContext.getContext().put("topic", topic);
// 准备分页信息, 最终版
newQueryHelper(Reply.class, "r")//
@Override
publicvoidadd(Reply reply) {
// 1,设置属性并保存
getSession().persist(reply);
super.add(reply);
// 2,维护topic的特殊属性
Topic topic = reply.getTopic();
topic.setLastReply(reply); // 主题最后回复
RoleService接口继承BaseSupport接口
ServiceImpl : RoleServiceImpl
RoleServiceImpl继承BaseSupportImpl并实现RoleService接口
Action :RoleAction
RoleAction继承BaseAction,BaseAction中需声明RoleSerive的实例。
查找顶级列表findTopList()
Action :DepartmentAction
DepartmentAction继承BaseAction,BaseAction中声明DepartmentService的实例。
岗位管理
基本增删改查
为岗位增加权限
Domain :Role
Service :RoleService
a.移动到其他板块
b.修改主题
c.删除主题
2,管理回复
a.修改回复
b.删除回复
权限模块
系统模块
部门管理
基本增删改查。
对上级部门的处理。
Domain :Department
Service :DepartmentService
DepartmentService接口继承BaseSupport接口
ServiceImpl :DepartmentServiceImpl
DepartmentServiceImpl继承BaseSupportImpl并实现DeparmentService接口,自身实现两个方法:查找子列表findChildren(String parentId)、
引言
编写目的
环境搭建
系统采用spring2.5.6 + struts2.1.8 + hibernate 2.1.2整合开发。
数据库采用Mysql 5.7.3
开发软件myeclipse 10.7
功能分析与数据库设计
数据库设计图:
Uml类间图:
Action流程图:
base类:
BaseSupport.java :
try {
//通过反射获取model的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass()
.getGenericSuperclass();
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
修改密码
用户登陆后可以修改自身登陆密码。
用户退出
删除session中的用户信息,并新建一个空白cookie替换原来的”logininfo”cookie。
用户管理
用户管理功能只对管理员提供。
功能:删除用户,编辑用户,初始化密码。
删除用户:将用户信息从数据库中删除,并删除其发布的主题,回复等关联信息。
编辑用户:与添加用户类似。
Action:UserAction
用户注册
用户注册功能只对管理员提供。
用户注册需要后台提供岗位列表roleList和部门列表departmentList,以供用户选择。
在Service层中需要校验用户名是否已经注册。
用户登录
登陆成功将用户名与密码加密存入session中。
用户可以选择下次是否自动登陆。是:将用户名与密码加密后保存在cookie(logininfo)中,设置cookie存活时间。
returngetSession().createQuery(//
"FROM Forum f ORDER BY f.position")//
.list();
}
*自身增加moveUp和moveDown方法
找到当前要移动的版块的相邻版块,若当前为最上部或者最底部,则不能移动。
否则交换两个版块的p源自文库sition的值,更新数据。(也可以不写,因为当前对象是持久化状态。)
ServiceImpl:UserServiceImpl
UserServiceImpl继承BaseSupportImpl并实现UserService接口,需要提供findByUserNameAndPassword(String username, String password)方法,作用为通过账号密码查询用户。
//通过反射创建model的实例
model = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public T getModel() {
return model;
}
提供Service实例的声明
@Resource(name = "roleService")
protected RoleService roleService;
...
提供分页所需的公共参数
工具类:
MD5Util.java:MD5加密
QueryHelper.java:分页
UUIDUtil.java:产生随机32UUID
Installer.java:安装初始化权限
DepartmentUtils.java:生成部门树状结构
forum.setArticleCount(0);
forum.setLastTopic(null);
super.add(forum);
}
*重写BaseSupportImpl中的findall()方法。
根据Fourm的position的值从小到大查询。
@Override
publicList<Forum> findall() {
@Override
publicvoidadd(Topic topic) {
// 1,设置属性并保存
topic.setType(Topic.TYPE_NORMAL); // 默认为普通帖
topic.setReplyCount(0);
topic.setLastReply(null);
topic.setLastUpdateTime(topic.getPostTime());
功能分析:
说明:
1,“显示指定版块”功能中的主题列表需要分页
2,“显示指定主题”功能中的回复列表需要分页
3,“发帖”与“回帖”时,使用在线编辑器FCKeditor编辑文章内容
*关键功能
发表主题或者回复主题时,需要维护数据。
在ReplyServiceImpl中重写BaseSupport中的add()方法。
Forum forum = topic.getForum();
forum.setArticleCount(forum.getArticleCount() + 1);// 文章数量(主题数+回复数)
getSession().merge(forum);
}
在TopicServiceImpl中重写BaseSupport中的add()方法。
对Dao层和Service层的接口的抽取,采用泛型实现
void add(T t);
void delete(String id);
void update(T t);
List<T> findall();
T findbyid(String id);
List<T> findbyids(String... ids);
.addCondition("r.topic=?", topic)//
.addOrderProperty("r.postTime",true)//
.preparePageBean(replyService, pageNum, pageSize);
return"topicShow";
}
文章管理
功能:
1,管理主题
.setFirstResult(0)
.setMaxResults(1)
.uniqueResult();
Action:ForumManage
ForumManage继承BaseAction,BaseAction需声明ForumService的实例
论坛使用
版块列表
主题列表
主题查看
设计实体:
说明
1,把Topic与Reply中共有的属性放到父类Article中,Topic与Reply继承Article,Hibernate映射时采用Topic与Reply,Article不对应表,主键生成策略为increment。