免费获取|
论文天下网
  • 论文天下网 |
  • 原创毕业论文 |
  • 论文范文 |
  • 论文下载 |
  • 计算机论文 |
  • 论文降重 |
  • 毕业论文 |
  • 外文翻译 |
  • 免费论文 |
  • 开题报告 |
  • 心得体会 |

当前位置:论文天下网 -> 免费论文 -> 计算机论文

项目管理系统设计与开发(十)


        }
    })

       //批量删除
    $('#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>&nbsp;&nbsp;';
        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:项目 管理系统 设计 开发 【返回顶部】

相关栏目

自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文


关于我们 | 联系方式 | 论文说明 | 网站地图 | 免费获取 | 钻石会员 | 原创毕业论文

 

论文天下网提供论文检测,论文降重,论文范文,论文排版,网站永久域名WWW.GEPUW.NET

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 893628136@qq.com

Copyright@ 2009-2022 GEPUW.NET 论文天下网 版权所有