package com.sipai.controller.administration; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import net.sf.json.JSONArray; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.impl.pvm.process.ActivityImpl; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.sipai.entity.activiti.WorkTask; import com.sipai.entity.administration.IndexWork; import com.sipai.entity.business.BusinessUnit; import com.sipai.entity.business.BusinessUnitAudit; import com.sipai.entity.business.BusinessUnitHandle; import com.sipai.entity.business.BusinessUnitRecord; import com.sipai.entity.user.Company; import com.sipai.entity.user.User; import com.sipai.service.activiti.WorkflowProcessDefinitionService; import com.sipai.service.activiti.WorkflowService; import com.sipai.service.administration.IndexWorkService; import com.sipai.service.business.BusinessUnitAuditService; import com.sipai.service.business.BusinessUnitHandleService; import com.sipai.service.user.UnitService; import com.sipai.service.user.UserService; import com.sipai.tools.ActivitiUtil; import com.sipai.tools.CommString; import com.sipai.tools.CommUtil; @Controller @RequestMapping("/administration/indexWork") public class IndexWorkController { @Resource private IndexWorkService indexWorkService; @Resource private UnitService unitService; @Resource private WorkflowProcessDefinitionService workflowProcessDefinitionService; @Resource private BusinessUnitHandleService businessUnitHandleService; @Resource private BusinessUnitAuditService businessUnitAuditService; @Resource private WorkflowService workflowService; @Resource private RuntimeService runtimeService; @Resource private TaskService taskService; @Resource private UserService userService; @RequestMapping("/showList.do") public String showList(HttpServletRequest request, Model model) { return "/administration/indexWorkList"; } @RequestMapping("/getList.do") public ModelAndView getList(HttpServletRequest request,Model model, @RequestParam(value = "page") Integer page, @RequestParam(value = "rows") Integer rows, @RequestParam(value = "sort", required = false) String sort, @RequestParam(value = "order", required = false) String order) { User cu = (User) request.getSession().getAttribute("cu"); if (sort==null || sort.equals("id")) { sort = " insdt "; } if (order == null) { order = " desc "; } String orderstr = " order by "+sort+" "+order; String wherestr = " where 1=1 "; if (request.getParameter("search_code")!= null && !request.getParameter("search_code").isEmpty()) { wherestr += " and unit_id = '"+request.getParameter("search_code")+"'"; } PageHelper.startPage(page, rows); List list = this.indexWorkService.selectListByWhere(wherestr+orderstr); PageInfo pInfo = new PageInfo(list); JSONArray jsonArray = JSONArray.fromObject(list); String result = "{\"total\":"+pInfo.getTotal()+",\"rows\":"+jsonArray+"}"; model.addAttribute("result",result); return new ModelAndView("result"); } @RequestMapping("/add.do") public String doadd (HttpServletRequest request,Model model) { String companyId = request.getParameter("companyId"); Company company = this.unitService.getCompById(companyId); String id = company.getEname()+"-ZBKZ-"+CommUtil.nowDate().replaceAll("[[\\s-:punct:]]",""); model.addAttribute("id",id); model.addAttribute("company",company); return "/administration/indexWorkAdd"; } @RequestMapping("/save.do") public String dosave(HttpServletRequest request,Model model, @ModelAttribute IndexWork indexWork) { User cu = (User) request.getSession().getAttribute("cu"); indexWork.setInsdt(CommUtil.nowDate()); indexWork.setInsuser(cu.getId()); int result = this.indexWorkService.save(indexWork); String resultstr = "{\"res\":\""+result+"\",\"id\":\""+indexWork.getId()+"\"}"; model.addAttribute("result",resultstr); return "result"; } @RequestMapping("/delete.do") public String dodelete(HttpServletRequest request,Model model, @RequestParam(value = "id") String id) { int result = this.indexWorkService.deleteById(id); model.addAttribute("result",result); return "result"; } @RequestMapping("/deletes.do") public String dodeletes(HttpServletRequest request,Model model, @RequestParam(value = "ids") String ids){ ids = ids.replace(",","','"); int result = this.indexWorkService.deleteByWhere("where id in ('"+ids+"')"); model.addAttribute("result",result); return "result"; } @RequestMapping("/edit.do") public String doedit(HttpServletRequest request,Model model, @RequestParam(value = "id") String id) { IndexWork indexWork = this.indexWorkService.selectById(id); model.addAttribute("indexWork", indexWork); return "/administration/indexWorkEdit"; } @RequestMapping("/update.do") public String doupdate(HttpServletRequest request,Model model, @ModelAttribute IndexWork indexWork) { User cu = (User) request.getSession().getAttribute("cu"); indexWork.setInsdt(CommUtil.nowDate()); indexWork.setInsuser(cu.getId()); int result = this.indexWorkService.update(indexWork); String resstr="{\"res\":\""+result+"\",\"id\":\""+indexWork.getId()+"\"}"; model.addAttribute("result", resstr); return "result"; } @RequestMapping("/view.do") public String doview(HttpServletRequest request,Model model, @RequestParam(value = "id") String id){ IndexWork indexWork = this.indexWorkService.selectById(id); model.addAttribute("indexWork", indexWork); return "/administration/indexWorkView"; } /** * 更新,启动指标审核流程 * */ @RequestMapping("/startProcess.do") public String dostartProcess(HttpServletRequest request,Model model, @ModelAttribute IndexWork indexWork){ User cu= (User)request.getSession().getAttribute("cu"); indexWork.setInsuser(cu.getId()); indexWork.setInsdt(CommUtil.nowDate()); indexWorkService.update(indexWork); indexWork = indexWorkService.selectById(indexWork.getId()); int result=0; try { result =this.indexWorkService.startProcess(indexWork); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } String resstr="{\"res\":\""+result+"\",\"id\":\""+indexWork.getId()+"\"}"; model.addAttribute("result", resstr); return "result"; } /** * 查看指标处理流程详情 * @param request * @param model * @return */ @RequestMapping("/showProcessIndexWorkView.do") public String showProcessIndexWorkView(HttpServletRequest request,Model model){ String indexWorkId = request.getParameter("id"); IndexWork indexWork = this.indexWorkService.selectById(indexWorkId); request.setAttribute("business", indexWork); List businessUnitRecords = new ArrayList<>(); BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(indexWork); businessUnitRecords.add(businessUnitRecord); List workTasks=workflowProcessDefinitionService.getAllPDTask(indexWork.getProcessdefid(), "desc"); List keys=new ArrayList<>(); for (WorkTask workTask : workTasks) { keys.add(workTask.getTaskKey()); } Set set = new HashSet(); set.addAll(keys); keys=new ArrayList<>(); keys.addAll(set); for (String item : keys) { switch (item) { case BusinessUnit.UNIT_IndexWork_HANDLE: List list = businessUnitHandleService.selectListByWhere("where businessid='"+indexWorkId+"' "); for (BusinessUnitHandle businessUnitHandle : list) { businessUnitRecord = new BusinessUnitRecord(businessUnitHandle); businessUnitRecords.add(businessUnitRecord); } break; case BusinessUnit.UNIT_IndexWork_AUDIT: List list_audit = businessUnitAuditService.selectListByWhere("where businessid='"+indexWorkId+"' "); for (BusinessUnitAudit businessUnitAudit : list_audit) { businessUnitRecord = new BusinessUnitRecord(businessUnitAudit); businessUnitRecords.add(businessUnitRecord); } break; default: break; } } //展示最新任务是否签收 String processId = indexWork.getProcessid(); List list=this.workflowService.getHistoryService() // 历史相关Service .createHistoricTaskInstanceQuery() // 创建历史任务实例查询 .processInstanceId(processId) // 用流程实例id查询 .list(); for (HistoricTaskInstance task : list) { if (task.getAssignee()==null || task.getClaimTime()==null) { continue; } businessUnitRecord = new BusinessUnitRecord(task); businessUnitRecords.add(businessUnitRecord); } Collections.sort(businessUnitRecords, new Comparator() { public int compare(BusinessUnitRecord o1, BusinessUnitRecord o2) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try{ Date dt1 = df.parse(o1.getInsdt()); Date dt2 = df.parse(o2.getInsdt()); if (dt1.getTime() > dt2.getTime()) { return 1; } else if (dt1.getTime() < dt2.getTime()) { return -1; } else { return 0; } }catch(Exception e){ e.printStackTrace(); return 0; } } }); JSONArray jsonArray =JSONArray.fromObject(businessUnitRecords); model.addAttribute("businessUnitRecords",jsonArray); //检测流程实例是否结束,结束则历史记录最后节点变化 long num =runtimeService.createProcessInstanceQuery().processInstanceId(indexWork.getProcessid()).count(); if(num>0){ model.addAttribute("finishFlag", false); }else{ model.addAttribute("finishFlag", true); } if(request.getParameter("inModal")!=null){ //判断显示在流程处理模态框右侧 return "administration/indexWorkExecuteViewInModal"; }else{ return "administration/indexWorkExecuteView"; } } /** * 显示指标审核 * */ @RequestMapping("/showAuditIndexWork.do") public String showAuditIndexWork(HttpServletRequest request,Model model){ String taskId = request.getParameter("taskId"); String processInstanceId = request.getParameter("processInstanceId"); BusinessUnitAudit businessUnitAudit=new BusinessUnitAudit(); Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult(); model.addAttribute("taskName", task.getName()); businessUnitAudit.setId(CommUtil.getUUID()); businessUnitAudit.setProcessid(processInstanceId); businessUnitAudit.setTaskid(taskId); ProcessInstance pInstance=runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); businessUnitAudit.setBusinessid(pInstance.getBusinessKey()); businessUnitAudit.setTaskdefinitionkey(task.getTaskDefinitionKey()); model.addAttribute("businessUnitAudit", businessUnitAudit); String indexWorkId= pInstance.getBusinessKey(); IndexWork indexWork = this.indexWorkService.selectById(indexWorkId); model.addAttribute("indexWork", indexWork); //获取任务下一节点,若为任务节点,则显示目标用户div,否则不显示 List activityImpls=workflowProcessDefinitionService.getNEXTActivities(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); if (activityImpls.size()>0) { model.addAttribute("showTargetUsersFlag", true); }else{ model.addAttribute("showTargetUsersFlag", false); } return "administration/indexWorkAudit"; } /** * 流程流转 * */ @RequestMapping("/AuditIndexWork.do") public String doAuditIndexWork(HttpServletRequest request,Model model, @ModelAttribute BusinessUnitAudit businessUnitAudit){ User cu= (User)request.getSession().getAttribute("cu"); int result=0; businessUnitAudit.setInsuser(cu.getId()); businessUnitAudit.setInsdt(CommUtil.nowDate()); result =this.indexWorkService.doAudit(businessUnitAudit); String resstr="{\"res\":\""+result+"\",\"id\":\""+businessUnitAudit.getId()+"\"}"; model.addAttribute("result", resstr); return "result"; } /** * 显示指标业务处理 * */ @RequestMapping("/showIndexWorkHandle.do") public String showIndexWorkHandle(HttpServletRequest request,Model model){ String taskId = request.getParameter("taskId"); String processInstanceId = request.getParameter("processInstanceId"); String unitId = request.getParameter("unitId"); ProcessInstance pInstance=runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); BusinessUnitHandle businessUnitHandle = new BusinessUnitHandle(); Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult(); model.addAttribute("taskName", task.getName()); List businessUnitHandles = this.businessUnitHandleService.selectListByWhere("where processid='"+processInstanceId+"' and taskId='"+taskId+"'"); if(businessUnitHandles!= null && businessUnitHandles.size()>0){ businessUnitHandle = businessUnitHandles.get(0); //若任务退回后,需更新新的任务id businessUnitHandle.setTaskid(taskId); }else{ businessUnitHandle.setId(CommUtil.getUUID()); businessUnitHandle.setProcessid(processInstanceId); businessUnitHandle.setTaskid(taskId); businessUnitHandle.setBusinessid(pInstance.getBusinessKey()); businessUnitHandle.setTaskdefinitionkey(task.getTaskDefinitionKey()); businessUnitHandle.setUnitid(unitId); } String userIds = businessUnitHandle.getTargetusers(); if(userIds!= null && !userIds.isEmpty()){ List users = userService.selectListByWhere("where id in('"+userIds.replace(",", "','")+"')"); String targetUsersName =""; for (User user : users) { if(!targetUsersName.isEmpty()){ targetUsersName+=","; } targetUsersName+=user.getCaption(); } model.addAttribute("targetUsersName", targetUsersName); } model.addAttribute("businessUnitHandle", businessUnitHandle); model.addAttribute("nowDate", CommUtil.nowDate()); String indexWorkId = pInstance.getBusinessKey(); IndexWork indexWork = this.indexWorkService.selectById(indexWorkId); List list = this.businessUnitAuditService.selectListByWhere("where businessId = '"+indexWorkId+"' order by insdt desc "); if(list!=null && list.size()>0){ model.addAttribute("businessUnitAudit", list.get(0)); } model.addAttribute("indexWork", indexWork); return "administration/indexWorkHandle"; } /** * 流程流程,指标业务处理提交 * */ @RequestMapping("/submitIndexWorkHandle.do") public String dosubmitIndexWorkHandle(HttpServletRequest request,Model model, @ModelAttribute BusinessUnitHandle businessUnitHandle){ String routeNum=request.getParameter("routeNum"); User cu= (User)request.getSession().getAttribute("cu"); int result=0; if(!this.businessUnitHandleService.checkExit(businessUnitHandle)) { businessUnitHandle.setInsuser(cu.getId()); businessUnitHandle.setInsdt(CommUtil.nowDate()); result =this.businessUnitHandleService.save(businessUnitHandle); }else { result =this.businessUnitHandleService.update(businessUnitHandle); } try { Map variables = new HashMap(); variables =ActivitiUtil.fixVariableWithRoute(variables, true, routeNum); variables.put(CommString.ACTI_KEK_Candidate_Users, businessUnitHandle.getTargetusers()); variables.put(CommString.ACTI_KEK_Assignee, null); taskService.complete(businessUnitHandle.getTaskid(), variables); //发送消息 if(businessUnitHandle.getTargetusers()!=null && !businessUnitHandle.getTargetusers().isEmpty()){ //补全所有字段信息 businessUnitHandle = businessUnitHandleService.selectById(businessUnitHandle.getId()); BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(businessUnitHandle); businessUnitRecord.sendMessage(businessUnitHandle.getTargetusers(),""); } this.indexWorkService.updateStatus(businessUnitHandle.getBusinessid()); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); result=0; } String resstr="{\"res\":\""+result+"\",\"id\":\""+businessUnitHandle.getId()+"\"}"; model.addAttribute("result", resstr); return "result"; } }