• Name: Flowable BPMN 2.0 designer

  • Location: http://flowable.org/designer/update/

业务描述:
1. 公司采购,因为办公用品价格高低的问题,需要分级审批,各级的审批资金的高低不一样,高于 500 块钱需要总经理审批!
1. 申请流程:
1. 申请人起草填写申请单(申请办公用品【数据库自带价格】、申请理由、使用人),保存后可立即提交申请;
1. 申请人提交审批,发起流程;
1. 部门经理审批;
1. 流程自动处理,采购金额buyCost大于 500的,自动转到总经理审批,否则直接转到人事部审批;
1. 如果总经理审批或者人事部审批通过,则自动转到财务部归档,否则被打回到申请人处理;
1. 财务归档处理后,流程转到采购部处理,采购部可以根据办公用品是否需要采购进行控制,选择采购办公用品或者人事部发放办公用品,流程转到此两者之一。
1. 如果申请单被打回到申请人,申请人可以再次修改后重新提交审批,也可以选择放弃、到此流程结束。
1. 如果流程走到采购办公用品,那么,采购部人员可以控制此流程,如果办公用品采购回来了,那么流程转到人事部发放办公用品。
1. 当人事部发放办公用品 人事部处理完过后,流程转到领取办公用品,申请人到人事部去领取办公用品,流程到此结束。

    // 使用代码创建工作流需要的23张表@Beforepublic void createTable() {// 工作流引擎的全部配置ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration().setJdbcUrl("jdbc:jtds:sqlserver://localhost:1433/msgBoard2").setJdbcUsername("sa").setJdbcPassword("1234").setJdbcDriver("net.sourceforge.jtds.jdbc.Driver").setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);// 工作流的核心对象,ProcessEnginee对象processEngine = processEngineConfiguration.buildProcessEngine();System.out.println("-----------工作流引擎开启----------");}/*** 部署流程定义*/@Testpublic void deploymentProcessDefinition() {//创建核心引擎对象Deployment deployment = processEngine.getRepositoryService().createDeployment().name("flowable入门程序2").addClasspathResource("myProcess-test.bpmn20.xml").deploy();System.out.println("##########添加部署##########");System.out.println("部署ID:" + deployment.getId());System.out.println("部署名称:" + deployment.getName());findProcessDefinition();}/*** 启动流程实例* 使用key值启动*/@Testpublic void startProcessInstance2() {// 流程定义的keyString processDefinitionKey = "myProcess-test";ProcessInstance pi = processEngine.getRuntimeService()// 于正在执行的流程实例和执行对象相关的Service.startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应hellworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动System.out.println("流程实例ID:" + pi.getId());// 流程实例ID 101System.out.println("流程定义ID:" + pi.getProcessDefinitionId()); // 流程定义ID HelloWorld:1:4}/*** 启动流程实例* 使用id值启动*/@Testpublic void startProcessInstance() {RuntimeService runtimeService = processEngine.getRuntimeService();//表示正在执行的流程实例和执行对象ProcurementVO procurementVO = new ProcurementVO();procurementVO.setEmployee("sky");procurementVO.setReason("测试用例。。。。。。。。");List<Articles> articlesList = new ArrayList<Articles>();Articles articles1 = new Articles("文具", 80, 1);Articles articles2 = new Articles("电脑", 500, 1);articlesList.add(articles1);articlesList.add(articles2);procurementVO.setArticlesList(articlesList);double buyCost = 0;for (Articles articles : articlesList) {buyCost += (articles.getAmount() * articles.getPrice());}Map<String, Object> variables = new HashMap<String, Object>();variables.put("procurement", procurementVO);variables.put("buyCost", buyCost);String processDefinitionId = "myProcess-test:1:105003";ProcessInstance processInstance =runtimeService.startProcessInstanceById(processDefinitionId, variables);System.out.println("##########流程开启##########");System.out.println("流程实例ID:" + processInstance.getId());System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());findTask();}/*** 查询所有的流程定义*/@Testpublic void findProcessDefinition() {List<ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义和部署对象先相关的service.createProcessDefinitionQuery()// 创建一个流程定义的查询/** 指定查询条件,where条件 */// .deploymentId(deploymentId) //使用部署对象ID查询// .processDefinitionId(processDefinitionId)//使用流程定义ID查询// .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询/* 排序 */.orderByProcessDefinitionVersion().asc()// .orderByProcessDefinitionVersion().desc()/* 返回的结果集 */.list();// 返回一个集合列表,封装流程定义// .singleResult();//返回惟一结果集// .count();//返回结果集数量// .listPage(firstResult, maxResults);//分页查询if (list != null && list.size() > 0) {for (ProcessDefinition pd : list) {System.out.println("流程定义ID:" + pd.getId());// 流程定义的key+版本+随机生成数System.out.println("流程定义的名称:" + pd.getName());// 对应helloworld.bpmn文件中的name属性值System.out.println("流程定义的key:" + pd.getKey());// 对应helloworld.bpmn文件中的id属性值System.out.println("流程定义的版本:" + pd.getVersion());// 当流程定义的key值相同的相同下,版本升级,默认1System.out.println("资源名称bpmn文件:" + pd.getResourceName());System.out.println("资源名称png文件:" + pd.getDiagramResourceName());System.out.println("部署对象ID:" + pd.getDeploymentId());System.out.println("是否暂停:" + pd.isSuspended());System.out.println("#########################################################");}} else {System.out.println("没有流程正在运行。");}}/*** 获取任务*/@Testpublic void getTask() {// 与任务相关的service,正在执行的serviceTaskService taskService = processEngine.getTaskService();// 任务IDString taskId = "85005";Task task = taskService.newTask(taskId);System.out.println(task.getId() + "    " +task.getAssignee() + "    " +task.getName() + "    " +task.getProcessInstanceId());System.out.println("################################");}/*** 设置流程变量*/@Testpublic void setVariables() {// 与任务相关的service,正在执行的serviceTaskService taskService = processEngine.getTaskService();// 任务IDString taskId = "107508";Map<String, Object> variables = new HashMap<String, Object>();
//        variables.put("approve", false);variables.put("endOut", true);
//        taskService.removeVariable(taskId, "buyCost");taskService.complete(taskId, variables);System.out.println("设置流程变量成功!");findTask();}/*** 删除流程定义(删除key相同的所有不同版本的流程定义)*/@Testpublic void delteProcessDefinitionByKey() {// 流程定义的KeyString processDefinitionKey = "myProcess-test";// 先使用流程定义的key查询流程定义,查询出所有的版本List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey(processDefinitionKey)// 使用流程定义的key查询.list();// 遍历,获取每个流程定义的部署IDif (list != null && list.size() > 0) {for (ProcessDefinition pd : list) {// 获取部署IDString deploymentId = pd.getDeploymentId();//      /*//       * 不带级联的删除, 只能删除没有启动的流程,如果流程启动,就会抛出异常//       *///       processEngine.getRepositoryService().deleteDeployment(deploymentId);/*** 级联删除 不管流程是否启动,都可以删除*/System.out.println("删除部署:" + deploymentId);processEngine.getRepositoryService().deleteDeployment(deploymentId, true);}}}/*** 查询流程状态(判断流程正在执行,还是结束)*/@Testpublic void isProcessEnd() {String processInstanceId = "25001";ProcessInstance pi = processEngine.getRuntimeService()//表示正在执行的流程实例和执行对象.createProcessInstanceQuery()//创建流程实例查询.processInstanceId(processInstanceId)//使用流程实例ID查询.singleResult();if (pi == null) {System.out.println("流程已经结束");} else {System.out.println("流程没有结束");}}/*** 查询任务* --通过流程实例id*/@Testpublic void findTask() {
//        String processInstanceId = "42501";List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的service.createHistoricTaskInstanceQuery()//创建历史任务实例查询
//                .processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list();if (list != null && list.size() > 0) {for (HistoricTaskInstance hti : list) {System.out.println(hti.getId() + "    " +hti.getAssignee() + "    " +hti.getName() + "    " +hti.getProcessInstanceId() + "   " +hti.getStartTime() + "   " +hti.getEndTime() + "   " +hti.getDurationInMillis());System.out.println("################################");}}}/*** 查询当前人的个人任务*/@Testpublic void findMyPersonTask() {String assignee = "sky";List<Task> list = processEngine.getTaskService()// 与正在执行的认为管理相关的Service.createTaskQuery()// 创建任务查询对象.taskAssignee(assignee)// 指定个人认为查询,指定办理人.list();if (list != null && list.size() > 0) {for (Task task : list) {System.out.println("任务ID:" + task.getId());System.out.println("任务名称:" + task.getName());System.out.println("任务的创建时间" + task);System.out.println("任务的办理人:" + task.getAssignee());System.out.println("流程实例ID:" + task.getProcessInstanceId());System.out.println("执行对象ID:" + task.getExecutionId());System.out.println("流程定义ID:" + task.getProcessDefinitionId());System.out.println("#################################");}}}/*** 得到实际的 组任务列表*/@Testpublic void findGroupTaskList() {String groupName1 = "procurementOfManager";String groupName2 = "procurementOfPersonnel";TaskService taskService = processEngine.getTaskService();List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup(groupName1).list();System.out.println(groupName1 + " have " + tasks.size() + " tasks:");for (int i = 0; i < tasks.size(); i++) {System.out.println((i + 1) + ") " + tasks.get(i).getName());}System.out.println("#################################################");TaskService taskService2 = processEngine.getTaskService();List<Task> tasks2 = taskService.createTaskQuery().taskCandidateGroup(groupName2).list();System.out.println(groupName2 + " have " + tasks2.size() + " tasks:");for (int i = 0; i < tasks2.size(); i++) {System.out.println((i + 1) + ") " + tasks2.get(i).getName());}}

  

转载于:https://www.cnblogs.com/skyLogin/p/7094387.html

公司采购 流程flowable例子相关推荐

  1. IDES翻译—采购流程中的Enjoy界面

    The Enjoy Interface in the Procurement Process采购流程中的Enjoy界面 Purpose 目的 As of Release 4.6, the user i ...

  2. 用Leangoo看板工具做办公室采购流程管理

    我们可以按照公司的实际情况定制采购流程. 1.在Leangoo中创建一个项目,项目类型建议选择"轻量级协作",项目模版建议选择"人事与行政" 系统会自动为您创建 ...

  3. SAP RETAIL 我的第一个寄售类型的跨公司采购订单

    SAP RETAIL 我的第一个寄售类型的跨公司采购订单 笔者所关注的一个零售行业项目里,存在总公司进口商品后,转给国内的销售公司,然后再由销售公司的门店销售给客户的场景.这是典型的跨公司采购,或者说 ...

  4. 【转】STO跨公司转储流程

    一.流程说明 跨公司转储流程,是在不同公司代码下的两个工厂之间进行物料转移,涉及交货出库和收货,需要进行结算. 一般由收货工厂做转储单,也可能需要经过审批等环节,发货工厂根据转储单做交货单,并完成拣配 ...

  5. 采购订单模板_采购必备:如何搭建合规的采购流程

    如果你在一家小公司做采购,其实你并不需要流程,因为死板的流程会扼杀小公司的灵活性.但是当公司发展得越来越大,流程就显得尤为重要,因为采购管理者需要通过流程控制达到业务合规和效率提升的目的. 作为采购管 ...

  6. 一个公司采购申请审批系统,包含用户登录注销、用户创建、角色分配、采购申请审批及其他相关功能。

    文章目录 一.开发环境 二.项目要求 总结 采购申请审批系统下载地址 一.开发环境 编程语言:C++ IDE:VS2019 OS:WIN10 二.项目要求 1.设计一个公司采购申请审批系统,包含用户登 ...

  7. 「案例」如何解决公司采购与财务之间的工作矛盾?

    唯一能赚钱的部门,除了这两个部门其他所有的任何部门发生的都是管理费用".仔细想来,杰克·韦尔奇先生说得非常经典. 在一个企业里边,当然是采购越低,销售越高,那我们中间的利润就越高.所以我们可 ...

  8. STO,跨公司采购,第三方销售,跨公司销售

    配合不同的业务情形的需要,采用这几中销售和采购业务的模式: 第三方销售:在遇到第三方交易的时候,是由甲方向客户开具发票,但是在交货的时候,实际上是由乙方来给客户交货,同时乙方需要给甲方出具发票,甲方要 ...

  9. sap委外退料流程图_最新九牧SAP(ERP项目)SAP-TB-MM委外加工采购流程

    <最新九牧SAP(ERP项目)SAP-TB-MM委外加工采购流程.doc>由会员分享,可免费在线阅读全文,更多与<最新九牧SAP(ERP项目)SAP-TB-MM委外加工采购流程> ...

最新文章

  1. javascript打开模式窗口的用法
  2. 04SpringMvc_映射器_BeanNameUrlHanderMapping
  3. 提高你的迅雷速度,绝对值得一看
  4. [解决方案]验证码无法显示
  5. u盘固定盘符_Windows 下如何固定 U 盘的盘符?
  6. 史上最强三千六百道脑筋急转弯
  7. NOIP2013普及组复赛 解题分析
  8. 酒店管理系统-概要设计说明书
  9. IOS11降级到IOS10的操作方法(刷机有风险,操作需谨慎)
  10. 给新服务器装linux系统,新服务器安装linux系统安装教程
  11. Linux搭建Nacos及Nacos集群
  12. 大数据可视化 课堂笔记-1
  13. 邮箱批量登陆工具测试版
  14. OpenWrt固件实现路由器定时重启方法
  15. B站云E办Vue+SpringBoot前后端分离项目——MVC三层架构搭建后台项目
  16. HR人力资源部门在招聘、入职、参与和培训方面的 OKRs 案例集
  17. gt9xx.c和gt9xx.h文件分析
  18. python基础程序实例-Python基础的初始
  19. DDL、DML介绍及常用语句
  20. Hive用户接口(一)—Hive Web接口HWI的操作及使用

热门文章

  1. webservice实例java_Java WebService(实战) 简单实例
  2. resultmap的写法_Mybatis的ResultMap的使用
  3. python 会计师事务所_Selenium爬取会计师事务所新闻信息——以中准会计师事务所为例...
  4. dataloader 源码_[莫烦 PyTorch 系列教程] 3.5 – 数据读取 (Data Loader)
  5. php-5.6.31安装视频教程_php安装图解教程
  6. 联想e540风扇清灰_实力强劲无惧挑战,联想异能者就是这么强悍
  7. 导出csv文件_使用 WeihanLi.Npoi 操作 CSV
  8. Android的EditText文字动态监听
  9. c语言字符马图案,C语言实现马踏棋盘
  10. 简单而常用的shell 命令