| | |
| | | import cn.hutool.core.util.IdUtil; |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.aizuda.bpm.engine.FlowLongEngine; |
| | | import com.aizuda.bpm.engine.core.FlowCreator; |
| | | import com.aizuda.bpm.engine.core.enums.TaskType; |
| | | import com.aizuda.bpm.engine.entity.*; |
| | | import com.aizuda.bpm.engine.entity.FlowEntity; |
| | | import com.aizuda.bpm.engine.entity.FlwHisInstance; |
| | | import com.aizuda.bpm.engine.entity.FlwHisTask; |
| | | import com.aizuda.bpm.engine.entity.FlwHisTaskActor; |
| | | import com.aizuda.bpm.engine.entity.FlwProcess; |
| | | import com.aizuda.bpm.engine.entity.FlwTask; |
| | | import com.aizuda.bpm.engine.entity.FlwTaskActor; |
| | | import com.aizuda.bpm.engine.model.NodeModel; |
| | | import com.aizuda.bpm.mybatisplus.mapper.*; |
| | | import com.aizuda.bpm.mybatisplus.mapper.FlwHisInstanceMapper; |
| | | import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskActorMapper; |
| | | import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskMapper; |
| | | import com.aizuda.bpm.mybatisplus.mapper.FlwTaskActorMapper; |
| | | import com.aizuda.bpm.mybatisplus.mapper.FlwTaskMapper; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.alibaba.fastjson2.JSONWriter; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.zzg.common.core.domain.BaseEntity; |
| | | import com.zzg.common.core.domain.entity.state.*; |
| | | import com.zzg.common.core.domain.entity.state.StateProcessExtInstance; |
| | | import com.zzg.common.core.domain.entity.state.StateProcessInstanceAction; |
| | | import com.zzg.common.core.domain.entity.state.StateProcessModule; |
| | | import com.zzg.common.core.domain.entity.state.StateProcessTemplate; |
| | | import com.zzg.common.core.domain.entity.state.StateTaskCenter; |
| | | import com.zzg.common.core.domain.entity.system.SysUser; |
| | | import com.zzg.common.core.domain.model.LoginUser; |
| | | import com.zzg.common.enums.StateProcessActionType; |
| | |
| | | import com.zzg.common.exception.state.StateErrorCode; |
| | | import com.zzg.common.utils.SecurityUtils; |
| | | import com.zzg.common.utils.uuid.IdUtils; |
| | | import com.zzg.system.domain.bo.*; |
| | | import com.zzg.system.domain.vo.City; |
| | | import com.zzg.system.domain.bo.DeployBO; |
| | | import com.zzg.system.domain.bo.ProcessAgreeBO; |
| | | import com.zzg.system.domain.bo.ProcessCreateBO; |
| | | import com.zzg.system.domain.bo.ProcessRefuseBO; |
| | | import com.zzg.system.domain.bo.ProcessStartBO; |
| | | import com.zzg.system.domain.bo.ProcessTaskListBO; |
| | | import com.zzg.system.domain.bo.ProcessTemplatePageBO; |
| | | import com.zzg.system.domain.bo.ProcessUpdateBO; |
| | | import com.zzg.system.domain.vo.ProcessTaskListVO; |
| | | import com.zzg.system.mapper.state.StateProcessTemplateMapper; |
| | | import com.zzg.system.service.state.*; |
| | | import com.zzg.system.service.state.StateProcessExtInstanceService; |
| | | import com.zzg.system.service.state.StateProcessInstanceActionService; |
| | | import com.zzg.system.service.state.StateProcessModuleService; |
| | | import com.zzg.system.service.state.StateProcessTemplateService; |
| | | import com.zzg.system.service.state.StateTaskCenterService; |
| | | import com.zzg.system.service.system.ISysRoleService; |
| | | import com.zzg.system.service.system.ISysUserService; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.springframework.security.core.parameters.P; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.io.InputStream; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | private final FlwHisTaskActorMapper flwHisTaskActorMapper; |
| | | private final ISysUserService sysUserService; |
| | | |
| | | /** |
| | | * 流程模版分页 |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Page<StateProcessTemplate> page(ProcessTemplatePageBO request) { |
| | | //查询流程模板列表 |
| | | Page<StateProcessTemplate> templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request); |
| | | |
| | | |
| | | //更新人id列表 |
| | | List<String> updateUserNameList = templatePage.getRecords().stream().map(BaseEntity::getUpdateBy).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(updateUserNameList)) { |
| | | //根据用户id列表查询用户信息 |
| | | List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList); |
| | | Map<String, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | //遍历列表,设置更新人名称 |
| | | templatePage.getRecords().forEach(e -> { |
| | | SysUser sysUser = sysUserMap.get(e.getUpdateBy()); |
| | | if (Objects.nonNull(sysUser)) { |
| | |
| | | return templatePage; |
| | | } |
| | | |
| | | /** |
| | | * 修改并部署模版 |
| | | * @param processUpdateBO |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean update(ProcessUpdateBO processUpdateBO) { |
| | | //查询流程模板 |
| | | StateProcessTemplate temp = this.getById(processUpdateBO.getId()); |
| | | //根据template_key查询最新版本的模板 |
| | | StateProcessTemplate template = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery() |
| | | .eq(StateProcessTemplate::getTemplateKey, temp.getTemplateKey()) |
| | | .apply("(template_key, template_version) in(" |
| | |
| | | return stateProcessModuleService.updateBatchById(stateProcessModules); |
| | | } |
| | | |
| | | /** |
| | | * 创建并部署模版 |
| | | * @param processCreateBO |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean create(ProcessCreateBO processCreateBO) { |
| | |
| | | return this.save(processTemplate); |
| | | } |
| | | |
| | | /** |
| | | * 启动流程 |
| | | * @param processStartBO |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean start(ProcessStartBO processStartBO) { |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 待办 |
| | | * @param processTaskListBO |
| | | * @return |
| | | */ |
| | | @Override |
| | | public PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO) { |
| | | List<ProcessTaskListVO> page = new ArrayList<>(); |
| | |
| | | //获取当前登录用户信息 |
| | | String userId = SecurityUtils.getLoginUser().getUserId(); |
| | | |
| | | //或签时查询其他审批人是否通过(不能省略) |
| | | //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 |
| | | LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); |
| | | //待审核 |
| | |
| | | //查询任务参与者 |
| | | LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); |
| | | query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | //0指定用户 |
| | | .eq(FlwTaskActor::getActorType, 0) |
| | | .or().in(FlwTaskActor::getActorId, userId) |
| | | //1指定角色 |
| | | .eq(FlwTaskActor::getActorType, 1)); |
| | | if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { |
| | | // 添加条件 |
| | |
| | | stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); |
| | | } |
| | | stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); |
| | | //1集体 2国有 |
| | | stateTaskQuery.eq(StateTaskCenter::getType,2); |
| | | stateTaskQuery.orderByDesc(BaseEntity::getCreateTime); |
| | | List<StateTaskCenter> taskCenters = stateTaskCenterService.list(stateTaskQuery); |
| | |
| | | List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | Map<String, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | //根据用户id查询更新人信息 |
| | | List<SysUser> sysUsers = sysUserService.selectUserByIdList(updateUserId); |
| | | |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); |
| | | if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { |
| | | //待审核 |
| | | processTaskListVO.setStatus("0"); |
| | | processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); |
| | | processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); |
| | |
| | | |
| | | LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery() |
| | | .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | //0指定用户 |
| | | .eq(FlwTaskActor::getActorType, 0) |
| | | //指定角色 |
| | | .or().in(FlwTaskActor::getActorId, userId) |
| | | .eq(FlwTaskActor::getActorType, 1)); |
| | | |
| | |
| | | if (ObjectUtil.isEmpty(instanceId)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | //1集体 2国有 |
| | | stateTaskQuery.eq(StateTaskCenter::getType,2); |
| | | stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); |
| | | stateTaskQuery.orderByDesc(BaseEntity::getCreateTime); |
| | |
| | | } |
| | | List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList( |
| | | Wrappers.<FlwHisTask>lambdaQuery() |
| | | //2=抄送 |
| | | .eq(FlwHisTask::getTaskType, 2) |
| | | .in(FlwHisTask::getId, hisTaskIds)); |
| | | |
| | |
| | | if (ObjectUtil.isEmpty(instanceId)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | //1集体 2国有 |
| | | stateTaskQuery.eq(StateTaskCenter::getType,2); |
| | | stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); |
| | | stateTaskQuery.orderByDesc(BaseEntity::getCreateTime); |