AbstractActivitiTaskHandler.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package com.xcgl.activititask.util;
  2. import cn.com.lzt.common.util.UserUtil;
  3. import cn.com.lzt.useractiviti.data.dao.UseractivitiDataDao;
  4. import com.xcgl.activititask.bean.ActivitiTaskResult;
  5. import com.xcgl.activititask.entity.PActivitiTaskEntity;
  6. import com.xcgl.projecttask.entity.ProjecttaskEntity;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.jeecgframework.core.constant.Globals;
  9. import org.jeecgframework.core.util.DateUtils;
  10. import org.jeecgframework.p3.core.utils.common.ApplicationContextUtil;
  11. import org.jeecgframework.web.system.pojo.base.TSDepart;
  12. import org.jeecgframework.web.system.pojo.base.TSRole;
  13. import org.jeecgframework.web.system.service.SystemService;
  14. import java.util.Calendar;
  15. import java.util.Date;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.regex.Matcher;
  19. import java.util.regex.Pattern;
  20. public abstract class AbstractActivitiTaskHandler implements ActivitiTaskHandler {
  21. protected SystemService systemService = ApplicationContextUtil.getContext().getBean(SystemService.class);
  22. @Override
  23. public boolean canDo(PActivitiTaskEntity activitiTaskEntity, String table, String formId) {
  24. return true;
  25. }
  26. @Override
  27. public ActivitiTaskResult checkResult(ProjecttaskEntity projecttaskEntity) {
  28. if(willCheck(projecttaskEntity)){
  29. return checkTaskResult(projecttaskEntity);
  30. }
  31. ActivitiTaskResult result = new ActivitiTaskResult(true);
  32. return result;
  33. }
  34. protected ProjecttaskEntity convertToTask(PActivitiTaskEntity activitiTaskEntity,String owner,String table,String formId){
  35. ProjecttaskEntity task = new ProjecttaskEntity();
  36. // task.setProjectid(this.getProjectid());
  37. task.setOwner(owner);
  38. Calendar now = Calendar.getInstance();
  39. now.add(Calendar.DAY_OF_MONTH , activitiTaskEntity.getTaskDelay());
  40. Date startTime = now.getTime();
  41. PActivitiTaskEntity.TaskCostTimeType taskCostTimeType = activitiTaskEntity.getTaskCostTimeType();
  42. switch (taskCostTimeType){
  43. case day: now.add(Calendar.DAY_OF_MONTH, activitiTaskEntity.getTaskCostTime());break;
  44. case current_month:
  45. now.set(Calendar.DAY_OF_MONTH, 1);
  46. now.roll(Calendar.DAY_OF_MONTH,-1 );
  47. break;
  48. case shebao:
  49. int day = now.get(Calendar.DAY_OF_MONTH);
  50. if(day>15){//下月任务
  51. now.set(Calendar.DAY_OF_MONTH,1);
  52. now.add(Calendar.MONTH,1);
  53. startTime = now.getTime();
  54. }
  55. now.set(Calendar.DAY_OF_MONTH,15);
  56. break;
  57. }
  58. Date endTime = now.getTime();
  59. task.setMsgtime(startTime);
  60. task.setPlanstarttime(startTime);
  61. task.setPlanendtime(endTime);
  62. task.setExestarttime(startTime);
  63. task.setSourcetype("activititask");
  64. task.setSourceid(formId);
  65. task.setTasktype(activitiTaskEntity.getTaskType());
  66. task.setExecuteWay(activitiTaskEntity.getExecuteWay());
  67. task.setTaskstatus("0");
  68. task.setCreateDate(new Date());
  69. task.setForm(activitiTaskEntity.getForm());
  70. task.setExecuteType(activitiTaskEntity.getExecuteType());
  71. task.setCheckResult(activitiTaskEntity.getCheckResult());
  72. task.setActivitiTaskId(activitiTaskEntity.getId());
  73. String lastCode = getMaxLocalCode();
  74. lastCode = com.xcgl.utils.OrderNumTools.generateNextBillCode(lastCode, Globals.CODE_PREFIX_ACTIVITITASK,4);
  75. task.setCode(lastCode);
  76. String taskName = activitiTaskEntity.getName();
  77. String sql = "select * from %s where id='%s'";
  78. String departId = null;
  79. try{
  80. Map<String,Object> map = systemService.findOneForJdbc(String.format(sql,table,formId));
  81. task.setCreateBy((String) map.get("create_by"));
  82. task.setCreateName((String) map.get("create_name"));
  83. departId = (String) map.get("depart_id");
  84. //替换变量
  85. Pattern r = Pattern.compile("\\$\\{(.*?)\\}");
  86. Matcher m = r.matcher(taskName);
  87. StringBuffer accum = new StringBuffer(taskName.length()+100);
  88. while (m.find()) {
  89. String varName = m.group(1);
  90. String value = map.get(varName)==null?"":map.get(varName).toString();
  91. m.appendReplacement(accum, value);
  92. }
  93. m.appendTail(accum);
  94. taskName = accum.toString();
  95. }catch (Exception e){
  96. e.printStackTrace();
  97. }
  98. task.setName(taskName);
  99. if(StringUtils.isBlank(departId)){
  100. UseractivitiDataDao dataDao = ApplicationContextUtil.getContext().getBean(UseractivitiDataDao.class);
  101. TSDepart depart = dataDao.getUserDep(owner);
  102. departId = depart.getId();
  103. }
  104. task.setProjectid(departId);
  105. return task;
  106. }
  107. /**
  108. *
  109. * @param activitiTaskEntity
  110. * @param targetUserId
  111. * @param depId 如果角色包含项目,优先取depId的部门,如果depId==null取targetUserId 的主部门
  112. * @param table
  113. * @param formId
  114. * @return
  115. */
  116. protected String getOwner(PActivitiTaskEntity activitiTaskEntity, String targetUserId,String depId,String table,String formId) {
  117. String roleId = activitiTaskEntity.getOwnerRole();
  118. String owner =null;
  119. TSRole ownerRole = systemService.getEntity(TSRole.class,roleId);
  120. String roleCode = ownerRole.getRoleCode();
  121. if(roleCode.startsWith("P_")||roleCode.startsWith("p_")){
  122. if(StringUtils.isBlank(depId)) {
  123. if (table.equals("t_bus_activiti_user_personnel")) {//新用户入职
  124. Map<String, Object> map = systemService.findOneForJdbc(
  125. "select depart_id from t_bus_activiti_user_personnel where id =? ", formId);
  126. depId = (String) map.get("depart_id");
  127. } else {
  128. Map<String, Object> map = systemService.findOneForJdbc("select org_id " +
  129. "from t_s_user_org where user_id=? and `status`=0 and ifpluralism=0 limit 1", targetUserId);
  130. depId = (String) map.get("org_id");
  131. }
  132. }
  133. depId = UserUtil.getQueryDepIdByDepId(depId);
  134. String sql="select " +
  135. "ru.userid " +
  136. "from t_s_role_user ru " +
  137. ",t_s_user_org uo " +
  138. "WHERE " +
  139. "uo.user_id=ru.userid " +
  140. "and ru.roleid=? and uo.org_id=? limit 1";
  141. Map<String,Object> userObject = systemService.findOneForJdbc(sql,roleId,depId);
  142. if(userObject!=null) {
  143. owner = (String) userObject.get("userid");
  144. }
  145. }
  146. if(StringUtils.isBlank(owner)) {
  147. Map<String, Object> userObject = systemService.findOneForJdbc(
  148. "select userid from t_s_role_user where roleid=? limit 1", roleId);
  149. owner = (String) userObject.get("userid");
  150. }
  151. return owner;
  152. }
  153. private String getMaxLocalCode(){
  154. StringBuilder sb = new StringBuilder();
  155. sb.append("SELECT code FROM p_projecttask where left(create_date,10) =? ");
  156. sb.append(" ORDER BY code DESC");
  157. List<Map<String, Object>> objMapList = systemService.findForJdbc(sb.toString(), DateUtils.date_sdf.format(new Date()));
  158. String returnCode = null;
  159. if(objMapList!=null && objMapList.size()>0){
  160. returnCode = (String)objMapList.get(0).get("code");
  161. }
  162. return returnCode;
  163. }
  164. protected boolean willCheck(ProjecttaskEntity projecttask){
  165. ProjecttaskEntity.ExecuteType executeType =projecttask.getExecuteType();
  166. ProjecttaskEntity.CheckResult checkResult = projecttask.getCheckResult();
  167. if(executeType!=null && executeType==ProjecttaskEntity.ExecuteType.online
  168. && checkResult!=null && checkResult == ProjecttaskEntity.CheckResult.check){
  169. return true;
  170. }
  171. return false;
  172. }
  173. //检测结果方法 子类重写
  174. protected ActivitiTaskResult checkTaskResult(ProjecttaskEntity projecttaskEntity){return new ActivitiTaskResult(true);}
  175. }