RuTaskController.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package com.zhcs.dt.controller.activiti.rutask;
  2. import java.net.URLDecoder;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.LinkedHashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import javax.annotation.Resource;
  9. import org.apache.shiro.session.Session;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.ResponseBody;
  13. import org.springframework.web.servlet.ModelAndView;
  14. import com.zhcs.dt.controller.activiti.AcBusinessController;
  15. import com.zhcs.dt.entity.Page;
  16. import com.zhcs.dt.service.activiti.hiprocdef.HiprocdefManager;
  17. import com.zhcs.dt.service.activiti.ruprocdef.RuprocdefManager;
  18. //import com.zhcs.dt.service.system.fhsms.FhsmsManager;
  19. import com.zhcs.dt.util.AppUtil;
  20. import com.zhcs.dt.util.Const;
  21. import com.zhcs.dt.util.DateUtil;
  22. import com.zhcs.dt.util.ImageAnd64Binary;
  23. import com.zhcs.dt.util.Jurisdiction;
  24. import com.zhcs.dt.util.PageData;
  25. import com.zhcs.dt.util.PathUtil;
  26. import com.zhcs.dt.util.Tools;
  27. /**
  28. * 说明:待办任务
  29. * 创建人:FH Q313596790
  30. * 修改时间:2018-02-10
  31. */
  32. @Controller
  33. @RequestMapping(value="/rutask")
  34. public class RuTaskController extends AcBusinessController {
  35. String menuUrl = "rutask/list.do"; //菜单地址(权限用)
  36. @Resource(name="ruprocdefService")
  37. private RuprocdefManager ruprocdefService;
  38. @Resource(name="hiprocdefService")
  39. private HiprocdefManager hiprocdefService;
  40. // @Resource(name="fhsmsService")
  41. // private FhsmsManager fhsmsService;
  42. /**待办任务列表
  43. * @param page
  44. * @throws Exception
  45. */
  46. @RequestMapping(value="/list")
  47. public ModelAndView list(Page page) throws Exception{
  48. logBefore(logger, Jurisdiction.getUsername()+"列表待办任务");
  49. //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
  50. ModelAndView mv = this.getModelAndView();
  51. PageData pd = new PageData();
  52. pd = this.getPageData();
  53. String keywords = pd.getString("keywords"); //关键词检索条件
  54. if(null != keywords && !"".equals(keywords)){
  55. pd.put("keywords", keywords.trim());
  56. }
  57. String lastStart = pd.getString("lastStart"); //开始时间
  58. String lastEnd = pd.getString("lastEnd"); //结束时间
  59. if(lastStart != null && !"".equals(lastStart)){
  60. pd.put("lastStart", lastStart+" 00:00:00");
  61. }
  62. if(lastEnd != null && !"".equals(lastEnd)){
  63. pd.put("lastEnd", lastEnd+" 00:00:00");
  64. }
  65. pd.put("USERNAME", Jurisdiction.getUsername()); //查询当前用户的任务(用户名查询)
  66. pd.put("RNUMBERS", Jurisdiction.getRnumbers()); //查询当前用户的任务(角色编码查询)
  67. page.setPd(pd);
  68. List<PageData> varList = ruprocdefService.list(page); //列出Rutask列表
  69. for(int i=0;i<varList.size();i++){
  70. varList.get(i).put("INITATOR", getInitiator(varList.get(i).getString("PROC_INST_ID_")));//流程申请人
  71. }
  72. mv.setViewName("activiti/rutask/rutask_list");
  73. mv.addObject("varList", varList);
  74. mv.addObject("pd", pd);
  75. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  76. return mv;
  77. }
  78. /**待办任务列表(只显示5条,用于后台顶部小铃铛左边显示)
  79. * @param page
  80. * @return
  81. * @throws Exception
  82. */
  83. @RequestMapping(value="/getList")
  84. @ResponseBody
  85. public Object getList(Page page) throws Exception{
  86. PageData pd = new PageData();
  87. Map<String,Object> map = new HashMap<String,Object>();
  88. pd.put("USERNAME", Jurisdiction.getUsername()); //查询当前用户的任务(用户名查询)
  89. pd.put("RNUMBERS", Jurisdiction.getRnumbers()); //查询当前用户的任务(角色编码查询)
  90. page.setPd(pd);
  91. page.setShowCount(5);
  92. List<PageData> varList = ruprocdefService.list(page); //列出Rutask列表
  93. List<PageData> pdList = new ArrayList<PageData>();
  94. for(int i=0;i<varList.size();i++){
  95. PageData tpd = new PageData();
  96. tpd.put("NAME_", varList.get(i).getString("NAME_")); //任务名称
  97. tpd.put("PNAME_", varList.get(i).getString("PNAME_")); //流程名称
  98. pdList.add(tpd);
  99. }
  100. map.put("list", pdList);
  101. map.put("taskCount", page.getTotalResult());
  102. return AppUtil.returnObject(pd, map);
  103. }
  104. /**去办理任务页面
  105. * @param
  106. * @throws Exception
  107. */
  108. @RequestMapping(value="/goHandle")
  109. public ModelAndView goHandle()throws Exception{
  110. ModelAndView mv = this.getModelAndView();
  111. PageData pd = new PageData();
  112. pd = this.getPageData();
  113. List<PageData> varList = ruprocdefService.varList(pd); //列出流程变量列表
  114. List<PageData> hitaskList = ruprocdefService.hiTaskList(pd); //历史任务节点列表
  115. for(int i=0;i<hitaskList.size();i++){ //根据耗时的毫秒数计算天时分秒
  116. if(null != hitaskList.get(i).get("DURATION_")){
  117. Long ztime = Long.parseLong(hitaskList.get(i).get("DURATION_").toString());
  118. Long tian = ztime / (1000*60*60*24);
  119. Long shi = (ztime % (1000*60*60*24))/(1000*60*60);
  120. Long fen = (ztime % (1000*60*60*24))%(1000*60*60)/(1000*60);
  121. Long miao = (ztime % (1000*60*60*24))%(1000*60*60)%(1000*60)/1000;
  122. hitaskList.get(i).put("ZTIME", tian+"天"+shi+"时"+fen+"分"+miao+"秒");
  123. }
  124. }
  125. String FILENAME = URLDecoder.decode(pd.getString("FILENAME"), "UTF-8");
  126. createXmlAndPngAtNowTask(pd.getString("PROC_INST_ID_"),FILENAME);//生成当前任务节点的流程图片
  127. pd.put("FILENAME", FILENAME);
  128. String imgSrcPath = PathUtil.getClasspath()+Const.FILEACTIVITI+FILENAME;
  129. pd.put("imgSrc", "data:image/jpeg;base64,"+ImageAnd64Binary.getImageStr(imgSrcPath)); //解决图片src中文乱码,把图片转成base64格式显示(这样就不用修改tomcat的配置了)
  130. mv.setViewName("activiti/rutask/rutask_handle");
  131. mv.addObject("varList", varList);
  132. mv.addObject("hitaskList", hitaskList);
  133. mv.addObject("pd", pd);
  134. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  135. return mv;
  136. }
  137. /**办理任务
  138. * @param
  139. * @throws Exception
  140. */
  141. @RequestMapping(value="/handle")
  142. public ModelAndView handle() throws Exception{
  143. logBefore(logger, Jurisdiction.getUsername()+"办理任务");
  144. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
  145. Session session = Jurisdiction.getSession();
  146. ModelAndView mv = this.getModelAndView();
  147. PageData pd = new PageData();
  148. pd = this.getPageData();
  149. String taskId = pd.getString("ID_"); //任务ID
  150. String sfrom = "";
  151. Object ofrom = getVariablesByTaskIdAsMap(taskId,"审批结果");
  152. if(null != ofrom){
  153. sfrom = ofrom.toString();
  154. }
  155. Map<String,Object> map = new LinkedHashMap<String, Object>();
  156. String OPINION = sfrom + Jurisdiction.getU_name() + ",fh,"+pd.getString("OPINION");//审批人的姓名+审批意见
  157. String msg = pd.getString("msg");
  158. if("yes".equals(msg)){ //批准
  159. map.put("审批结果", "【批准】" + OPINION); //审批结果
  160. setVariablesByTaskIdAsMap(taskId,map); //设置流程变量
  161. setVariablesByTaskId(taskId,"RESULT","批准");
  162. completeMyPersonalTask(taskId);
  163. }else{ //驳回
  164. map.put("审批结果", "【驳回】" + OPINION); //审批结果
  165. setVariablesByTaskIdAsMap(taskId,map); //设置流程变量
  166. setVariablesByTaskId(taskId,"RESULT","驳回");
  167. completeMyPersonalTask(taskId);
  168. }
  169. try{
  170. removeVariablesByPROC_INST_ID_(pd.getString("PROC_INST_ID_"),"RESULT"); //移除流程变量(从正在运行中)
  171. }catch(Exception e){
  172. /*此流程变量在历史中**/
  173. }
  174. try{
  175. String ASSIGNEE_ = pd.getString("ASSIGNEE_"); //下一待办对象
  176. if(Tools.notEmpty(ASSIGNEE_)){
  177. setAssignee(session.getAttribute("TASKID").toString(),ASSIGNEE_); //指定下一任务待办对象
  178. }else{
  179. Object os = session.getAttribute("YAssignee");
  180. if(null != os && !"".equals(os.toString())){
  181. ASSIGNEE_ = os.toString(); //没有指定就是默认流程的待办人
  182. }else{
  183. trySendSms(mv,pd); //没有任务监听时,默认流程结束,发送站内信给任务发起人
  184. }
  185. }
  186. mv.addObject("ASSIGNEE_",ASSIGNEE_); //用于给待办人发送新任务消息
  187. }catch(Exception e){
  188. /*手动指定下一待办人,才会触发此异常。
  189. * 任务结束不需要指定下一步办理人了,发送站内信通知任务发起人**/
  190. trySendSms(mv,pd);
  191. }
  192. mv.addObject("msg","success");
  193. mv.setViewName("save_result");
  194. return mv;
  195. }
  196. /**尝试站内信
  197. * @param mv
  198. * @param pd
  199. * @throws Exception
  200. */
  201. public void trySendSms(ModelAndView mv,PageData pd)throws Exception{
  202. List<PageData> hivarList = hiprocdefService.hivarList(pd); //列出历史流程变量列表
  203. for(int i=0;i<hivarList.size();i++){
  204. if("USERNAME".equals(hivarList.get(i).getString("NAME_"))){
  205. sendSms(hivarList.get(i).getString("TEXT_"));
  206. mv.addObject("FHSMS",hivarList.get(i).getString("TEXT_"));
  207. break;
  208. }
  209. }
  210. }
  211. /**发站内信通知审批结束
  212. * @param USERNAME
  213. * @throws Exception
  214. */
  215. public void sendSms(String USERNAME) throws Exception{
  216. PageData pd = new PageData();
  217. pd.put("SANME_ID", this.get32UUID()); //ID
  218. pd.put("SEND_TIME", DateUtil.getTime()); //发送时间
  219. pd.put("FHSMS_ID", this.get32UUID()); //主键
  220. pd.put("TYPE", "1"); //类型1:收信
  221. pd.put("FROM_USERNAME", USERNAME); //收信人
  222. pd.put("TO_USERNAME", "系统消息");
  223. pd.put("CONTENT", "您申请的任务已经审批完毕,请到已办任务列表查看");
  224. pd.put("STATUS", "2");
  225. // fhsmsService.save(pd);
  226. }
  227. /**去审批详情页面
  228. * @param
  229. * @return
  230. */
  231. @RequestMapping(value="/details")
  232. public ModelAndView goDelegate(){
  233. ModelAndView mv = this.getModelAndView();
  234. PageData pd = new PageData();
  235. pd = this.getPageData();
  236. mv.setViewName("activiti/rutask/handle_details");
  237. mv.addObject("pd", pd);
  238. return mv;
  239. }
  240. }