请假流系统报告.docx
- 文档编号:26202505
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:16
- 大小:392.51KB
请假流系统报告.docx
《请假流系统报告.docx》由会员分享,可在线阅读,更多相关《请假流系统报告.docx(16页珍藏版)》请在冰豆网上搜索。
请假流系统报告
昆明理工大学信息工程与自动化学院学生实验报告
(2014—2015学年第2学期)
课程名称:
工作流技术开课实验室:
4422015年5月15日
年级、专业、班
计科121
学号
6
姓名
和云山
成绩
实验项目名称
请假流系统
指导教师
胡守成
教师评语
该同学是否了解实验原理:
A.了解□B.基本了解□C.不了解□
该同学的实验能力:
A.强□B.中等□C.差□
该同学的实验是否达到要求:
A.达到□B.基本达到□C.未达到□
实验报告是否规范:
A.规范□B.基本规范□C.不规范□
实验过程是否详细记录:
A.详细□B.一般□C.没有□
教师签名:
年月日
一、实验目的及内容
了解工作流的基本概念,熟悉在eclipse的开发环境下绘制工作流图完成员工请假,经理审批,老板审批。
二、实验原理及步骤
1.问题背景
本系统是基于工作流技术的员工管理系统,便于企业更加高效便捷对员工事务进行管理。
确定了员工的请假制度,实现了请假制度的结构化、规范化。
工作流是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。
工作流要解决的主要问题是:
为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递。
工作流属于计算机支持的协同工作的一部分。
后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。
许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。
而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公的核心竞争力。
2.问题分析
员工请假分为以下几个步骤,首先要填写假条,并由部门经理审批。
有一部分可以直接通过审批通知员工结果。
其余的要判断请假天数,少于7天的直接由人事经理审批,多于7天的由总经理审批后再由人事经理审批,之后才能向员工通知结果。
通过本系统后,请假制度变得更加规范智能,完全按照要求执行。
输入相应请假信息后可以执行出请假结果,以及经过路径还有处理相关信息的人员。
3.工作流设计
流程设计:
使用petri设计,分析,结构化分析,定量分析,证明无误(要有一定的规模)
流程设计图如下图所示
资源设计:
资源分类图,group分类,角色分类
系统中可识别出的角色有:
雇员
人事部
人事部经理
其他部门
部门经理
总经理
资源分类图如下图所示。
4.系统实现
(1)做项目src的截图(eclipse文件结构截图)
(2)流程图(jpg)文件展示
(3)附processDefination.xml文件
xmlversion="1.0"encoding="UTF-8"?
>
jbpm.org: jpdl-3.2"name="Qingjia"> "判断金额": "通知结果"}'> "more7": "less7"}'> (4)附所有类的源代码,请加上必要注示 AssignmentHandler.java: packagecom.jbpm.test; publicinterfaceAssignmentHandler{ } ManagerAssigment.java: packagecom.jbpm.test; importorg.jbpm.graph.exe.ExecutionContext; importorg.jbpm.taskmgmt.def.AssignmentHandler; importorg.jbpm.taskmgmt.exe.Assignable; publicclassManagerAssigmentimplementsAssignmentHandler{ @Override publicvoidassign(Assignableassignable,ExecutionContextexecutionContext) throwsException{ //TODOAuto-generatedmethodstub Stringperson=executionContext.getContextInstance() .getVariable("person").toString(); if(person.equals("user1")){ assignable.setActorId("manager1");} elseassignable.setActorId("manager2"); } } NotifyAction.java: packagecom.jbpm.test; importorg.jbpm.context.exe.ContextInstance; importorg.jbpm.graph.def.ActionHandler; importorg.jbpm.graph.exe.ExecutionContext; publicclassNotifyActionimplementsActionHandler { @Override publicvoidexecute(ExecutionContextexecutionContext)throwsException{ //TODOAuto-generatedmethodstub ContextInstanceci=executionContext.getContextInstance(); Stringperson=ci.getVariable("person").toString(); StringmanagerResult=ci.getVariable("manager_result").toString(); booleanresult=false; if(managerResult.equals("ok")){ Stringqingjia=ci.getVariable("qingjia").toString(); if(Integer.parseInt(qingjia)>7) {StringsuperManagerResult=ci.getVariable("super_manager_result").toString(); if(superManagerResult.equals("ok"))result=true; elseresult=false; } elseresult=true; } if(result)System.out.println(person+",你好! 你的请假申请已经通过审批"); elseSystem.out.println(person+",你好! 很遗憾,你的请假申请没有通过审批"); executionContext.getToken().signal(); } } MessageActionHandler.java: packagecom.sample.action; importorg.jbpm.graph.def.ActionHandler; importorg.jbpm.graph.exe.ExecutionContext; publicclassMessageActionHandlerimplementsActionHandler{ privatestaticfinallongserialVersionUID=1L; /** *Themessagemembergetsitsvaluefromtheconfigurationinthe *processdefinition.Thevalueisinjecteddirectlybytheengine. */ Stringmessage; /** *Amessageprocessvariableisassignedthevalueofthemessage *member.Theprocessvariableiscreatedifitdoesn'texistyet. */ publicvoidexecute(ExecutionContextcontext)throwsException{ context.getContextInstance().setVariable("message",message); } } SimpleProcessTest.java: packagecom.sample; importjunit.framework.TestCase; importorg.jbpm.graph.def.ProcessDefinition; importorg.jbpm.graph.exe.ProcessInstance; publicclassSimpleProcessTestextendsTestCase{ publicvoidtestSimpleProcess()throwsException{ //Extractaprocessdefinitionfromtheprocessdefinition.xmlfile. ProcessDefinitionprocessDefinition=ProcessDefinition.parseXmlResource("simple/processdefinition.xml"); assertNotNull("Definitionshouldnotbenull",processDefinition); //Createaninstanceoftheprocessdefinition. ProcessInstanceinstance=newProcessInstance(processDefinition); assertEquals( "Instanceisinstartstate", instance.getRootToken().getNode().getName(), "start"); assertNull( "Messagevariableshouldnotexistyet", instance.getContextInstance().getVariable("message")); //Movetheprocessinstancefromitsstartstatetothefirststate. //Theconfiguredactionshouldexecuteandtheappropriatemessage //shouldappearinthemessageprocessvariable. instance.signal(); assertEquals( "Instanceisinfirststate", instance.getRootToken().getNode().getName(), "first"); assertEquals( "Messagevariablecontainsmessage", instance.getContextInstance().getVariable("message"), "Goingtothefirststate! "); //Movetheprocessinstancetotheendstate.Theconfiguredaction //shouldexecuteagain.Themessagevariablecontainsanewvalue. instance.signal(); assertEquals( "Instanceisinendstate", instance.getRootToken().getNode().getName(), "end"); assertTrue("Instancehasended",instance.hasEnded()); assertEquals( "Messagevariableischanged", instance.getContextInstance().getVariable("message"), "Abouttofinish! "); } } Test.java: packageQingjia; importjava.util.Iterator; importjava.util.List; importorg.jbpm.JbpmConfiguration; importorg.jbpm.JbpmContext; importorg.jbpm.context.exe.ContextInstance; importorg.jbpm.graph.def.ProcessDefinition; importorg.jbpm.graph.def.Transition; importorg.jbpm.graph.exe.ProcessInstance; importorg.jbpm.graph.exe.Token; importorg.jbpm.taskmgmt.exe.TaskInstance; //无界面+内存测试(不使用数据库) publicclasstest{ publicstaticvoidmain(String[]args){ Stringperson; Stringmanager_result; Stringsuper_manager_result; Stringqingjia; ProcessDefinitionprocessDefinition; ProcessInstanceinstance; ContextInstanceci; TaskInstanceti; Tokentoken; //初始化测试数据 person="user2"; qingjia="8"; manager_result="ok"; super_manager_result="no"; //使用相对路径构造“流程”对象 processDefinition=ProcessDefinition.parseXmlResource("qingjia/processdefinition.xml"); //构造流程的一个实例 instance=newProcessInstance(processDefinition); //构造一个上下文对象 ci=instance.getContextInstance(); //获得一个案例(标记),初始时在start节点 token=instance.getRootToken(); //为当前案例设定案例执行者 instance.getContextInstance().setVariable("person",person,token); System.out.println("______________________________"); System.out.println("现在的节点是: "+token.getNode().getName()); token.signal(); //创建一个task实例 Iterator for(;it.hasNext();){ ti=it.next(); if(ti.hasEnded()==false){ System.out.println("任务执行者是: "+ti.getActorId()); instance.getContextInstance().setVariable("qingjia",qingjia,token); ti.end();//任务结束,该节点的token才会向下流转 break; } } System.out.println("______________________________"); System.out.println("现在的节点是: "+token.getNode().getName()); it=instance.getTaskMgmtInstance().getTaskInstances().iterator(); for(;it.hasNext();){ ti=it.next(); if(ti.hasEnded()==false&&ti.getActorId().equals("manager2")){ System.out.println("任务执行者是: "+ti.getActorId()); //添加部门经理处理意见 instance.getContextInstance().setVariable("manager_result",manager_result,token); ti.end(); break; } } if(manager_result.equals("ok")){//总经理意见处理 System.out.println("______________________________"); System.out.println("现在的节点是: "+token.getNode().getName()); it=instance.getTaskMgmtInstance().getTaskInstances().iterator(); for(;it.hasNext();){ ti=it.next(); if(ti.hasEnded()==false&&ti.getActorId().equals("supermanager")){ System.out.println("任务执行者是: "+ti.getActorId()); //添加部门经理处理意见instance.getContextInstance().setVariable("super_manager_result",super_manager_result,token); //任务实例结束 ti.end(); break; } } System.out.println("______________________________"); System.out.println("现在的节点是: "+token.getNode().getName()); it=instan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 请假 系统 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)