package com.xcgl.activititask.util; import cn.com.lzt.common.util.UserUtil; import cn.com.lzt.useractiviti.data.dao.UseractivitiDataDao; import com.xcgl.activititask.bean.ActivitiTaskResult; import com.xcgl.activititask.entity.PActivitiTaskEntity; import com.xcgl.projecttask.entity.ProjecttaskEntity; import org.apache.commons.lang3.StringUtils; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.DateUtils; import org.jeecgframework.p3.core.utils.common.ApplicationContextUtil; import org.jeecgframework.web.system.pojo.base.TSDepart; import org.jeecgframework.web.system.pojo.base.TSRole; import org.jeecgframework.web.system.service.SystemService; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class AbstractActivitiTaskHandler implements ActivitiTaskHandler { protected SystemService systemService = ApplicationContextUtil.getContext().getBean(SystemService.class); @Override public boolean canDo(PActivitiTaskEntity activitiTaskEntity, String table, String formId) { return true; } @Override public ActivitiTaskResult checkResult(ProjecttaskEntity projecttaskEntity) { if(willCheck(projecttaskEntity)){ return checkTaskResult(projecttaskEntity); } ActivitiTaskResult result = new ActivitiTaskResult(true); return result; } protected ProjecttaskEntity convertToTask(PActivitiTaskEntity activitiTaskEntity,String owner,String table,String formId){ ProjecttaskEntity task = new ProjecttaskEntity(); // task.setProjectid(this.getProjectid()); task.setOwner(owner); Calendar now = Calendar.getInstance(); now.add(Calendar.DAY_OF_MONTH , activitiTaskEntity.getTaskDelay()); Date startTime = now.getTime(); PActivitiTaskEntity.TaskCostTimeType taskCostTimeType = activitiTaskEntity.getTaskCostTimeType(); switch (taskCostTimeType){ case day: now.add(Calendar.DAY_OF_MONTH, activitiTaskEntity.getTaskCostTime());break; case current_month: now.set(Calendar.DAY_OF_MONTH, 1); now.roll(Calendar.DAY_OF_MONTH,-1 ); break; case shebao: int day = now.get(Calendar.DAY_OF_MONTH); if(day>15){//下月任务 now.set(Calendar.DAY_OF_MONTH,1); now.add(Calendar.MONTH,1); startTime = now.getTime(); } now.set(Calendar.DAY_OF_MONTH,15); break; } Date endTime = now.getTime(); task.setMsgtime(startTime); task.setPlanstarttime(startTime); task.setPlanendtime(endTime); task.setExestarttime(startTime); task.setSourcetype("activititask"); task.setSourceid(formId); task.setTasktype(activitiTaskEntity.getTaskType()); task.setExecuteWay(activitiTaskEntity.getExecuteWay()); task.setTaskstatus("0"); task.setCreateDate(new Date()); task.setForm(activitiTaskEntity.getForm()); task.setExecuteType(activitiTaskEntity.getExecuteType()); task.setCheckResult(activitiTaskEntity.getCheckResult()); task.setActivitiTaskId(activitiTaskEntity.getId()); String lastCode = getMaxLocalCode(); lastCode = com.xcgl.utils.OrderNumTools.generateNextBillCode(lastCode, Globals.CODE_PREFIX_ACTIVITITASK,4); task.setCode(lastCode); String taskName = activitiTaskEntity.getName(); String sql = "select * from %s where id='%s'"; String departId = null; try{ Map map = systemService.findOneForJdbc(String.format(sql,table,formId)); task.setCreateBy((String) map.get("create_by")); task.setCreateName((String) map.get("create_name")); departId = (String) map.get("depart_id"); //替换变量 Pattern r = Pattern.compile("\\$\\{(.*?)\\}"); Matcher m = r.matcher(taskName); StringBuffer accum = new StringBuffer(taskName.length()+100); while (m.find()) { String varName = m.group(1); String value = map.get(varName)==null?"":map.get(varName).toString(); m.appendReplacement(accum, value); } m.appendTail(accum); taskName = accum.toString(); }catch (Exception e){ e.printStackTrace(); } task.setName(taskName); if(StringUtils.isBlank(departId)){ UseractivitiDataDao dataDao = ApplicationContextUtil.getContext().getBean(UseractivitiDataDao.class); TSDepart depart = dataDao.getUserDep(owner); departId = depart.getId(); } task.setProjectid(departId); return task; } /** * * @param activitiTaskEntity * @param targetUserId * @param depId 如果角色包含项目,优先取depId的部门,如果depId==null取targetUserId 的主部门 * @param table * @param formId * @return */ protected String getOwner(PActivitiTaskEntity activitiTaskEntity, String targetUserId,String depId,String table,String formId) { String roleId = activitiTaskEntity.getOwnerRole(); String owner =null; TSRole ownerRole = systemService.getEntity(TSRole.class,roleId); String roleCode = ownerRole.getRoleCode(); if(roleCode.startsWith("P_")||roleCode.startsWith("p_")){ if(StringUtils.isBlank(depId)) { if (table.equals("t_bus_activiti_user_personnel")) {//新用户入职 Map map = systemService.findOneForJdbc( "select depart_id from t_bus_activiti_user_personnel where id =? ", formId); depId = (String) map.get("depart_id"); } else { Map map = systemService.findOneForJdbc("select org_id " + "from t_s_user_org where user_id=? and `status`=0 and ifpluralism=0 limit 1", targetUserId); depId = (String) map.get("org_id"); } } depId = UserUtil.getQueryDepIdByDepId(depId); String sql="select " + "ru.userid " + "from t_s_role_user ru " + ",t_s_user_org uo " + "WHERE " + "uo.user_id=ru.userid " + "and ru.roleid=? and uo.org_id=? limit 1"; Map userObject = systemService.findOneForJdbc(sql,roleId,depId); if(userObject!=null) { owner = (String) userObject.get("userid"); } } if(StringUtils.isBlank(owner)) { Map userObject = systemService.findOneForJdbc( "select userid from t_s_role_user where roleid=? limit 1", roleId); owner = (String) userObject.get("userid"); } return owner; } private String getMaxLocalCode(){ StringBuilder sb = new StringBuilder(); sb.append("SELECT code FROM p_projecttask where left(create_date,10) =? "); sb.append(" ORDER BY code DESC"); List> objMapList = systemService.findForJdbc(sb.toString(), DateUtils.date_sdf.format(new Date())); String returnCode = null; if(objMapList!=null && objMapList.size()>0){ returnCode = (String)objMapList.get(0).get("code"); } return returnCode; } protected boolean willCheck(ProjecttaskEntity projecttask){ ProjecttaskEntity.ExecuteType executeType =projecttask.getExecuteType(); ProjecttaskEntity.CheckResult checkResult = projecttask.getCheckResult(); if(executeType!=null && executeType==ProjecttaskEntity.ExecuteType.online && checkResult!=null && checkResult == ProjecttaskEntity.CheckResult.check){ return true; } return false; } //检测结果方法 子类重写 protected ActivitiTaskResult checkTaskResult(ProjecttaskEntity projecttaskEntity){return new ActivitiTaskResult(true);} }