工作流的大体流程

要出现下面的图片效果:

登录页

 <form action="appuser/serach.do" method="post">
	     <table>
	     		<tr>
	     			<td>用户名</td>
	     			<td><input type="text" name="username"/></td>
	     		</tr>
	     		
	     		<tr>
	     			<td>密码</td>
	     			<td><input name="password" type="password"/></td>
	     		</tr>
	     		
	     		<tr>
	     			<td><input type="submit" value="登陆" /></td>
	     			
	     		</tr>
	     
	     
	     
	     
	     
	     </table>
			
	
	
	</form> 

</body>

流程显示页面

<head>
<%
	String ctx = request.getContextPath();
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>流程操作页</title>
<script type="text/javascript" src="<%=ctx%>/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="<%=ctx%>/js/flow.js"></script>
</head>
<body>
    <h3>欢迎登陆,${currentuser.realname }</h3>
    
    <h3>发起流程</h3>
    
    <table>
		<tr>
			<td>
				<select id="fid">
					<c:forEach items="${flist }" var="f">
						<option value="${f.ids }">${f.fname }</option>
					</c:forEach>
				</select>
			</td>
		</tr>
		<tr>
			<td>
				<textarea id="content"
					style=" 300px; height: 100px; resize: none;"></textarea>
			</td>
		</tr>
		<tr>
			<td><input type="button" id="btn_stflow" value="发起流程" /></td>
		</tr>
	</table>

	<h3>审批流程</h3>
	<!-- 这一步的思想是,要把flowrun这个表和flowk运行表进行联合查询,谁登陆的谁就开始审批自己的流程-->
	
	<c:if test="${currentuser.username eq 'admin' }">  <!-- 只有超级管理员才可以进行流程的创建 -->
	
	<h3>创建流程</h3> 
	<!-- 这一步需要做的是把新建的流程放进flow流程表里面,同时也要把流程放进flowtemp模板表里面 -->
	<c:forEach items="${ulist }" var="list" >
	    <input type="checkbox" class="uids" value="${list.ids }"/>${list.realname }
	    
	</c:forEach>
	<br>
	     流程名称:<input type="text" id="fname"/>
	     <input type="button" id="btn_cfw" value="创建流程"/>
	</c:if>
    

</body>

FlowController

@Controller
@RequestMapping("/flow")
public class FlowController {
      @Autowired
      private FlowService flowService;
      
      @ResponseBody
      @RequestMapping("/createflow")
      public String  createFlow(String suids,String fname) {  //先添加流程表
		  JSONObject jo = new JSONObject();
		  boolean result = flowService.cretateFlow(suids, fname);
		  jo.put("success", result);
    	  
    	  return jo.toJSONString();
    	  
      }
      
}

 FlowkController

@Controller
@RequestMapping("/flowk")
public class FlowkController {
	   	@Autowired
	   	private FlowkService flowService;
	 
	 @ResponseBody  //ajax提交的时候需要用到的注解
	 @RequestMapping("/startflow")
	 public String startFlow(HttpSession session,Integer fid,String content) {  //发起流程
		 JSONObject jo = new JSONObject();
		 Appuser ap = (Appuser) session.getAttribute("currentuser");
		 System.out.println(fid);
		 System.out.println(content);
		 System.out.println(ap);
		if(ap == null) {
			  jo.put("success", false);
			  return jo.toJSONString();
		}
		boolean flag = flowService.startFlow(ap, fid, content);
		
		 jo.put("success", flag);
		 return jo.toJSONString();
		   
	 }
}

AppuserController

@Controller    //Spring MVC 控制器
//@SessionAttributes("infolist")  //将当前controller类中某一个Model类中的属性添加到session对象中
@SessionAttributes("currentuser")
@RequestMapping("/appuser")	
public class AppuserController {  //注册


            @Autowired
	private AppuserService appUserService;
	
	@Autowired
	private FlowService flowService;


    //工作流的开始
	@RequestMapping("/serach")
	public String selectByid(Appuser ap,Model md) { 
		//根据用户名和密码查询用来验证登陆的
		if (ap != null) {
			Appuser au = appUserService.selectName(ap);
			md.addAttribute("currentuser",au);
			if("admin".equals(au.getUsername())) { //只有超级管理员才可以查询用户表内容
				List<Appuser> list = appUserService.selectAll(); //查询所有的用户表的内容
				md.addAttribute("ulist", list);
			}
			List<Flow> list = flowService.selectAllflow(); //查找全部的流程
			md.addAttribute("flist",list);
		}else {
			
			return "fail";
		}
		return "page/flow/main";
		  	
	}
	
}

flow.js

$(function(){
	
	//发起流程
	$("#btn_stflow").click(function(){
		   var fid = $("#fid").val(); //获取的流程表主键
		   var content = $("#content").val(); //获取的请假内容
		   $.ajax({
			   dataType:"json",
				  type:"post",
				  url:"/testssm/flowk/startflow.do",  //testssm是项目名
				  data:{
					  fid:fid,
					  content:content
				  },
				  success:function(data){
					  if (data.success) {
						  alert("发起流程成功!");
					}else{
						alert("后台异常!");
					}
				  },
				  error:function(){
					   alert("出错了!");
				  }
		   });
		   
	});
	 
	//创建流程
	$("#btn_cfw").click(function(){
		  var fname = $("#fname").val();
		  var suids = "";
		  var uids = $(".uids:checked");  //用户表的主键被选中的话
		  for (var i = 0; i < uids.length; i++) {
			    suids += uids.eq(i).val();
			   if (i != uids.length - 1) {
				  suids += ",";
			}
		}
		 
		  $.ajax({
			  dataType:"json",
			  type:"post",
			  url:"/testssm/flow/createflow.do",
			  data:{
				  fname:fname,
				  suids:suids
			  },
			  success:function(data){
				  if (data.success) {
					  alert("创建流程成功!");
				}else{
					alert("后台异常!");
				}
			  },
			  error:function(){
				   alert("出错了!");
			  }
			  
		  });
	});
});

FlowkServiceImpl

@Repository
public class FlowkServiceImpl implements FlowkService {
		@Autowired
		private FlowkMapper  flowkMapper;
		
		@Autowired
		private FlowrunMapper flowrunMapper;

		@Override
		public boolean startFlow(Appuser ap,Integer fid,String content) {
			 	//添加流程主表flowk表的内容
				Flowk fw = new Flowk();
				fw.setTitle(content);  //前台文本域输入的内容
				fw.setBeuser(ap.getIds()); //发起人,获取的是用户表里面的主键
				fw.setCtime(new Date()); //直接用当前时间即可
				fw.setFid(fid);  //获取的是流程表里面的主键
				fw.setIsover(0);  //是否结束的话,设为0,为已结束
				fw.setTowhere(1);  //下一步审批人先设为1
				int re_fint = flowkMapper.insert(fw); 
			
				//添加流程运行表flowrun的内容
				int i = flowrunMapper.insertrun(fw.getIds(),fid);
				
				//判断是否添加成功
				if(re_fint > 0&& i > 0) {
					  return true;
				}
				return false;
		}

FlowServiceImpl

@Repository
public class FlowServiceImpl implements FlowService {
         @Autowired
         private FlowMapper flowMapper;
         
         @Autowired
         private FlowtempMapper flowTempMapper;
	@Override
	public boolean cretateFlow(String suids, String fname) {  //创建流程
		 //实例化流程表对象
		Flow flow =  new Flow();
		flow.setFname(fname);  //把前台传过来的名字设置好
		//创建新的流程
		int re_flow = flowMapper.insert(flow);
		int fid = flow.getIds(); //获取流程表里面的主键
		
		//创建新流程对应的模板表
		int re_flowtemp = 0;
		String[] arr_suids = suids.split(","); //把主键分割成字符串数组
		for(int i = 0; i < arr_suids.length; i++) {
			  Flowtemp ft = new Flowtemp();
			  ft.setFid(fid);//主键
			  ft.setOrders(i+1); //序号
			  ft.setTaialer(Integer.parseInt(arr_suids[i]));//设置的是审批人
			  re_flowtemp += flowTempMapper.insert(ft);//为模板表添加数据
		}
		
		//判断是否添加成功
		if (re_flow > 0&& re_flowtemp > 0) {
			     return true;
		}
		
		return false;
	}
	@Override
	public List<Flow> selectAllflow() { //查询全部流程
		
		return flowMapper.selectAllflow();
	}

}

FlowMapper.xml

 <!-- 查询全部的流程 -->
  
  <select id="selectAllflow" resultMap="BaseResultMap">
  		select 
    <include refid="Base_Column_List" />
    from HAHA.FLOW
  </select>
  
  <!-- 为流程表添加数据 -->
  <insert id="insert" parameterType="com.hanqi.model.Flow"
  keyColumn="IDS" keyProperty="ids" useGeneratedKeys="true"><!-- 为了获取流程表里面的主键 -->
    insert into HAHA.FLOW (IDS, FNAME)
    values (sq_test.nextval, #{fname,jdbcType=VARCHAR})
  </insert>

FlowrunMapper.xml

 <!-- 插入数据 -->
  <insert id="insertrun">
  		INSERT INTO flowrun (IDS, FWID, ORDERS, TRIALER)
  		SELECT sq_test.nextval 主键,#{param1} flowk表的主键,
ft.orders 序号,ft.taialer 审批人 FROM flowtemp ft 
WHERE ft.fid = #{param2}
  
  </insert>

 AppuserMapper.xml

 <!-- 根据用户名和密码查询,用来验证登陆 -->
  
  <select id="selectName" parameterType="com.hanqi.model.Appuser" resultMap="BaseResultMap">
  		select
  		<include refid="Base_Column_List" />
  		from appuser a
  		where a.username = #{username} and 
  		a.password = #{password}
  
  </select>
  
  <!-- 查询全部用户信息 -->
  
  <select id="selectAll" resultMap="BaseResultMap">
        select
  		<include refid="Base_Column_List" />
  		from appuser 
  
  </select>

 FlowkMapper.xml

 <!-- 插入数据 -->
  <insert id="insert" parameterType="com.hanqi.model.Flowk" useGeneratedKeys="true" 
  keyColumn="IDS" keyProperty="ids">  <!-- 获取添加的数据后里面的主键 -->
    insert into HAHA.FLOWK (IDS, CTIME, TITLE, 
      BEUSER, TOWHERE, ENDTIME, 
      ISOVER, FID)
    values (sq_test.nextval, #{ctime,jdbcType=TIMESTAMP}, #{title,jdbcType=VARCHAR}, 
      #{beuser,jdbcType=VARCHAR}, #{towhere,jdbcType=DECIMAL}, #{endtime,jdbcType=TIMESTAMP}, 
      #{isover,jdbcType=DECIMAL}, #{fid,jdbcType=DECIMAL})
  </insert>
原文地址:https://www.cnblogs.com/zuo72/p/8521466.html