| | |
| | | package com.zt.modules.workflow.service; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import com.zt.common.entity.BaseEntity; |
| | | import com.zt.common.entity.BusiEntity; |
| | | import com.zt.common.entity.FlowInfo; |
| | | import com.zt.common.service.BaseService; |
| | | import com.zt.common.utils.UUIDUtil; |
| | | import com.zt.core.context.UserContext; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 工作流服务 |
| | |
| | | // 已經存在該步驟了,不用繼續 |
| | | return; |
| | | } |
| | | |
| | | WfDefStep currentStep = workflowConfigService.get(currentStepId); |
| | | WfDefStep finallyStep = this.queryWfDefFinallyStep(currentStep.getWfDefId().toString()); |
| | | |
| | |
| | | taskParamDto.setBizInfoDto(bizInfoDto); |
| | | |
| | | if (finallyStep.getStepNo() > currentStep.getStepNo()) { |
| | | String roleIds = currentStep.getApproverRoleIds(); |
| | | if (!StringUtils.isBlank(roleIds)) { |
| | | roleIds = roleIds.replace(",,", ","); |
| | | roleIds = roleIds.replace(",,", ","); |
| | | } |
| | | if (StringUtils.isBlank(roleIds)) { |
| | | throw new RuntimeException("没有设置下一步流程角色!"); |
| | | } |
| | | |
| | | Integer isSelfDept = currentStep.getIsSelfDept(); |
| | | String[] roleIdArr = roleIds.split(","); |
| | | if (isSelfDept > 0 && bizInfoList.size() > 0) { |
| | | deptIds = bizInfoList.get(0).getDeptIds(); |
| | | if (isSelfDept > 0 && bizInfoDto!=null) { |
| | | deptIds = bizInfoDto.getDeptIds(); |
| | | } |
| | | if (isSelfDept == 0) |
| | | deptIds = null; |
| | | |
| | | String zyIds = null; |
| | | String bizGroupId = bizInfoList.get(0).getBizId(); |
| | | if (!StringUtils.isBlank(currentStep.getTaskGroup()) |
| | | && !StringUtils.isBlank(currentStep.getTaskGroupSql())) { |
| | | sqlStr = currentStep.getTaskGroupSql(); |
| | | sqlStr = sqlStr.replace("${bizId}", bizId.toString()); |
| | | sqlStr = sqlStr.replace("${bizGroupId}", bizGroupId); |
| | | List<BizInfoDto> bizInfoList2 = baseDao.getSqlResult(sqlStr); |
| | | if ("cj".equals(currentStep.getTaskGroup())) |
| | | deptIds = bizInfoList2.get(0).getId(); |
| | | if ("zy".equals(currentStep.getTaskGroup())) |
| | | zyIds = bizInfoList2.get(0).getId(); |
| | | } |
| | | if ("br".equals(currentStep.getTaskGroup())) { |
| | | List<SysUser> listUser = baseDao.getAssignUser(wfDef.getCode(), currentStep.getStepMarker(), bizId); |
| | | for (SysUser user : listUser) { |
| | |
| | | taskParamDto.setGroupId2(user.getId()); |
| | | insertFlowTaskData(taskParamDto); |
| | | } |
| | | } |
| | | else if (StringUtils.isNotBlank(currentStep.getTaskGroup()) && "pall,zrr,csr,shr,pzr".contains(currentStep.getTaskGroup())) { |
| | | String userList = null; |
| | | if ("zrr".equals(currentStep.getTaskGroup())) { |
| | | userList = bizInfoDto.getZrr(); |
| | | } |
| | | if ("csr".equals(currentStep.getTaskGroup())) { |
| | | userList = bizInfoDto.getCsr(); |
| | | } |
| | | if ("shr".equals(currentStep.getTaskGroup())) { |
| | | userList = bizInfoDto.getShr(); |
| | | } |
| | | if ("pzr".equals(currentStep.getTaskGroup())) { |
| | | userList = bizInfoDto.getPzr(); |
| | | } |
| | | if ("pall".equals(currentStep.getTaskGroup())) { |
| | | userList = bizInfoDto.getPall(); |
| | | } |
| | | if (userList != null) { |
| | | String[] userArr = userList.split(","); |
| | | Long groupId2 = UUIDUtil.generateId(); |
| | | for (String userStr : userArr) { |
| | | Long userId = Convert.toLong(userStr); |
| | | SysUser user = baseDao.getUserById(userId); |
| | | existsUsers.put(userId, ""); |
| | | taskParamDto.setUser(user); |
| | | taskParamDto.setGroupId2(groupId2); |
| | | insertFlowTaskData(taskParamDto); |
| | | } |
| | | } |
| | | } else if ("sqr".equals(currentStep.getTaskGroup())) { |
| | | SysUser user = baseDao.getUserById(bizInfoList.get(0).getApplyUserId()); |
| | | existsUsers.put(user.getId(), ""); |
| | |
| | | taskParamDto.setGroupId2(user.getId()); |
| | | insertFlowTaskData(taskParamDto); |
| | | } else { |
| | | String roleIds = currentStep.getApproverRoleIds(); |
| | | if (StringUtils.isBlank(roleIds)) { |
| | | throw new RuntimeException("没有设置下一步流程角色!"); |
| | | } |
| | | String[] roleIdArr = roleIds.split(","); |
| | | for (String roleId : roleIdArr) { |
| | | List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds, zyIds); |
| | | if (StringUtils.isBlank(roleId)) |
| | | continue; |
| | | List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds); |
| | | for (SysUser user : listUser) { |
| | | if (existsUsers.containsKey(user.getId())) { |
| | | continue; |
| | |
| | | throw new RuntimeException("没有符合(" + wfDef.getName() + ")流程的下一步(" + currentStep.getName() + ")执行人!"); |
| | | } |
| | | |
| | | String updateSql = currentStep.getUpdateSql(); |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(updateSql)) { |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${nickName}", UserContext.getUser().getRealName()); |
| | | updateSql = updateSql.replace("${userId}", UserContext.getUser().getId().toString()); |
| | | baseDao.exeSql(updateSql); |
| | | WfDefStep prevStep = workflowConfigService.get(prevStepId); |
| | | if (prevStep!=null) { |
| | | String updateSql = prevStep.getUpdateSql(); |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(updateSql)) { |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${nickName}", UserContext.getUser().getRealName()); |
| | | updateSql = updateSql.replace("${userId}", UserContext.getUser().getId().toString()); |
| | | baseDao.exeSql(updateSql); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | taskParamDto.setUser(null); |
| | | taskParamDto.setGroupId2(null); |
| | |
| | | updateSql = updateSql.replace("${nickName}", UserContext.getUser().getRealName()); |
| | | updateSql = updateSql.replace("${userId}", UserContext.getUser().getId().toString()); |
| | | baseDao.exeSql(updateSql); |
| | | } |
| | | |
| | | WfDefStep prevStep = workflowConfigService.get(prevStepId); |
| | | if (prevStep!=null) { |
| | | updateSql = prevStep.getUpdateSql(); |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(updateSql)) { |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${bizId}", bizId.toString()); |
| | | updateSql = updateSql.replace("${nickName}", UserContext.getUser().getRealName()); |
| | | updateSql = updateSql.replace("${userId}", UserContext.getUser().getId().toString()); |
| | | baseDao.exeSql(updateSql); |
| | | } |
| | | } |
| | | |
| | | if (!StringUtils.isBlank(currentStep.getNextFlows())) { |
| | |
| | | public void deleteFlowStep(String wfIdCode, String stepIdMark, Long bizId){ |
| | | baseDao.deleteFlowStep(wfIdCode,stepIdMark,bizId); |
| | | } |
| | | |
| | | public void getRunFlow(List<? extends BusiEntity> dataList, String flowCode) { |
| | | List<Long> ids = dataList.stream().map(f -> f.getId()).collect(Collectors.toList()); |
| | | Map<String, Object> params = new HashMap<String, Object>(); |
| | | params.put("bizIds", ids); |
| | | params.put("flowCode", flowCode); |
| | | List<FlowInfo> list = baseDao.getRunFlow(params); |
| | | for (BaseEntity item : dataList) { |
| | | List<FlowInfo> list2 = list.stream().filter(item2->item2.getBizId().equals(item.getId())).collect(Collectors.toList()); |
| | | if (list2.size()>0) { |
| | | item.setFlowInfo(list2.get(0)); |
| | | }else{ |
| | | item.setFlowInfo(new FlowInfo()); |
| | | } |
| | | } |
| | | } |
| | | } |