org.activiti
activiti-engine
5.17.0
首先引入一个工作流的jar包
下面是主播申请表的entity
/**
* Copyright © 2015-2020 JeePlus All rights reserved.
*/
package com.jeeplus.modules.zdcj.entity;
import java.util.Map;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import com.jeeplus.common.persistence.DataEntity;
import com.jeeplus.common.utils.excel.annotation.ExcelField;
/**
* 申请主播Entity
* @author ywj
* @version 2016-12-22
*/
public class ZdcjApply extends DataEntity {
private static final long serialVersionUID = 1L;
private String userId;// 用户ID
private String name;// 真实姓名
private String mobile;// 手机号
private String qq;// QQ
private String email;// 邮箱
private String applystatus;// 状态
private String processInstanceId;//流程定义id
//-- 临时属性 --//
// 流程任务
private Task task;
private Map variables;
// 运行中的流程实例
private ProcessInstance processInstance;
// 历史的流程实例
private HistoricProcessInstance historicProcessInstance;
// 流程定义
private ProcessDefinition processDefinition;
@ExcelField(title="流程实例id", align=2, sort=13)
public String getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(String processInstanceId) {
this.processInstanceId = processInstanceId;
}
public Task getTask() {
return task;
}
public void setTask(Task task) {
this.task = task;
}
public Map getVariables() {
return variables;
}
public void setVariables(Map variables) {
this.variables = variables;
}
public ProcessInstance getProcessInstance() {
return processInstance;
}
public void setProcessInstance(ProcessInstance processInstance) {
this.processInstance = processInstance;
}
public HistoricProcessInstance getHistoricProcessInstance() {
return historicProcessInstance;
}
public void setHistoricProcessInstance(
HistoricProcessInstance historicProcessInstance) {
this.historicProcessInstance = historicProcessInstance;
}
public ProcessDefinition getProcessDefinition() {
return processDefinition;
}
public void setProcessDefinition(ProcessDefinition processDefinition) {
this.processDefinition = processDefinition;
}
public ZdcjApply() {
super();
}
public ZdcjApply(String id){
super(id);
}
@ExcelField(title="用户ID", align=2, sort=1)
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@ExcelField(title="真实姓名", align=2, sort=2)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ExcelField(title="手机号", align=2, sort=3)
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@ExcelField(title="QQ", align=2, sort=4)
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
@ExcelField(title="邮箱", align=2, sort=5)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@ExcelField(title="状态", dictType="apply_status", align=2, sort=6)
public String getApplystatus() {
return applystatus;
}
public void setApplystatus(String applystatus) {
this.applystatus = applystatus;
}
}
下面是工作流的操作
1 /**
2 * Copyright © 2015-2020 JeePlus All rights reserved.3 */
4 packagecom.jeeplus.modules.zdcj.service;5
6 importjava.io.InputStream;7 importjava.util.HashMap;8 importjava.util.List;9 importjava.util.Map;10
11 importorg.activiti.engine.ProcessEngine;12 importorg.activiti.engine.ProcessEngines;13 importorg.activiti.engine.repository.Deployment;14 importorg.activiti.engine.runtime.ProcessInstance;15 importorg.activiti.engine.task.Task;16 importorg.junit.Test;17 importorg.springframework.beans.factory.annotation.Autowired;18 importorg.springframework.stereotype.Service;19 importorg.springframework.transaction.annotation.Transactional;20
21 importcom.jeeplus.common.persistence.Page;22 importcom.jeeplus.common.service.CrudService;23 importcom.jeeplus.modules.zdcj.entity.ZdcjApply;24 importcom.jeeplus.modules.zdcj.dao.ZdcjApplyDao;25
26 /**
27 * 申请主播Service28 *@authorjzp29 *@version2016-12-2630 */
31 @Service32 @Transactional(readOnly = false)33 public classCactivitiService{34
35 @Autowired36 privateZdcjApplyService zdcjApplyService;37
38 ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();39
40 /**
41 * 部署流程定义(从inputStream)42 */
43 publicString save_inputStream(String nn){44 try{45 InputStream bp = this.getClass().getResourceAsStream("/diagrams/ZdcjApply.bpmn");46 InputStream png = this.getClass().getResourceAsStream("/diagrams/ZdcjApply.png");47 Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
48 .createDeployment()//创建一个部署对象
49 .name("申请主播")//添加部署的名称
50 .addInputStream("ZdcjApply.bpmn", bp)51 .addInputStream("ZdcjApply.png", png)52 .deploy();//完成部署流程定义
53 return "true";54 } catch(Exception e) {55 e.printStackTrace();56 return "false";57 }58 }59
60 /**
61 * 启动流程实例62 */
63 public voidstartProc(ZdcjApply zdcjApply){64 zdcjApplyService.save(zdcjApply);//保存
65 String processKey="ZdcjApply";66 String keyid=zdcjApply.getId();67 //流程定义的id
68 ProcessInstance processInstance = null;69 processInstance = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service
70 .startProcessInstanceByKey(processKey,keyid);//使用流程实例定义的key启动流程实例。key对应helloword.bpmn文件中id的属性值
71 System.out.println("流程实例的id:"+processInstance.getId());//流程实例的id 801
72 System.out.println("流程定义的id:"+processInstance.getProcessDefinitionId());//流程定义的id helloWord:1:704
73 String processInstanceId =processInstance.getId();74 zdcjApply.setProcessInstanceId(processInstanceId);75 zdcjApplyService.save(zdcjApply);//保存
76 }77
78 /**
79 * 完成我的任务80 */
81 public voidcompleteMyPer(String taskid,String key,Boolean message,String name){82 //完成任务的同时 设置流程变量 使用流程变量用来指定完成任务后 下一个连线 对应sequenceFlow.bpmn文件中的 ${message=='不重要'}
83 Map map=newHashMap();84 map.put(key, message);85 map.put("applyUserId", name);86 /*variables = new HashMap();87 variables.put("deptLeaderPass", true);*/
88 processEngine.getTaskService()//与正在执行任务管理相关的service
89 .complete(taskid, map);90 System.out.println("完成任务,任务id是:"+taskid);91 /*if("dirPass".equals(key) && true==message){92 Map map2=new HashMap();93 map2.put(key, message);94 processEngine.getTaskService()//与正在执行任务管理相关的service95 .complete(taskid, map2);96 }97 System.out.println("完成任务,任务id是:"+taskid);*/
98 }99
100 /**
101 * 查询当前人的个人任务102 */
103 @Test104 public ListfindMyPer(Map map){105 String assignee = (String) map.get("assignee");106 if(null!=map.get("instanceId") && !"".equals(map.get("instanceId"))){107 List list = processEngine.getTaskService()//与正在执行任务管理相关的service
108 .createTaskQuery()//创建任务查询对象
109 /**查询条件 where*/
110 //.taskAssignee(assignee)//指定个人任务查询,指定办理人
111 .processInstanceId(""+map.get("instanceId"))//使用流程实例的id查询
112 /**排序*/
113 .orderByTaskCreateTime().desc()//创建时间的倒叙排列
114 .list();//返回一个list集合,分装流程定义
115 /*if(list!=null && list.size()>0){116 for (Task task : list) {117 System.out.println("任务id:"+task.getId());118 System.out.println("任务名称:"+task.getName());119 System.out.println("任务创建时间:"+task.getCreateTime());120 System.out.println("任务办理人:"+task.getAssignee());121 System.out.println("流程实例id:"+task.getProcessInstanceId());122 System.out.println("执行对象id:"+task.getExecutionId());123 System.out.println("流程定义id:"+task.getProcessDefinitionId());124 System.out.println("#####################################");125 }126 }*/
127 returnlist;128 }else{129 return null;130 }131 }132
133 public voidclaim(String tkid, String userId) {134 processEngine.getTaskService()135 .claim(tkid, userId);136 }137
138 /**
139 * 删除流程140 */
141 public voiddeleteProcessInstance() {142 //processEngine.getExecutionService();143 //ProcessInstance processInstance = executionService.startProcessInstanceByKey("helloworld");144 //executionService.deleteProcessInstanceCascade(processInstance.getId());
145 }146 }
下面是审核流程,流程为 用户申请主播→(申请成功)→客服审核→(审核成功)→客服主管审核→(审核成功)→用户成为主播。
如果客服或者客服主管审核未通过,则返回过去,重新调整申请,最后结束流程。
1 /**
2 * Copyright © 2015-2020 JeePlus All rights reserved.3 */
4 packagecom.jeeplus.modules.zdcj.web;5
6 importjava.io.InputStream;7 importjava.util.HashMap;8 importjava.util.List;9 importjava.util.Map;10
11 importjavax.servlet.http.HttpServletRequest;12 importjavax.servlet.http.HttpServletResponse;13 importjavax.servlet.http.HttpSession;14 importjavax.validation.ConstraintViolationException;15
16
17 importorg.apache.shiro.authz.annotation.Logical;18 importorg.apache.shiro.authz.annotation.RequiresPermissions;19 importorg.junit.Test;20 importorg.springframework.beans.factory.annotation.Autowired;21 importorg.springframework.stereotype.Controller;22 importorg.springframework.ui.Model;23 importorg.springframework.web.bind.annotation.ModelAttribute;24 importorg.springframework.web.bind.annotation.PathVariable;25 importorg.springframework.web.bind.annotation.RequestMapping;26 importorg.springframework.web.bind.annotation.RequestMethod;27 importorg.springframework.web.bind.annotation.RequestParam;28 importorg.springframework.web.bind.annotation.ResponseBody;29 importorg.springframework.web.multipart.MultipartFile;30 importorg.springframework.web.servlet.mvc.support.RedirectAttributes;31
32 importcom.google.common.collect.Lists;33 importcom.google.common.collect.Maps;34 importcom.jeeplus.common.utils.DateUtils;35 importcom.jeeplus.common.utils.MyBeanUtils;36 importcom.jeeplus.common.config.Global;37 importcom.jeeplus.common.persistence.Page;38 importcom.jeeplus.common.web.BaseController;39 importcom.jeeplus.common.utils.StringUtils;40 importcom.jeeplus.common.utils.excel.ExportExcel;41 importcom.jeeplus.common.utils.excel.ImportExcel;42 importcom.jeeplus.modules.sys.entity.Role;43 importcom.jeeplus.modules.sys.entity.User;44 importcom.jeeplus.modules.sys.security.SystemAuthorizingRealm.Principal;45 importcom.jeeplus.modules.sys.service.SystemService;46 importcom.jeeplus.modules.sys.utils.UserUtils;47 importcom.jeeplus.modules.zdcj.entity.ZdcjApply;48 importcom.jeeplus.modules.zdcj.service.CactivitiService;49 importcom.jeeplus.modules.zdcj.service.ZdcjApplyService;50 importcom.jeeplus.modules.zdcj.service.ZdcjUserService;51
52 importorg.activiti.engine.ProcessEngine;53 importorg.activiti.engine.ProcessEngines;54 importorg.activiti.engine.repository.Deployment;55 importorg.activiti.engine.repository.ProcessDefinition;56 importorg.activiti.engine.runtime.ProcessInstance;57 importorg.activiti.engine.task.Task;58
59 /**
60 * 申请主播Controller61 *@authorywj62 *@version2016-12-2263 */
64 @Controller65 @RequestMapping(value = "${adminPath}/zdcj/zdcjApply")66 public class ZdcjApplyController extendsBaseController {67
68 @Autowired69 privateZdcjApplyService zdcjApplyService;70
71 @Autowired72 privateCactivitiService cactivitiService;73
74 @Autowired75 privateSystemService systemService;76
77 ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();78
79 @ModelAttribute80 public ZdcjApply get(@RequestParam(required=false) String id) {81 ZdcjApply entity = null;82 if(StringUtils.isNotBlank(id)){83 entity =zdcjApplyService.get(id);84 }85 if (entity == null){86 entity = newZdcjApply();87 }88 returnentity;89 }90
91 /**
92 * 申请信息列表页面93 */
94 @RequiresPermissions("zdcj:zdcjApply:list")95 @RequestMapping(value = {"list", ""})96 publicString list(ZdcjApply zdcjApply, HttpServletRequest request, HttpServletResponse response, Model model) {97 Page page = zdcjApplyService.findPage(new Page(request, response), zdcjApply);98 List aj=page.getList();99 for(ZdcjApply aa : aj) {100 Map map=newHashMap();101 map.put("instanceId", aa.getProcessInstanceId());102 List tk=cactivitiService.findMyPer(map);103 if(tk!=null && tk.size()>0){104 aa.setTask(tk.get(0));105 }106 }107 model.addAttribute("page", page);108 return "modules/zdcj/zdcjApplyList";109 }110
111 /**
112 * 查看,增加,编辑申请信息表单页面113 */
114 @RequiresPermissions(value={"zdcj:zdcjApply:view","zdcj:zdcjApply:add","zdcj:zdcjApply:edit"},logical=Logical.OR)115 @RequestMapping(value = "form")116 publicString form(ZdcjApply zdcjApply, Model model) {117 model.addAttribute("zdcjApply", zdcjApply);118 return "modules/zdcj/zdcjApplyForm";119 }120
121 /**
122 * 保存申请信息123 */
124 @RequiresPermissions(value={"zdcj:zdcjApply:add","zdcj:zdcjApply:edit"},logical=Logical.OR)125 @RequestMapping(value = "save")126 publicString save(ZdcjApply zdcjApply, Model model, RedirectAttributes redirectAttributes,127 HttpServletRequest request, HttpServletResponse response) throwsException{128 Principal principal =UserUtils.getPrincipal();129 String tongyi=request.getParameter("tongyi");130 tongyi=tongyi+"";131 //是否同意 true 同意, FALSE 不同意
132 Boolean message=false;133 if(tongyi.equals("同意")){134 message=true;135 }else if(tongyi.equals("不同意")){136 message=false;137 }138 if (!beanValidator(model, zdcjApply)){139 returnform(zdcjApply, model);140 }141 if(!zdcjApply.getIsNewRecord()){//编辑表单保存
142
143 User r=systemService.getUser(principal.getId());144
145 String rname=r.getRoleList().get(0).getEnname();146 if(null!=rname && !"".equals(rname)){147 }else{148 addMessage(redirectAttributes, "抱歉 审核失败");149 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";150 }151
152 if(zdcjApply.getProcessInstanceId()!=null && !"".equals(zdcjApply.getProcessInstanceId())){153 Map map=newHashMap();154 map.put("instanceId", zdcjApply.getProcessInstanceId());155 List tk=cactivitiService.findMyPer(map);156 if(tk.get(0).getTaskDefinitionKey().equals("CustomerService")){157 User rs=systemService.getUser(zdcjApply.getUserId());158 System.out.println("客服审批");159 if(rname.equals("kefu")){160 cactivitiService.completeMyPer(tk.get(0).getId() ,"deptLeaderPass", message,rs.getName());161 addMessage(redirectAttributes, "审核成功");162 }else{163 addMessage(redirectAttributes, "抱歉 审核失败");164 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";165 }166 }else if(tk.size()>0 && tk.get(0).getTaskDefinitionKey().equals("director")){167 System.out.println("主管审批");168 User rs=systemService.getUser(zdcjApply.getUserId());169 if(rname.equals("kfadmin")){170 cactivitiService.completeMyPer(tk.get(0).getId() ,"dirPass", message,rs.getName());171 if(message==true){172 zdcjApply.setApplystatus("1");173 zdcjApplyService.save(zdcjApply);//保存
174 addMessage(redirectAttributes, "审核成功,申请通过");175 }else{176 addMessage(redirectAttributes, "审核成功,调整申请");177 }178 }else{179 addMessage(redirectAttributes, "抱歉 审核失败");180 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";181 }182 }else if(tk.size()>0 && tk.get(0).getTaskDefinitionKey().equals("modifyApply")){183 System.out.println("调整申请");184 if(true){185 cactivitiService.completeMyPer(tk.get(0).getId() ,"reApply", message,principal.getName());186 if(message==true){187 zdcjApplyService.save(zdcjApply);//保存
188 addMessage(redirectAttributes, "重新提交成功");189 }else{190 zdcjApply.setApplystatus("2");191 zdcjApplyService.save(zdcjApply);//保存
192 addMessage(redirectAttributes, "审核结束,申请未通过");193 }194 }/*else{195 addMessage(redirectAttributes, "抱歉 审核失败");196 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";197 }*/
198 }else{199 addMessage(redirectAttributes, "抱歉 审核失败");200 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";201 }202 }else{203 addMessage(redirectAttributes, "抱歉 审核失败");204 }205
206 }else{//新增表单保存
207 try{208 zdcjApply.setUserId(principal.getId());209 //流程定义的id
210 if(null==zdcjApply.getApplystatus() || "".equals(zdcjApply.getApplystatus())){211 zdcjApply.setApplystatus("0");212 }213 cactivitiService.startProc(zdcjApply);214 addMessage(redirectAttributes, "提交申请成功");215 } catch(Exception e) {216 addMessage(redirectAttributes, "提交申请失败,您可能没有部署流程定义");217 e.printStackTrace();218 }219 }220
221 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";222 }223
224 /**
225 * 部署流程信息226 */
227 @RequiresPermissions("zdcj:zdcjApply:add")228 @RequestMapping(value = "bushu")229 publicString bushu(ZdcjApply zdcjApply, RedirectAttributes redirectAttributes) {230 try{231 String name="";//zdcjApply.getName();
232 String aa=cactivitiService.save_inputStream(name);233 addMessage(redirectAttributes, "部署成功");234
235 } catch(Exception e) {236 addMessage(redirectAttributes, "部署失败");237 e.printStackTrace();238 }239 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";240 }241
242 /**
243 * 签收任务244 */
245 @RequiresPermissions("zdcj:zdcjApply:edit")246 @RequestMapping(value = "qianshou")247 publicString qianshou(ZdcjApply zdcjApply, RedirectAttributes redirectAttributes) {248 Principal principal =UserUtils.getPrincipal();249 String userId =principal.getName();250
251 //判断角色
252 User r=systemService.getUser(principal.getId());253
254 String rname=r.getRoleList().get(0).getEnname();255 if(null!=rname && !"".equals(rname)){256 }else{257 addMessage(redirectAttributes, "您不能该签收任务");258 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";259 }260
261
262 if(zdcjApply.getProcessInstanceId()!=null && !"".equals(zdcjApply.getProcessInstanceId())){263 Map map=newHashMap();264 map.put("instanceId", zdcjApply.getProcessInstanceId());265 List tk=cactivitiService.findMyPer(map);266 if(tk.size()>0 && tk.get(0).getTaskDefinitionKey().equals("CustomerService")){267 System.out.println("客服审批");268 if(rname.equals("kefu")){269 cactivitiService.claim(tk.get(0).getId(), userId);270 addMessage(redirectAttributes, "任务已签收");271 }else{272 addMessage(redirectAttributes, "您不能签收该任务");273 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";274 }275 }else if(tk.size()>0 && tk.get(0).getTaskDefinitionKey().equals("director")){276 System.out.println("主管审批");277 if(rname.equals("kfadmin")){278 cactivitiService.claim(tk.get(0).getId(), userId);279 addMessage(redirectAttributes, "任务已签收");280 }else{281 addMessage(redirectAttributes, "您不能该签收任务");282 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";283 }284 }else{285 addMessage(redirectAttributes, "您不能该签收任务");286 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";287 }288 }else{289 addMessage(redirectAttributes, "任务签收失败");290 }291
292 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";293 }294
295 /**
296 * APP接口调用 查询流程进度297 */
298 @ResponseBody299 @RequestMapping(value = "app_queryActiviti")300 public Map app_queryActiviti( @RequestParam(required=false)String id301 ,HttpServletRequest request, HttpServletResponse response, Model model) {302 Map map = null;303 try{304 map =Maps.newHashMap();305 if (null==id || "".equals(id)) {306 map.put("stauts", "1");307 map.put("message", "查询错误 :系统参数异常");308 }else{309 ZdcjApply zj=zdcjApplyService.get(id);310 Map map2=newHashMap();311 map2.put("instanceId", zj.getProcessInstanceId());312 Task task=cactivitiService.findMyPer(map2).get(0);313 //zj.setTask(tk.get(0));
314 map.put("stauts", "0");315 map.put("message", "查询成功");316 Map map3=newHashMap();317 map3.put("zdcjApply", zj);318 map3.put("taskId", task.getId());319 map3.put("taskName", task.getName());//任务节点
320 map3.put("taskCreateTime", task.getCreateTime());//任务创建时间
321 map3.put("taskAssignee", task.getAssignee());//任务办理人322 //map3.put("processInstanceId", task.getProcessInstanceId());//流程实例id
323 map3.put("executionId", task.getExecutionId());//执行对象id
324 map3.put("processDefinitionId", task.getProcessDefinitionId());//流程定义id
325 map.put("data", map3);326 }327 } catch(Exception e) {328 e.printStackTrace();329 map.put("stauts", "1");330 map.put("message", "查询错误 ");331 }332
333 returnmap;334 }335
336 /**
337 * 删除申请信息338 */
339 @RequiresPermissions("zdcj:zdcjApply:del")340 @RequestMapping(value = "delete")341 publicString delete(ZdcjApply zdcjApply, RedirectAttributes redirectAttributes) {342 /*processEngine.getRepositoryService()343 .deleteDeployment("45012",true);//删除流程定义*/
344 zdcjApplyService.delete(zdcjApply);345 addMessage(redirectAttributes, "删除申请信息成功");346 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";347 }348
349 /**
350 * 批量删除申请信息351 */
352 @RequiresPermissions("zdcj:zdcjApply:del")353 @RequestMapping(value = "deleteAll")354 publicString deleteAll(String ids, RedirectAttributes redirectAttributes) {355 String idArray[] =ids.split(",");356 for(String id : idArray){357 zdcjApplyService.delete(zdcjApplyService.get(id));358 }359 addMessage(redirectAttributes, "删除申请信息成功");360 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";361 }362
363 /**
364 * 导出excel文件365 */
366 @RequiresPermissions("zdcj:zdcjApply:export")367 @RequestMapping(value = "export", method=RequestMethod.POST)368 publicString exportFile(ZdcjApply zdcjApply, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {369 try{370 String fileName = "申请信息"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";371 Page page = zdcjApplyService.findPage(new Page(request, response, -1), zdcjApply);372 new ExportExcel("申请信息", ZdcjApply.class).setDataList(page.getList()).write(response, fileName).dispose();373 return null;374 } catch(Exception e) {375 addMessage(redirectAttributes, "导出申请信息记录失败!失败信息:"+e.getMessage());376 }377 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";378 }379
380 /**
381 * 导入Excel数据382
383 */
384 @RequiresPermissions("zdcj:zdcjApply:import")385 @RequestMapping(value = "import", method=RequestMethod.POST)386 publicString importFile(MultipartFile file, RedirectAttributes redirectAttributes) {387 try{388 int successNum = 0;389 int failureNum = 0;390 StringBuilder failureMsg = newStringBuilder();391 ImportExcel ei = new ImportExcel(file, 1, 0);392 List list = ei.getDataList(ZdcjApply.class);393 for(ZdcjApply zdcjApply : list){394 try{395 zdcjApplyService.save(zdcjApply);396 successNum++;397 }catch(ConstraintViolationException ex){398 failureNum++;399 }catch(Exception ex) {400 failureNum++;401 }402 }403 if (failureNum>0){404 failureMsg.insert(0, ",失败 "+failureNum+" 条申请信息记录。");405 }406 addMessage(redirectAttributes, "已成功导入 "+successNum+" 条申请信息记录"+failureMsg);407 } catch(Exception e) {408 addMessage(redirectAttributes, "导入申请信息失败!失败信息:"+e.getMessage());409 }410 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";411 }412
413 /**
414 * 下载导入申请信息数据模板415 */
416 @RequiresPermissions("zdcj:zdcjApply:import")417 @RequestMapping(value = "import/template")418 publicString importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {419 try{420 String fileName = "申请信息数据导入模板.xlsx";421 List list =Lists.newArrayList();422 new ExportExcel("申请信息数据", ZdcjApply.class, 1).setDataList(list).write(response, fileName).dispose();423 return null;424 } catch(Exception e) {425 addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());426 }427 return "redirect:"+Global.getAdminPath()+"/zdcj/zdcjApply/?repage";428 }429
430
431
432
433 }
下面是流程图
1 <?xml version="1.0" encoding="UTF-8"?>
2
3
4 客户申请主播
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
最后sql也贴出来吧
1 <?xml version="1.0" encoding="UTF-8" ?>
2
3
4
5
6 a.id AS "id",7 a.user_id AS "userId",8 a.name AS "name",9 a.mobile AS "mobile",10 a.qq AS "qq",11 a.email AS "email",12 a.applystatus AS "applystatus",13 a.create_by AS "createBy.id",14 a.create_date AS "createDate",15 a.update_by AS "updateBy.id",16 a.update_date AS "updateDate",17 a.remarks AS "remarks",18 a.del_flag AS "delFlag",19 a.process_instance_id AS "processInstanceId"
20
21
22
23
24
25
26
27 SELECT28
29 FROM zdcj_apply a30
31 WHERE a.id =#{id}32
33
34
35 SELECT36
37 FROM zdcj_apply a38
39
40 a.del_flag =#{DEL_FLAG_NORMAL}41
42 AND a.name LIKE43 '%'||#{name}||'%'
44 '%'+#{name}+'%'
45 concat('%',#{name},'%')
46
47
48 AND a.mobile LIKE49 '%'||#{mobile}||'%'
50 '%'+#{mobile}+'%'
51 concat('%',#{mobile},'%')
52
53
54 AND a.qq LIKE55 '%'||#{qq}||'%'
56 '%'+#{qq}+'%'
57 concat('%',#{qq},'%')
58
59
60 AND a.email LIKE61 '%'||#{email}||'%'
62 '%'+#{email}+'%'
63 concat('%',#{email},'%')
64
65
66 AND a.applystatus =#{applystatus}67
68
69 AND a.create_date =#{createDate}70
71
72
73
74 ORDER BY ${page.orderBy}75
76
77 ORDER BY a.update_date DESC78
79
80
81
82
83 SELECT84
85 FROM zdcj_apply a86
87
88 a.del_flag =#{DEL_FLAG_NORMAL}89
90
91
92 ORDER BY ${page.orderBy}93
94
95 ORDER BY a.update_date DESC96
97
98
99
100
101 INSERT INTO zdcj_apply(102 id,103 user_id,104 name,105 mobile,106 qq,107 email,108 applystatus,109 create_by,110 create_date,111 update_by,112 update_date,113 remarks,114 del_flag,115 process_instance_id116 ) VALUES (117 #{id},118 #{userId},119 #{name},120 #{mobile},121 #{qq},122 #{email},123 #{applystatus},124 #{createBy.id},125 #{createDate},126 #{updateBy.id},127 #{updateDate},128 #{remarks},129 #{delFlag},130 #{processInstanceId}131 )132
133
134
135 UPDATE zdcj_apply SET136 user_id =#{userId},137 name =#{name},138 mobile =#{mobile},139 qq =#{qq},140 email =#{email},141 applystatus =#{applystatus},142 update_by =#{updateBy.id},143 update_date =#{updateDate},144 remarks =#{remarks},145 process_instance_id =#{processInstanceId}146 WHERE id =#{id}147
148
149
150
151
152 DELETE FROM zdcj_apply153 WHERE id =#{id}154
155
156
157
158 UPDATE zdcj_apply SET159 del_flag =#{DEL_FLAG_DELETE}160 WHERE id =#{id}161
162
163
164
165
166 select * FROM zdcj_apply where ${propertyName} = '${value}'
167
168
169