lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java
@@ -304,15 +304,26 @@ values.put("comment", eamReportAccidentsRegisterDto.getCenterDirectorConfirm()); values.put("centerDirectorResult", eamReportAccidentsRegisterDto.getCenterDirectorResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getCenterDirectorConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getCenterDirectorResult())){ //中心主任拒绝驳回 userSelectors= sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0019); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在区长,无法进入驳回处理!"); }else { userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REGIONAL_MANAGER.name()); eamReportAccidentsRegister.setDistrict(null); eamReportAccidentsRegister.setDistrictTime(null); eamReportAccidentsRegister.setDistrictResult(null); eamReportAccidentsRegister.setDistrictConfirm(null); } }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_WORKER.name()); eamReportAccidentsRegister.setCenterDirector(user.getUsername()); eamReportAccidentsRegister.setCenterDirectorTime(new Date()); eamReportAccidentsRegister.setCenterDirectorResult(eamReportAccidentsRegisterDto.getCenterDirectorResult()); eamReportAccidentsRegister.setCenterDirectorConfirm(eamReportAccidentsRegisterDto.getCenterDirectorConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getCenterDirectorResult())){ //中心主任拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_WORKER.name()); } } break; @@ -332,6 +343,22 @@ values.put("comment", eamReportAccidentsRegisterDto.getRepairConfirmComment()); values.put("repairConfirmResult", eamReportAccidentsRegisterDto.getRepairConfirmResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairConfirmComment()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairConfirmResult())){ //维修工拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0020); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在中心主任,无法进入下级审批!"); }else{ userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_CENTER_MANAGER.name()); eamReportAccidentsRegister.setCenterDirector(null); eamReportAccidentsRegister.setCenterDirectorTime(null); eamReportAccidentsRegister.setCenterDirectorResult(null); eamReportAccidentsRegister.setCenterDirectorConfirm(null); } }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_TEAM_LEADER.name()); eamReportAccidentsRegister.setRepairConfirm(user.getUsername()); eamReportAccidentsRegister.setRepairConfirmTime(new Date()); eamReportAccidentsRegister.setRepairConfirmResult(eamReportAccidentsRegisterDto.getRepairConfirmResult()); @@ -343,22 +370,11 @@ eamReportAccidentsRegister.setTakeSteps(eamReportAccidentsRegisterDto.getTakeSteps()); eamReportAccidentsRegister.setSuggestionTakeSteps(eamReportAccidentsRegisterDto.getSuggestionTakeSteps()); eamReportAccidentsRegister.setSuggestionTakeStepsTime(eamReportAccidentsRegisterDto.getSuggestionTakeStepsTime()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairConfirmResult())){ //维修工拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_TEAM_LEADER.name()); } } break; //待维修组长处理 case PENDING_REPAIR_TEAM_LEADER: userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修区长,无法进入下级审批"); } userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); if (StrUtil.isEmpty(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment())){ eamReportAccidentsRegisterDto.setRepairGroupLeaderComment(""); } @@ -366,25 +382,44 @@ values.put("comment", eamReportAccidentsRegisterDto.getRepairGroupLeaderComment()); values.put("repairGroupLeaderResult", eamReportAccidentsRegisterDto.getRepairGroupLeaderResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult())){ //维修组长拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修工,无法进入下级审批!"); }else{ userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_WORKER.name()); eamReportAccidentsRegister.setRepairConfirm(null); eamReportAccidentsRegister.setRepairConfirmTime(null); eamReportAccidentsRegister.setRepairConfirmResult(null); eamReportAccidentsRegister.setRepairConfirmComment(null); eamReportAccidentsRegister.setReportStartTime(null); eamReportAccidentsRegister.setEquipmentStatus(null); eamReportAccidentsRegister.setCauseAnalysis(null); eamReportAccidentsRegister.setInspectionResults(null); eamReportAccidentsRegister.setTakeSteps(null); eamReportAccidentsRegister.setSuggestionTakeSteps(null); eamReportAccidentsRegister.setSuggestionTakeStepsTime(null); } }else { userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修区长,无法进入下级审批"); } userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_REGIONAL_MANAGER.name()); eamReportAccidentsRegister.setRepairGroupLeader(user.getUsername()); eamReportAccidentsRegister.setRepairGroupLeaderTime(new Date()); eamReportAccidentsRegister.setRepairGroupLeaderResult(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult()); eamReportAccidentsRegister.setRepairGroupLeaderComment(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult())){ //维修组长拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_REGIONAL_MANAGER.name()); } break; //待维修区长处理 case PENDING_REPAIR_REGIONAL_MANAGER: userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在技术负责人,无法进入下级审批"); } userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); if (StrUtil.isEmpty(eamReportAccidentsRegisterDto.getRepairDistrictComment())){ eamReportAccidentsRegisterDto.setRepairDistrictComment(""); } @@ -392,15 +427,32 @@ values.put("comment", eamReportAccidentsRegisterDto.getRepairDistrictComment()); values.put("repairDistrictResult", eamReportAccidentsRegisterDto.getRepairDistrictResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairDistrictComment()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairDistrictResult())){ //维修区长拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修组长,无法进入下级审批!"); }else{ userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_TEAM_LEADER.name()); eamReportAccidentsRegister.setRepairGroupLeader(null); eamReportAccidentsRegister.setRepairGroupLeaderTime(null); eamReportAccidentsRegister.setRepairGroupLeaderResult(null); eamReportAccidentsRegister.setRepairGroupLeaderComment(null); } }else { userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在技术负责人,无法进入下级审批"); } userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_RESPONSIBLE.name()); eamReportAccidentsRegister.setRepairDistrict(user.getUsername()); eamReportAccidentsRegister.setRepairDistrictTime(new Date()); eamReportAccidentsRegister.setRepairDistrictResult(eamReportAccidentsRegisterDto.getRepairDistrictResult()); eamReportAccidentsRegister.setRepairDistrictComment(eamReportAccidentsRegisterDto.getRepairDistrictComment()); if ("2".equals(eamReportAccidentsRegisterDto.getRepairDistrictResult())){ //维修区长拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_RESPONSIBLE.name()); } break; //待技术负责人处理 @@ -418,6 +470,22 @@ values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm()); values.put("technicalDirectorResult", eamReportAccidentsRegisterDto.getTechnicalDirectorResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorResult())){ //技术负责人拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修区长,无法进入下级审批"); }else { userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_REGIONAL_MANAGER.name()); eamReportAccidentsRegister.setRepairDistrict(null); eamReportAccidentsRegister.setRepairDistrictTime(null); eamReportAccidentsRegister.setRepairDistrictResult(null); eamReportAccidentsRegister.setRepairDistrictComment(null); } }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_SUPERVISOR.name()); eamReportAccidentsRegister.setCheckAgree(eamReportAccidentsRegisterDto.getCheckAgree()); eamReportAccidentsRegister.setDisagreeReason(eamReportAccidentsRegisterDto.getDisagreeReason()); eamReportAccidentsRegister.setRectificationMeasures(eamReportAccidentsRegisterDto.getRectificationMeasures()); @@ -426,11 +494,6 @@ eamReportAccidentsRegister.setTechnicalDirectorTime(new Date()); eamReportAccidentsRegister.setTechnicalDirectorResult(eamReportAccidentsRegisterDto.getTechnicalDirectorResult()); eamReportAccidentsRegister.setTechnicalDirectorConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorResult())){ //技术负责人拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_SUPERVISOR.name()); } break; //待技术主管室级领导处理 @@ -448,15 +511,30 @@ values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm()); values.put("technicalDirectorLeaderResult", eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult())){ //技术主管室级领导拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在技术负责人,无法进入下级审批"); }else { userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_RESPONSIBLE.name()); eamReportAccidentsRegister.setCheckAgree(null); eamReportAccidentsRegister.setDisagreeReason(null); eamReportAccidentsRegister.setRectificationMeasures(null); eamReportAccidentsRegister.setAccidentConclusion(null); eamReportAccidentsRegister.setTechnicalDirector(null); eamReportAccidentsRegister.setTechnicalDirectorTime(null); eamReportAccidentsRegister.setTechnicalDirectorResult(null); eamReportAccidentsRegister.setTechnicalDirectorConfirm(null); } }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_SUPERIOR_DEPARTMENT.name()); eamReportAccidentsRegister.setTechnicalDirectorLeader(user.getUsername()); eamReportAccidentsRegister.setTechnicalDirectorLeaderTime(new Date()); eamReportAccidentsRegister.setTechnicalDirectorLeaderResult(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult()); eamReportAccidentsRegister.setTechnicalDirectorLeaderConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult())){ //技术主管室级领导拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_SUPERIOR_DEPARTMENT.name()); } break; //待主管部级领导处理 @@ -468,15 +546,26 @@ values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm()); values.put("technicalDirectorPartResult", eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult()); eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult())){ //技术主管室级领导拒绝 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0022); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在技术主管室级领导,无法进入下级审批"); }else { userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_SUPERVISOR.name()); eamReportAccidentsRegister.setTechnicalDirectorLeader(null); eamReportAccidentsRegister.setTechnicalDirectorLeaderTime(null); eamReportAccidentsRegister.setTechnicalDirectorLeaderResult(null); eamReportAccidentsRegister.setTechnicalDirectorLeaderConfirm(null); } }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REPAIR_COMPLETED.name()); eamReportAccidentsRegister.setTechnicalDirectorPart(user.getUsername()); eamReportAccidentsRegister.setTechnicalDirectorPartTime(new Date()); eamReportAccidentsRegister.setTechnicalDirectorPartResult(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult()); eamReportAccidentsRegister.setTechnicalDirectorPartConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm()); if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult())){ //技术主管室级领导拒绝 eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name()); }else { eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REPAIR_COMPLETED.name()); } break; default: lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java
@@ -294,15 +294,27 @@ values.put("comment", eamReportProductHazardsDto.getDeputyDepartmentComment()); values.put("deputyDepartmentResult", eamReportProductHazardsDto.getDeputyDepartmentResult()); eamReportProductHazardsDto.setComment(eamReportProductHazardsDto.getDeputyDepartmentComment()); if ("2".equals(eamReportProductHazardsDto.getDeputyDepartmentResult())){ userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0024); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在主管工艺,无法进入驳回操作!"); }else { userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); //副部级领导拒绝 eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.PENDING_SUPERIOR_TECHNICAL_CONFIRMATION.name()); eamReportProductHazards.setTechnologist(null); eamReportProductHazards.setTechnologistTime(null); eamReportProductHazards.setTechnologistResult(null); eamReportProductHazards.setTechnologistComment(null); } }else { eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.REPAIR_COMPLETED.name()); eamReportProductHazards.setDeputyDepartment(user.getUsername()); eamReportProductHazards.setDeputyDepartmentTime(new Date()); eamReportProductHazards.setDeputyDepartmentResult(eamReportProductHazardsDto.getDeputyDepartmentResult()); eamReportProductHazards.setDeputyDepartmentComment(eamReportProductHazardsDto.getDeputyDepartmentComment()); if ("2".equals(eamReportProductHazardsDto.getDeputyDepartmentResult())){ //副部级领导拒绝 eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.REJECTED.name()); }else { eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.REPAIR_COMPLETED.name()); } break; default: lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -7,11 +7,13 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; @@ -47,8 +49,6 @@ private IEamMaintenanceStandardService eamMaintenanceStandardService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private IEamEquipmentService eamEquipmentService; /** * 流程启动,保存对应的数据 @@ -59,6 +59,11 @@ @ApiOperation(value = "保养标准-流程启动保存对应的数据", notes = "保养标准-流程启动保存对应的数据") @GetMapping(value = "/saveEamMaintenanceStandardProcess") public Result<?> saveEamMaintenanceStandardProcess(String id) { // 校验领取权限 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (!BusinessCodeConst.PCR0002.equals(user.getPost())) { return Result.error("填报失败,没有填报权限!,需维修工提交"); } return eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
@@ -183,6 +183,10 @@ @TableField(exist = false) private String equipmentText; //流转节点使用查询 @TableField(exist = false) private String procInstId; public String getEquipmentText() { return equipmentCode + "[" + equipmentName + "]"; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
@@ -3,10 +3,12 @@ <mapper namespace="org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper"> <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamMaintenanceStandard"> select ems.*, e.equipment_code, e.equipment_name, e.equipment_model e.equipment_model,f.process_instance_id as 'procInstId' from eam_maintenance_standard ems inner join eam_equipment e on ems.equipment_id = e.id left join flow_my_business f on f.data_id=ems.id ${ew.customSqlSegment} </select> </mapper> lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -40,6 +41,7 @@ import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.system.entity.BaseFactory; @@ -338,209 +340,361 @@ /*流程业务代码--------------------------开始*/ /** * 流程启动,保存对应的数据 * * @param id * @return */ @Override @Transactional(rollbackFor = Exception.class) public Result<?> saveEamMaintenanceStandardProcess(String id) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); EamMaintenanceStandard maintenanceStandard = this.getById(id); if (maintenanceStandard == null) { return Result.error("未找到对应保养标准"); // 获取当前登录用户 LoginUser currentUser = getCurrentUser(); // 校验保养标准是否存在 EamMaintenanceStandard maintenanceStandard = validateStandardExistence(id); // 校验关联设备是否存在 EamEquipment equipment = validateEquipmentExistence(maintenanceStandard.getEquipmentId()); // 检查是否是驳回后重新提交的流程 FlowMyBusiness flowBusiness = flowMyBusinessService.selectByDataId(maintenanceStandard.getId()); if (isReSubmitScenario(flowBusiness)) { return handleReSubmitScenario(maintenanceStandard, equipment, currentUser, flowBusiness); } System.out.println("保养规范流程:" + maintenanceStandard.getId()); flowCommonService.initActBusiness(maintenanceStandard.getStandardName() + "规范进行流程审核", maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null); Map<String, Object> variables = new HashMap<>(); variables.put("dataId", maintenanceStandard.getId()); variables.put("organization", "保养规范启动流程"); variables.put("comment", "保养规范启动流程"); variables.put("proofreading", true); EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); if (!CollectionUtils.isEmpty(userSelectorList)) { List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(usernameList)) { variables.put("NextAssignee", usernameList); }else { throw new JeecgBootException("设备未存在维修室主任,无法进入下级审批!"); // 处理首次启动流程 return handleFirstSubmitScenario(maintenanceStandard, equipment, currentUser); } /** * 判断是否是驳回后重新提交的场景 */ private boolean isReSubmitScenario(FlowMyBusiness flowBusiness) { return flowBusiness != null && MaintenanceStandardStatusEnum.WAIT_SUBMIT.name().equals(flowBusiness.getTaskNameId()); } Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); if (!result.isSuccess()) { super.removeById(maintenanceStandard.getId()); } else { maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); maintenanceStandard.setDesigner(user.getUsername()); maintenanceStandard.setDesignTime(new Date()); eamMaintenanceStandardMapper.updateById(maintenanceStandard); //获取flow的流程实例id,设置下一步的处理人员 List<FlowMyBusiness> businessList = flowMyBusinessService.list( new QueryWrapper<FlowMyBusiness>() .eq("data_id", maintenanceStandard.getId()) /** * 处理驳回后重新提交的流程 */ private Result<?> handleReSubmitScenario(EamMaintenanceStandard maintenanceStandard, EamEquipment equipment, LoginUser currentUser, FlowMyBusiness flowBusiness) { // 更新待办维修工 updateTodoMaintenanceWorkers(flowBusiness, equipment); // 认领任务 claimTaskOrFail(flowBusiness.getTaskId(), currentUser); // 构建流程变量 Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "保养规范再次启动流程"); // 设置下一级审批人(维修室主任) setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "维修室主任"); // 完成当前任务,推进流程 FlowTaskVo taskVo = buildFlowTaskVo(flowBusiness, maintenanceStandard, variables, "保养规范再次启动流程"); Result result = flowTaskService.complete(taskVo); // 更新保养标准状态 if (result.isSuccess()) { updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR); return Result.ok("保养规范流程重启成功"); } return result; } /** * 处理首次提交的流程 */ private Result<?> handleFirstSubmitScenario(EamMaintenanceStandard maintenanceStandard, EamEquipment equipment, LoginUser currentUser) { // 初始化流程业务信息 flowCommonService.initActBusiness( maintenanceStandard.getStandardName() + "规范进行流程审核", maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null ); if (businessList.isEmpty()) { return Result.error("流程记录不存在"); // 构建流程变量 Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "保养规范启动流程"); // 设置下一级审批人(维修室主任) setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "维修室主任"); // 启动流程实例 Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); // 处理流程启动结果 if (result.isSuccess()) { updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR); validateFlowBusinessRecord(maintenanceStandard.getId()); } else { this.removeById(maintenanceStandard.getId()); } } return result; } /** * 审批操作 * * @param eamMaintenanceStandardVo * @return */ @Override @Transactional(rollbackFor = Exception.class) public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo) { EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); if (eamMaintenanceStandard == null) { return Result.error("未找到对应保养标准"); } // 获取当前登录用户 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (user == null || StrUtil.isBlank(user.getId())) { throw new JeecgBootException("未获取到登录用户,请重新登录后再试!"); } eamMaintenanceStandardVo.setAssignee(user.getUsername()); // 获取流程业务记录 FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(eamMaintenanceStandardVo.getInstanceId(), eamMaintenanceStandardVo.getTaskId()); if (flowMyBusiness == null) { throw new JeecgBootException("流程实例不存在,请刷新后重试!"); } public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo vo) { // 基础校验 EamMaintenanceStandard standard = validateStandardExistence(vo.getDataId()); LoginUser user = getCurrentUser(); FlowMyBusiness business = validateFlowBusiness(vo); validateUserAuthorization(business, user); claimTaskOrFail(business.getTaskId(), user); boolean userAuthorized = isUserAuthorized(flowMyBusiness, user); if (!userAuthorized) { throw new JeecgBootException("用户无权操作此任务,请刷新后重试!"); } // 认领任务 if (!claimTask(flowMyBusiness.getTaskId(), user)) { throw new JeecgBootException("任务不存在、已完成或已被他人认领!"); } // 准备审批所需数据 EamEquipment equipment = validateEquipmentExistence(standard.getEquipmentId()); Map<String, Object> variables = new HashMap<>(); EamEquipment eamEquipment = eamEquipmentService.getById(eamMaintenanceStandard.getEquipmentId()); if (eamEquipment == null) { throw new JeecgBootException("设备不存在,请检查!"); } MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(eamMaintenanceStandard.getStandardStatus()); // 根据当前状态处理审批 MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(standard.getStandardStatus()); if (status == null) { return null; throw new JeecgBootException("无效的保养标准状态"); } //流程变量 Map<String, Object> values = new HashMap<>(); List<String> userApprovalList; List<UserSelector> userSelectors; switch (status){ case WAIT_REPAIR_DIRECTOR: //维修主任审核 userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009); if (CollectionUtils.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在生产设备技术主管,无法进入下级审批!"); }else { userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("dataId", eamMaintenanceStandard.getId()); values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult()); if (StrUtil.isEmpty(eamMaintenanceStandardVo.getRepairManagerApproveComment())){ eamMaintenanceStandardVo.setRepairManagerApproveComment(""); } values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment()); values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment()); eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getRepairManagerApproveComment()); if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("2")){ eamMaintenanceStandard.setStandardStatus(SecondMaintenanceStatusEnum.ABOLISH.name()); }else { values.put("NextAssignee", userApprovalList); eamMaintenanceStandard.setRepairManager(user.getUsername()); eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult()); eamMaintenanceStandard.setRepairManagerApproveTime(new Date()); eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment()); eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); } } handleRepairDirectorApproval(vo, standard, equipment, variables); break; case WAIT_TECHNICAL_DIRECTOR: //待技术主管审批 if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveComment())){ eamMaintenanceStandardVo.setTechnicalManagerApproveComment(""); } values.put("dataId", eamMaintenanceStandard.getId()); values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("2")){ eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("设备未存在维修室主任,无法进入驳回审批!"); }else{ userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); values.put("NextAssignee", userApprovalList); } }else { eamMaintenanceStandard.setTechnicalManager(user.getUsername()); eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date()); eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); } handleTechnicalDirectorApproval(vo, standard, equipment, variables); break; default: throw new JeecgBootException("审批失败"); throw new JeecgBootException("当前状态不支持审批操作"); } } eamMaintenanceStandardVo.setValues(values); // 完成流程任务 Result result = flowTaskService.complete(eamMaintenanceStandardVo); if (!result.isSuccess()) { throw new JeecgBootException("审批失败,请刷新查看!"); } this.updateById(eamMaintenanceStandard); if (StrUtil.isNotEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveResult())){ if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) { eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); //判断是否进行升版,通过设备编号、保养分类、状态进行筛选 EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); queryWrapper.ne("id", eamMaintenanceStandardVo.getDataId()); queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId()); queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory()); queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name()); List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); if (!CollectionUtils.isEmpty(list)) { //作废原有 for (EamMaintenanceStandard eamMaintenanceStandard1 : list) { eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); this.updateById(eamMaintenanceStandard1); } } } } // 提交审批结果 submitApprovalResult(vo, standard, variables); return Result.OK("操作成功"); } private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); return todoUsers != null && todoUsers.contains(user.getUsername()); private LoginUser getCurrentUser() { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (user == null) { throw new JeecgBootException("未获取到登录用户,请重新登录后再试!"); } return user; } private boolean claimTask(String taskId, LoginUser user) { private EamMaintenanceStandard validateStandardExistence(String id) { EamMaintenanceStandard standard = this.getById(id); if (standard == null) { throw new JeecgBootException("未找到对应保养标准"); } return standard; } private EamEquipment validateEquipmentExistence(String equipmentId) { EamEquipment equipment = eamEquipmentService.getById(equipmentId); if (equipment == null) { throw new JeecgBootException("关联设备不存在"); } return equipment; } private FlowMyBusiness validateFlowBusiness(EamMaintenanceStandardVo vo) { FlowMyBusiness business = flowMyBusinessService.getFlowMyBusiness(vo.getInstanceId(), vo.getTaskId()); if (business == null) { throw new JeecgBootException("流程实例不存在,请刷新重试"); } return business; } private void validateUserAuthorization(FlowMyBusiness business, LoginUser user) { List<String> todoUsers = JSON.parseArray(business.getTodoUsers(), String.class); if (todoUsers == null || !todoUsers.contains(user.getUsername())) { throw new JeecgBootException("用户无权操作此任务"); } } private void claimTaskOrFail(String taskId, LoginUser user) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null) { return false; throw new JeecgBootException("任务不存在或已完成"); } if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { return false; throw new JeecgBootException("任务已被他人认领"); } taskService.claim(taskId, user.getUsername()); return true; } private Map<String, Object> buildProcessVariables(String dataId, String comment) { Map<String, Object> vars = new HashMap<>(); vars.put("dataId", dataId); vars.put("organization", comment); vars.put("comment", comment); vars.put("proofreading", true); return vars; } private void setNextApprover(Map<String, Object> variables, EamEquipment equipment, String businessCode, String roleName) { List<UserSelector> approvers = sysUserService.selectOperatorList( equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), businessCode ); if (CollectionUtils.isEmpty(approvers)) { throw new JeecgBootException("设备未配置" + roleName); } variables.put("NextAssignee", approvers.stream() .map(UserSelector::getUsername) .collect(Collectors.toList())); } private void updateTodoMaintenanceWorkers(FlowMyBusiness business, EamEquipment equipment) { List<UserSelector> maintenanceWorkers = sysUserService.selectOperatorList( equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002 ); if (CollectionUtils.isEmpty(maintenanceWorkers)) { throw new JeecgBootException("设备未配置维修工"); } business.setTodoUsers(JSON.toJSONString( maintenanceWorkers.stream() .map(UserSelector::getUsername) .collect(Collectors.toList()) )); flowMyBusinessService.updateById(business); } private FlowTaskVo buildFlowTaskVo(FlowMyBusiness business, EamMaintenanceStandard standard, Map<String, Object> variables, String comment) { FlowTaskVo taskVo = new FlowTaskVo(); taskVo.setTaskId(business.getTaskId()); taskVo.setComment(comment); taskVo.setInstanceId(business.getProcessInstanceId()); taskVo.setDataId(standard.getId()); taskVo.setValues(variables); return taskVo; } private void updateMaintenanceStandardStatus(EamMaintenanceStandard standard, LoginUser user, MaintenanceStandardStatusEnum status) { standard.setStandardStatus(status.name()); if (MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.equals(status)) { standard.setDesigner(user.getUsername()); standard.setDesignTime(new Date()); } this.updateById(standard); } private void validateFlowBusinessRecord(String standardId) { List<FlowMyBusiness> businessList = flowMyBusinessService.list( new QueryWrapper<FlowMyBusiness>().eq("data_id", standardId) ); if (CollectionUtils.isEmpty(businessList)) { throw new JeecgBootException("流程记录不存在"); } } private void handleRepairDirectorApproval(EamMaintenanceStandardVo vo, EamMaintenanceStandard standard, EamEquipment equipment, Map<String, Object> variables) { // 设置基础流程变量 variables.putAll(buildProcessVariables(standard.getId(), StrUtil.blankToDefault(vo.getRepairManagerApproveComment(), ""))); variables.put("repairManagerApproveResult", vo.getRepairManagerApproveResult()); LoginUser user = getCurrentUser(); vo.setAssignee(user.getUsername()); vo.setComment(vo.getRepairManagerApproveComment()); if ("2".equals(vo.getRepairManagerApproveResult())) { // 驳回 UpdateWrapper<EamMaintenanceStandard> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", standard.getId()); updateWrapper.set("standard_status", MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); updateWrapper.set("designer", null); updateWrapper.set("design_time", null); this.update(updateWrapper); } else { // 通过 setNextApprover(variables, equipment, BusinessCodeConst.PCR0009, "生产设备技术主管"); standard.setRepairManager(user.getUsername()); standard.setRepairManagerApproveResult(vo.getRepairManagerApproveResult()); standard.setRepairManagerApproveTime(new Date()); standard.setRepairManagerApproveComment(vo.getRepairManagerApproveComment()); standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); } } private void handleTechnicalDirectorApproval(EamMaintenanceStandardVo vo, EamMaintenanceStandard standard, EamEquipment equipment, Map<String, Object> variables) { // 设置基础流程变量 variables.putAll(buildProcessVariables(standard.getId(), StrUtil.blankToDefault(vo.getTechnicalManagerApproveComment(), ""))); variables.put("technicalManagerApproveResult", vo.getTechnicalManagerApproveResult()); LoginUser user = getCurrentUser(); vo.setAssignee(user.getUsername()); vo.setComment(vo.getTechnicalManagerApproveComment()); if ("2".equals(vo.getTechnicalManagerApproveResult())) { // 驳回 standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); standard.setRepairManager(null); standard.setRepairManagerApproveResult(null); standard.setRepairManagerApproveTime(null); standard.setRepairManagerApproveComment(null); setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "维修室主任"); } else { // 通过 standard.setTechnicalManager(user.getUsername()); standard.setTechnicalManagerApproveResult(vo.getTechnicalManagerApproveResult()); standard.setTechnicalManagerApproveTime(new Date()); standard.setTechnicalManagerApproveComment(vo.getTechnicalManagerApproveComment()); standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); } } private void submitApprovalResult(EamMaintenanceStandardVo vo, EamMaintenanceStandard standard, Map<String, Object> variables) { vo.setValues(variables); Result result = flowTaskService.complete(vo); if (!result.isSuccess()) { throw new JeecgBootException("审批流程提交失败: " + result.getMessage()); } // 更新保养标准 this.updateById(standard); // 技术主管审批通过后,作废旧版本 if (MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name().equals(standard.getStandardStatus()) && "1".equals(vo.getTechnicalManagerApproveResult())) { abolishPreviousStandards(standard); } } private void abolishPreviousStandards(EamMaintenanceStandard current) { List<EamMaintenanceStandard> previous = eamMaintenanceStandardMapper.selectList( new QueryWrapper<EamMaintenanceStandard>() .ne("id", current.getId()) .eq("equipment_id", current.getEquipmentId()) .eq("maintenance_category", current.getMaintenanceCategory()) .eq("standard_status", MaintenanceStandardStatusEnum.START.name()) ); if (!CollectionUtils.isEmpty(previous)) { previous.forEach(standard -> { standard.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); }); this.updateBatchById(previous); } } lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
@@ -38,7 +38,7 @@ c.ASSIGNEE_ AS assignee, c.DESCRIPTION_ AS description, LEAD ( COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_ ORDER BY a.START_TIME_ ) AS nextActName, ORDER BY a.END_TIME_ ) AS nextActName, LEAD ( a.ACT_TYPE_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_ ORDER BY a.START_TIME_ ) AS nextActType, LEAD ( a.START_TIME_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_