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