免费获取
|
论文天下网
|
原创毕业论文
|
论文范文
|
论文下载
|
计算机论文
|
论文降重
|
毕业论文
|
外文翻译
|
免费论文
|
开题报告
|
心得体会
|
全站搜索
当前位置:
论文天下网
->
免费论文
->
计算机论文
项目管理系统设计与开发(十)
}
})
//批量删除
$('#memberRemove').click(function () {
//…省略部份java script代码…
});
//使用bootstartValidator的数据验证组件,当对“lg-”css类定义的按钮进行操作时,会触发数据验证
$("#project").bootstrapValidator({}).on('success.form.bv', function (e) { // 表单校验成功
/*禁用默认提交的事件 因为要使用ajax提交而不是默认的提交方式*/
e.preventDefault();
//选择组件显示不了bootstrapValidator 自己判空
if(verification()){
//…省略部份java script代码…
})
}
});
//表格序号
//点击添加成员,弹出“添加成员”的窗口
$('.projectmember').click(function (e) {
e.preventDefault();
//…省略部份java script代码…
layer.open({
type:2,
title:'添加成员',
area:["95%","95%"],
content:contextPath+"/projectmember/project/member",
success:function () {
},btn:["确认","取消"],
yes:function (index,layerobj) {
var flag = true;
var body = layer.getChildFrame('body', index);
var storage=window.localStorage;
if(body.find('#project-userName')[0].value!=""&&body.find('#project-userName')[0].value!=null){
var iValue = $('#iValue').val();
for(var i=0; i<array.length;i++){
if(array[i]==storage["code"]){
flag = false;
}
}
//…省略部份java script代码…
//每次选择用户后清空
storage.clear();
}else{
layer.msg('未选择用户');
}
layer.close(index);
},btn2:function (index,layerobj) {
layer.close(index);
},cancel:function (index,layerobj) {
layer.close(index);
}
})
})
//删除成员
$('#memberTable').on('click','.deleteMember',function () {
//…省略部份java script代码…
})
})
通过点击“新增项目成员”按钮,新增项目员,见“$('.projectmember').click(function (e) {…}“,弹出选择用户窗口/projectmember/project/member,通过树形机构树,选择用户。
通过点击“提交“按钮,触发对表单“project”的提交,从而触发表单的验证,如:$("#project").bootstrapValidator({}).on('success.form.bv', function (e) { …},当表单验证通过时,通过ajax以post方式提交后台ProjectController的add方法。Ajax代码如下:
$.ajax({
type:"post",
url:"/project/project/add.json",
data:decodeURI(form.serialize()+stringCode+stringWeights),
dataType:"json",
success:function () {
$('#mainIfram',parent.document).attr('src',"/project/list" );
$('#page-title',parent.document).text('项目查看');
$('.bread-nav span',parent.document).children('.second-text').html('/项目查看');
window.parent.WELKIN.showNotify('success','新增成功!');
}
})
注意fap4框架对url进行一定的封装,以.json结尾的url,框架自动会以json结构的数据与响应报文,这里的/project/project/add.json的url会响应到PorjectController.java中的projectAdd方法。
3)PojectController.java
本类主要控制页面与后面业务逻辑层的代码调度。是mvc中的c的定义。
package com.sunyard.pms.controller;
//…此处省略java代码…
@Controller
@RequestMapping("/project")
public class ProjectController extends AbstractBaseController {
@Autowired
private ProjectManager projectManager;
//使用spring注入projectManager的业务逻辑层。
//…此处省略java代码…
//listJson用于前端获采用ajax的方法获取分页查询的列表页数据,只接收post请求
/**
* 列表数据
* @return
*/
@PostMapping("/list")
public String listJson (ProjectQo qo, Model model) {
model.addAttribute(RESULT, projectManager.queryPageList(qo));
//调用业务逻辑的分页查询
return "";
}
/**
* 新增页面
* @return
*/
//新增页面的控制
@GetMapping("/add")
public String addView(Model model){
return "/project/project_add";
}
/**
* 新增操作
* @return
*/
@PostMapping("/add")
//接收post请求,对项目进行插入数据的业务逻辑
public String add ( ProjectVo vo ,Model model) {
projectManager.create(vo);
addSuccessMsg(model,"新增成功");
return FRAME_SUCCESS;
}
/**
* 详情
* @return
*/
@RequestMapping("/get")
//查看单个项目详细,接收get请求
public String get ( String projectId, Model model) {
model.addAttribute(RESULT, projectManager.findById(projectId));
return "/project/project_get";
}
/**
* 修改页面
* @return
*/
@GetMapping("/update")
//编辑项目,接收get请求
public String updateView( String projectId,Model model ){
model.addAttribute(RESULT,projectManager.findById(projectId));
//获取单个项目的详细信息,放到model属性,让前端freemaker模板读取信息用于展示项目。
return "/project/project_update";
}
/**
* 修改操作
* @return
*/
@PostMapping("/update")
//提交更新项目,接收post请求
public String update ( ProjectVo vo ,Model model) {
projectManager.update(vo);
addSuccessMsg(model,"修改成功");
return FRAME_SUCCESS;
}
/**
* 删除操作
* @return
*/
@RequestMapping("/delete")
//根据项目id删除项目
public String delete ( Model model ,String... projectId) {
projectManager.deleteByIds(projectId);
addSuccessMsg(model,"删除成功");
return "";
}
/**
* 项目列表
* @param model
* @param projectQo
* @return
*/
@RequestMapping("/project/list")
//项目列表的查询
public String projectList(Model model, ProjectQo projectQo, HttpSession session) {
projectQo.setGmtAccept("1");
model.addAttribute(RESULT,projectManager.query(projectQo,session));
return "";
}
/***
* 项目查询
* @param model
* @param projectId
* @return
*/
@GetMapping( "/project")
//项目列表的查询
public String project(Model model,String projectId , HttpSession session){
model.addAttribute(RESULT,projectManager.projectQuery(projectId , session));
return "/project/project";
}
/**
* 项目添加
* @param
* @param projectVo
* @return
*/
@RequestMapping("/project/add")
//新建项目保存数据库
public String projectAdd(ProjectVo projectVo){
projectManager.projectAdd(projectVo);
//调用业务逻辑保存项目
return "";
}
//…此处省略java代码…
}
对于新增项目的处理,见下面代码
/**
* 项目添加
* @param
* @param projectVo
* @return
*/
@RequestMapping("/project/add")
public String projectAdd(ProjectVo projectVo){
projectManager.projectAdd(projectVo);
return "";
}
其中@RequestMapping是Spring mvc的注释,表示请求映射,将url的/project/add或者/project/add.json映射到方法String projectAdd(ProjectVo projectVo),由于ProjectController类上有@RequestMapping("/project")表示该请求所有请求都要在/project之后,因此完成的新增项目url是/project/project/add或者/project/project/add.json.因此前端ajax的请求,由该方法了处理。方法的处理参数是ProjectVo,它是由Spring mvc的拦截器把http请求的post参数组成ProjectVo对象。projectAdd方法再将ProjectVo参数委托(调用)projectManager.projectAdd方法。projectManager的对象是ProjectController的成员变量,是由spring注入的,代码如下:
@Autowired
private ProjectManager projectManager;
@Autowired为Spring mvc的自动注入的注释,它在说明成员变量projectManager将找到spring bean的上下文中找ProjectManager接口的实现类的实例,如果找到唯一的一个自自动赋值于该成员变量,否则在web项目启动就报错。
4)ProjectManager.java(定义项目管理业务逻辑层接口)
package com.sunyard.pms.biz;
//…此处省略java代码…
/**
* 项目管理 manager 接口
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
public interface ProjectManager extends BaseManager<ProjectVo, Project, String, ProjectQo> {
/**
* 查询项目
* @param projectQo
* @return
*/
PageList<ProjectVo> query(ProjectQo projectQo, HttpSession session);
/**
* 查看项目
* @param projectId
* @return
*/
ProjectVo projectQuery(String projectId ,HttpSession session);
/**
* 添加项目
* @param
* @param projectVos
*/
void projectAdd(ProjectVo projectVos );
//…此处省略java代码…
}
定义了projectAdd(ProjectVo)的方法。并由ProjectManagerImpl来实现,通用的新增、删除、查询,更新等业务处理由BaseManager接口统一采用泛化注入来定义。
5)ProjectManagerImpl.java(项目管理业务逻辑实现类)
package com.sunyard.pms.biz.impl;
//…此处省略java代码…
/**
* 项目管理 manager
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
@Component
@Transactional
//事务由Biz层进行控制,这里对本对象中的所有方法都默认定义的事务
public class ProjectManagerImpl extends BaseManagerImpl<ProjectVo, Project, String, ProjectQo> implements ProjectManager {
@Autowired
private ProjectService projectService;
//注入服务层代码projectService
//…此处省略java代码…
@Override
public PageList<ProjectVo> query(ProjectQo projectQo, HttpSession session) {
//…此处省略java代码…
projectPageList=projectService.queryPageList(projectQo);
//委托service层进行分页查询
ProjectTransferFactory projectTransferFactory=new ProjectTransferFactory();
ProjectVo projectVo;
//查询项目 转换vo
for(Project project:projectPageList){
projectVo=projectTransferFactory.createPo2voer().transfer(new ProjectVo(),project);
//PO转成VO对象
//…此处省略java代码…
projectVoPageList.add(projectVo);
}
projectVoPageList.setPageTools(projectPageList.getPageTools());
return projectVoPageList;
}
@Override
public ProjectVo projectQuery(String projectId , HttpSession session) {
//…此处省略java代码…
return projectVo;
}
@Override
//新增项目的业务逻辑代码
public void projectAdd(ProjectVo projectVo ) {
ProjectSignificant projectSignificant=new ProjectSignificant();
//…此处省略java代码…
Project project = this.getVo2poer ().transfer (new Project (), projectVo);
//前端提交的vo对象转化为po对象
project.setDepartment(projectVo.getOrgCode());
project.setGmtCreate(new Date());
projectSignificant.setWorkload(BigDecimal.valueOf(Double.valueOf(projectVo.getWorkload())));
//将项目vo信息转化为项目重要信息的po
projectSignificant.setGmtDeliver(projectVo.getGmtDeliver());
//…此处省略java代码…
}
project.setProjectMembers(projectMembers);
projectService.create(project);
//委托服务层代码处理插入项目。
}
//…此处省略java代码…
}
在projectAdd实现方法,将ProjectVo转化为ProjectSignificant项目重要信息、Project项目,ProjectMember项目成员,再委托给ProjectService类去负责对Project,ProjectSignificant,ProjectMember等实体的存储,即projectService.create();由于ProjectDao.java(项目数据访问层)对create方法是继承BaseDao。事务是由这一层负责维护,由spring @Transactional来声明的。
6)ProjectService.java(项目管理服务层接口)
package com.sunyard.pms.service;
//…此处省略java代码…
/**
* 项目管理 service 接口
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
public interface ProjectService extends BaseService<Project, String, ProjectQo> {
Project findForOutProject(String orgCode);
}
ProjectService继承了BaseService接口,主要的增删改查接口都由BaseService来定义,有新的接口需要则在该接口中定义,如:Project findForOutProject(String orgCode);
7)ProjectServiceImpl.java(项目管理服务层实现类)
package com.sunyard.pms.service.impl;
//…此处省略java代码…
/**
* 项目管理 service
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
@Service
public class ProjectServiceImpl extends BaseServiceImpl<Project, String, ProjectQo> implements ProjectService {
@Autowired
private ProjectDao projectDao;
@Override
public Project findForOutProject(String orgCode) {
return projectDao.findFarOutProject(orgCode);
}
}
服务层主要对单表(实体)逻辑的处理,这里主要承担对业务逻辑层转发给DAO层进行数据存储的作用。这里的成员变量projectDao与父类中的BaseServiceImpl中的baseDao实际是同一实例对象。ProjectDao具体DAO接口,而BaseDao为采用spring的泛化参数注入的特性。
8)ProjectDao.java(项目数据访问层)
package com.sunyard.pms.dao;
//…此处省略java代码…
/**
* 项目管理 dao 接口
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
public interface ProjectDao extends BaseDao<Project, String, ProjectQo> {
Project findFarOutProject(String orgCode);
}
9)JpaProjectDaoImpl.java(项目数据访问实现类)
package com.sunyard.pms.dao.impl;
//…此处省略java代码…
/**
* 项目管理 jdbc实现类
*
* Author: Created by code generator
* Date: Thu Jan 10 11:17:30 CST 2019
*/
@Repository
public class JpaProjectDaoImpl extends JpaBaseDaoImpl<Project,String,ProjectQo> implements ProjectDao{
@Override
public Project findFarOutProject(String orgCode) {
String hql=this.getMainQuery()+"where obj.department like ? order by obj.gmtCreate desc";
return this.findBySingle(hql,orgCode);
}
}
为了保证业务逻辑的稳定性,不会因为底层数据存储技术的变化而影响,尤其是数据库技术的sql语句特性、hql语句特性,因为系统要严格规范写sql或者hql语句必须只在dao层。各层之间的调用与参数传递只允许pojo类
当项目保存成功后,自动跳转到项目列表,项目查看列表的freemaker模板见下。
10)project_list.ftl(查看项目列表freemaker模板)
<#import "../common/global-layout.ftl" as global>
<#import "../common/common-macro.ftl" as common>
//同projcat_add.ftl
<#assign importJs=["src/js/project/projectManager.js"]>
//引用js资源
<#assign importCss=["src/styles/project/projectManager.css"]>
//引用css资源
<@global.layout pageTitle="自动生成" breadcrumb="<li>自动生成</li><li>自动生成</li>" importJs=importJs importCss=importCss>
<section class="main-fullscreen">
<div class="container-fluid bt-box">
<form id="projectForm" class="form-horizontal" action=""
method="post" name="query-form">
//查询项目的提交表单
<div class="wlk-top">
<div class="row">
<div class="form-group">
<div class="col-sm-offset-1 col-md-offset-0 col-sm-10 col-md-8 col-lg-7 ">
<label class="col-sm-8 text-right" for="">项目名称:</label>
<div class="col-sm-16">
<input name="projectName" class="form-control input-sm" type="text"
value="${projectQo.keyword!}" placeholder="请输入">
</div>
</div>
//查询条件的表单控制
<div class="col-sm-24 col-md-8 col-lg-7 text-center btn-box">
<button id="data-query" class="btn btn-sm btn-submit bt-query">查询</button>
//查询触发按钮
<button type="reset" id="data-reset" class="btn btn-sm btn-reset">重置</button>
//重置按钮,对查询条件恢复原来状态
</div>
</div>
</div>
</div>
<div class="wlk-bottom">
<div class="query-result1">
//查询项目结果列表,查询结果由分页js控制
<table id="projectTable" class="bt-table table-no-bordered" unique-id="projectId"
url="${rc.contextPath}/project/project/list.json">
//定义后台请求ajax的url地址
<thead>
<tr class="hide">
<th field="checkbox" width="5%" checkbox="true"><input type="checkbox"></th>
//定义表头
<th field="projectName">项目名称</th>
//…省略Html代码…
<th class="min-width150" width="15%" formatter="operation">操作</th>
</tr>
</thead>
</table>
</div>
</div>
</form>
</div>
</section>
<script>
function operation(res) {
var detail = '<a class="project" >查看</a> ';
return detail ;
}
</script>
</@global.layout>
(二)其它模块
本系统作为信息系统的管理功能,所有模块几乎都是对数据库进行操作。核心功能都是要数据库进行数据存储。因此不再展示对因此模块的功能实现详细介绍。
七、结论与建议
本篇论文在围绕软件工程开发准则的基础上,通过对项目需求分析,系统概要设计,系统详细设计,系统实现,系统测试几个阶段的描述,详细地论述了此项目系统开发的步骤。在软件工程的理论基础上,运用Jakarta EE框架和MVC的设计理念开发系统,根据本人多年的Java开发经验,高度复用了FAP4中的系统插件以及分层架构设计。本系统开发出来也存在着一些需要修改的不足点,例如,采用单体式架构开发,不支持分布式,不进行前后端分离的开发模式。。
经过这次毕业设计之后,我对软件工程的开发理念有了更加深刻的理解,明白一个系统开发所需经历的需求分析,概要设计,详细设计是十分有必要的。可以说,它们比系统实现更为重要。对于架构设计的选择,对于复用的理解深一层,深深认识的基于服务的复用是提高开发生产率,是社会分工的必然趋势,让专业的前端做专业的前端事情,后端负责专业后端。我将在今后的工作中带领团队,充分利用开源技术,打造一个以微服务框架的开发平台
参考文献
[1]项目管理知识体系研究[D]. 朱俊文.天津理工大学 2003
[2]项目管理手册[M]. 机械工业出版社 , (英)罗德尼·特纳(J.RodneyTurner),(英)斯蒂芬·西米斯特(StephenJ.Simister)等编著, 2004
[3] 基于松散耦合的Web框架的应用研究[D]. 崔娟.武汉理工大学 2007
[4] 深入理解java虚拟机:JVM高级特性与最佳实践/周志明著.-2版-北京:机械工业出版社,2013.6(2014.4重印)
[5] 软件需求 Software Requirements. 机械工业出版社, (美)Karl E.Wiegers著. 陆丽娜 王忠民 王志敏等译,2000.7
[6] 软件开发项目管理 机械工业出版社, 韩万江 姜立新 编著,2004.1
[7] IT企业多项目管理平台搭建研究[D]. 李学凤.山东大学 2007
[8] 基于JPA的数据持久化模型设计与实现[J]. 欧黎源,邱会中,白亚茹. 计算机工程. 2009(20)
[9] Spring AOP技术在J2EE系统安全性验证中的应用研究[J]. 张英捷,刘万军. 计算机工程与科学. 2008(08)
[10]企业应用架构模式[M]. 人民邮电出版社 , (美) 福勒 (Fowler, 2009
首页
上一页
7
8
9
10
下一页
尾页
10
/10/10
相关论文
上一篇
:
试论计算机网络故障处理及维护方法
下一篇
:
施工监察系统设计与开发
推荐论文
本专业最新论文
Tags:
项目
管理系统
设计
开发
【
返回顶部
】
相关栏目
自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文