要出现下面的图片效果:
登录页
<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>