前端代码
<template> <div> <el-table :data="tableData" style="width: 100%" max-height="250"> <el-table-column fixed prop="id" label="ID" width="150"> </el-table-column> <el-table-column prop="processInstanceId" label="流id" width="120"> </el-table-column> <el-table-column prop="processInstanceStatus" label="流状态" width="120"> </el-table-column> <el-table-column prop="businessKey" label="业务key" width="120"> </el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <span v-if="scope.row.processInstanceStatus==''"> <el-button type="primary" size="mini" @click="commit(scope.row)">提交</el-button> </span> <span v-if="scope.row.processInstanceStatus=='审批中'||scope.row.processInstanceStatus=='审核实现'"> <el-button type="primary" size="mini" @click="look(scope.row)">查看</el-button> </span> </template> </el-table-column> </el-table> <!--新增弹窗--> <el-dialog title="编辑信息" :visible.sync="dialogVisible" width="30%"> <el-form ref="form" :model="form" label-width="100px"> <el-form-item label="ID"> <el-input v-model="form.id" :disabled="true" style="width: 200px;"></el-input> </el-form-item> <el-form-item label="流id"> <el-input v-model="form.processInstanceId" :disabled="true" style="width: 200px;"></el-input> </el-form-item> <el-form-item label="流状态"> <el-input v-model="form.processInstanceStatus" :disabled="true" style="width: 200px;"></el-input> </el-form-item> <el-form-item label="业务key"> <el-input v-model="form.businessKey" :disabled="true" style="width: 200px;"></el-input> </el-form-item> </el-form> </el-dialog> </div></template><script> import axios from '@/axios'; export default { data() { return { tableData: [], dialogVisible: false, form: { id: '', processInstanceId: '', processInstanceStatus: '', businessKey: '' } } }, mounted() { this.queryObject() }, methods: { queryObject() { var url = 'wzhB/queryObject.do' var param = {} axios.get(url, param).then(response => { if (response.data.code == '0') { this.tableData = response.data.data console.log(response.data.data) } else { this.$message({ type: 'error', message: '操作失败!' + response.data.msg }); } }); }, look(row) { this.dialogVisible = true this.form = row }, commit(row) { var url = 'wzhB/start.do' var param = { id: row.id } axios.get(url, param).then(response => { if (response.data.code == '0') { this.queryObject(); } else { this.$message({ type: 'error', message: '操作失败!' + response.data.msg }); } }); } } }</script><style></style>
后端
controller
package com.slxx.controller.develop;import com.slxx.model.system.Type;import com.slxx.service.develop.WangZhaoHuiDemoBService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;@RestController@RequestMapping(value = "/wzhB")public class wangZhaoHuiDemoBController { @Autowired WangZhaoHuiDemoBService wangZhaoHuiDemoBService; @RequestMapping(value = "/queryObject.do") public String queryObject(){ String result = ""; try { result = wangZhaoHuiDemoBService.queryObject(); } catch (Exception ex) { result = Type.FAIL + ex.getMessage(); ex.printStackTrace(); } finally { return result; } } @RequestMapping(value = "/start.do") public String start(String id, HttpServletRequest request) { String result = ""; String userId = (String) request.getAttribute("userId"); try { result = wangZhaoHuiDemoBService.start(id,userId); } catch (Exception ex) { result = Type.FAIL + ex.getMessage(); ex.printStackTrace(); } finally { return result; } }}
serviceImpl
package com.slxx.service.impl.develop;import com.alibaba.druid.proxy.jdbc.JdbcParameter;import com.alibaba.fastjson.JSON;import com.slxx.mapping.develop.WangZhaoHuiDemoBMapper;import com.slxx.model.develop.WangZhaoHuiDemo;import com.slxx.model.develop.WangZhaoHuiDemoB;import com.slxx.model.process.ProcessInfo;import com.slxx.model.system.Type;import com.slxx.service.develop.WangZhaoHuiDemoBService;import com.slxx.service.process.ProcessService;import com.slxx.tools.JSONTools;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.HashMap;import java.util.List;import java.util.Map;@Service("WangZhaoHuiDemoBService")public class WangZhaoHuiDemoBServiceImpl implements WangZhaoHuiDemoBService { @Autowired WangZhaoHuiDemoBMapper wangZhaoHuiDemoBMapper; @Autowired ProcessService processService; String result = Type.FAIL; @Override public String queryObject() { List<WangZhaoHuiDemoB> list = wangZhaoHuiDemoBMapper.queryObject(); result = JSONTools.toStringyyyyMMddHHmmss(list); return result; } @Override public String start(String id, String userId) throws Exception { WangZhaoHuiDemoB demo = wangZhaoHuiDemoBMapper.selectPrimaryKeyId(id); Map<String, Object> map = new HashMap<>(); String processInstanceId= processService.startWithProcessKeyWithOutFirstTask("test2", userId, map); demo.setProcessInstanceId(processInstanceId); demo.setProcessInstanceStatus("审批中"); wangZhaoHuiDemoBMapper.updateByPrimaryKey(demo); processService.completeFirstTask(processInstanceId,userId); return JSONTools.toString(Type.SUCCESS); } @Override public String selectPrimaryKey(String id) { WangZhaoHuiDemoB demoB = wangZhaoHuiDemoBMapper.selectPrimaryKeyId(id); result = JSONTools.toStringyyyyMMddHHmmss(demoB); return result; }}
service
package com.slxx.service.develop;public interface WangZhaoHuiDemoBService { String queryObject(); String start(String id,String userId) throws Exception; String selectPrimaryKey(String id);}
Mapper
package com.slxx.mapping.develop;import com.slxx.model.develop.WangZhaoHuiDemoB;import java.util.List;public interface WangZhaoHuiDemoBMapper { List<WangZhaoHuiDemoB> queryObject(); WangZhaoHuiDemoB selectPrimaryKeyId(String id); WangZhaoHuiDemoB selectPrimaryKey(String processInstanceId); int updateByPrimaryKey(WangZhaoHuiDemoB record);}
监听器
package com.slxx.service.impl.develop;import com.slxx.mapping.develop.WangZhaoHuiDemoBMapper;import com.slxx.model.develop.WangZhaoHuiDemo;import com.slxx.model.develop.WangZhaoHuiDemoB;import com.slxx.service.common.CommonWaitToDoService;import org.activiti.engine.RuntimeService;import org.activiti.engine.delegate.DelegateExecution;import org.activiti.engine.delegate.DelegateTask;import org.activiti.engine.delegate.ExecutionListener;import org.activiti.engine.delegate.TaskListener;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Service("wangZhaoHuiDemoBListener")public class WangZhaoHuiDemoBListener implements ExecutionListener, TaskListener { @Autowired WangZhaoHuiDemoBMapper wangZhaoHuiDemoBMapper; @Autowired CommonWaitToDoService commonWaitToDoService; @Autowired RuntimeService runtimeService; @Override public void notify(DelegateExecution delegateExecution) throws Exception { try { String status = ""; if (delegateExecution.getEventName().equals("start")) { } else if (delegateExecution.getEventName().equals("end")) { WangZhaoHuiDemoB payReq = wangZhaoHuiDemoBMapper.selectPrimaryKey(delegateExecution.getProcessInstanceId()); if (payReq != null) { String deleteType = (String) (runtimeService.getVariable(delegateExecution.getProcessInstanceId(), "deleteType") == null ? "" : runtimeService.getVariable(delegateExecution.getProcessInstanceId(), "deleteType")); if (payReq.getProcessInstanceStatus().equals("驳回")) { if (deleteType.equals("manual")) { status = "手动敞开"; payReq.setProcessInstanceStatus(""); } else { status = "驳回"; //payReq.setStatus(""); payReq.setProcessInstanceStatus(""); } } else if (deleteType.equals("manual")) { status = "手动敞开"; } else { status = "审批通过"; } payReq.setProcessInstanceStatus(status); wangZhaoHuiDemoBMapper.updateByPrimaryKey(payReq); } } } catch (Exception ex) { ex.printStackTrace(); } } @Override public void notify(DelegateTask delegateTask) { WangZhaoHuiDemoB payReq = wangZhaoHuiDemoBMapper.selectPrimaryKey(delegateTask.getProcessInstanceId()); if (payReq != null) { //draft step1 if (delegateTask.getTaskDefinitionKey().equals("step1")) { if (payReq.getProcessInstanceStatus().equals("驳回")) { if (delegateTask.getEventName().equals("create")) { payReq.setProcessInstanceStatus("驳回"); } else if (delegateTask.getEventName().equals("complete")) { payReq.setProcessInstanceStatus("审批中"); } } else if (delegateTask.getEventName().equals("create")) { payReq.setProcessInstanceStatus("驳回"); } else if (delegateTask.getEventName().equals("complete")) { payReq.setProcessInstanceStatus("审批中"); } wangZhaoHuiDemoBMapper.updateByPrimaryKey(payReq); } if (delegateTask.getEventName().equals("create")) { commonWaitToDoService.beforeDeal(delegateTask); } else if (delegateTask.getEventName().equals("complete")) { commonWaitToDoService.afterDeal(delegateTask); } } }}
mapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.slxx.mapping.develop.WangZhaoHuiDemoBMapper"> <resultMap id="resultMap" type="com.slxx.model.develop.WangZhaoHuiDemoB"> <id column="ID" property="id"></id> <result column="PROCESS_INSTANCE_ID" property="processInstanceId"></result> <result column="PROCESS_INSTANCE_STATUS" property="processInstanceStatus"></result> <result column="BUSINESS_KEY" property="businessKey"></result> </resultMap> <select id="queryObject" resultMap="resultMap"> select * from W_ZH_DEMO_B </select> <select id="selectPrimaryKeyId" resultMap="resultMap"> select * from W_ZH_DEMO_B where ID = #{id.jdbcType=VARCHAR} </select> <select id="selectPrimaryKey" resultMap="resultMap"> select * from W_ZH_DEMO_B where PROCESS_INSTANCE_ID=#{processInstanceId,jdbcType=VARCHAR} </select> <update id="updateByPrimaryKey" parameterType="com.slxx.model.develop.WangZhaoHuiDemoB"> update W_ZH_DEMO_B set PROCESS_INSTANCE_ID = #{processInstanceId,jdbcType=VARCHAR}, PROCESS_INSTANCE_STATUS = #{processInstanceStatus,jdbcType=VARCHAR}, BUSINESS_KEY = #{businessKey,jdbcType=VARCHAR} where ID = #{id,jdbcType=VARCHAR} </update></mapper>
总结: 创立各个字段必须有上面的字段,流程key必须是惟一的
ID PROCESS_INSTANCE_ID PROCESS_INSTANCE_STATUS BUSINESS_KEY(业务)
dev表的字段05E4B0553B1B4F2A1EDA34CED0CD0430 demo2 W_ZH_DEMO_B test2 com.th.demo 2020-11-05 00:00:00 2020-11-05 00:00:00 0 0 /externalproj/tender/externalprojTenderShow.vue select t.BUSINESS_KEY from W_ZH_DEMO_B t where t.PROCESS_INSTANCE_ID=#{param2,jdbcType=VARCHAR} /pages/externalproj/tender/process/process demoB