diff --git a/src/main/java/com/lz/modules/flow/service/FlowStartService.java b/src/main/java/com/lz/modules/flow/service/FlowStartService.java index 32e5b1f5..ddc57ac3 100644 --- a/src/main/java/com/lz/modules/flow/service/FlowStartService.java +++ b/src/main/java/com/lz/modules/flow/service/FlowStartService.java @@ -3,6 +3,7 @@ package com.lz.modules.flow.service; import com.baomidou.mybatisplus.extension.service.IService; import com.lz.common.utils.R; import com.lz.modules.flow.entity.FlowStart; +import com.lz.modules.flow.model.StartGroups; import java.util.List; @@ -35,6 +36,8 @@ public interface FlowStartService extends IService { FlowStart selectFlowStartByName(String name); + R startStaffs(StartGroups startGroupStaffIds); + R saveStart(FlowStart flowStart); R getModelById(Long id, int type); diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java index 5bb62971..a7f4f48a 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java @@ -180,158 +180,178 @@ public class FlowStartServiceImpl extends ServiceImpl staffIds = evaluationGroupService.selectAllStaffSimpleInfoByGroupId(evaluationGroup); - - if(staffIds.size() == 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - - return R.error(evaluationGroup.getName() + "——无有效考核人员"); - } - List resultModelDtos = resultModelService.selectResultDtoByGroupId(evaluationGroup.getId()); - if(resultModelDtos.size() == 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - return R.error(evaluationGroup.getName() + "——没有设置考核模板"); + switch (start(evaluationGroup, flowStart, staffManages)){ + case 1: + return R.error(evaluationGroup.getName() + "——无有效考核人员"); + case 2: + return R.error(evaluationGroup.getName() + "——没有设置考核模板"); + case 3: + return R.error(evaluationGroup.getName() + "——没有绩效流程节点"); + case 4: + return R.error(evaluationGroup.getName() + "——没有设置考核流程"); + case 5: + return R.error(evaluationGroup.getName() + "——没有设置绩效管理人员"); + case 6: + return R.error(evaluationGroup.getName() + "——初始化考核流程失败"); } + } + return R.ok("发起成功").put("data", flowStart); + } - List flowCharts = flowChartService.selectFlowChartsByGroupId(evaluationGroup.getId()); - if(flowCharts.size() == 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - return R.error(evaluationGroup.getName() + "——没有绩效流程节点"); - } - List flowChartDetailRecords = new ArrayList<>(); - for (FlowChart chart:flowCharts - ) {//按照节点顺序获取正确的流程 - List flowChartDetailRecords1 - = flowChartDetailRecordService.selectFlowChartDetailRecordByGroupIdAndChartId(evaluationGroup.getId(), chart.getId()); - flowChartDetailRecords.addAll(flowChartDetailRecords1); - } + private int start(EvaluationGroup evaluationGroup, FlowStart flowStart, Map> staffManages){ - if(flowChartDetailRecords.size() == 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - return R.error(evaluationGroup.getName() + "——没有设置考核流程"); - } - Map chartNameMaps = - flowCharts.stream().collect(Collectors.toMap(FlowChart::getId, FlowChart::getName));//流程节点与流程名称对应map,下面多次循环,减少数据库查找 + //下面初始化员工考核流程 + List staffIds = evaluationGroupService.selectAllStaffSimpleInfoByGroupId(evaluationGroup); - List staffManagers = null; - if(!StringUtil.isEmpty(evaluationGroup.getManagerIds())){ - List mIds = Arrays.stream(evaluationGroup.getManagerIds().split(",")) - .map(new Function() { - @Override - public Long apply(String s) { - return Long.parseLong(s); - } - }).collect(Collectors.toList()); - //查找在职的管理人员 - staffManagers = staffService.selectOnJobByIds(mIds); + if(staffIds.size() == 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - } - if(staffManagers == null || staffManagers.size() == 0){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - return R.error(evaluationGroup.getName() + "——没有设置绩效管理人员"); - } + return 1; + } + List resultModelDtos = resultModelService.selectResultDtoByGroupId(evaluationGroup.getId()); + if(resultModelDtos.size() == 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 + return 2; + } - //下面拷贝一份考评组信息发起后所使用的考评组id为复制后的id - evaluationGroup.setCopyId(evaluationGroup.getId()); - evaluationGroup.setId(null); - evaluationGroup.setGmtCreate(null); - evaluationGroup.setGmtModified(null); - evaluationGroupService.insertEvaluationGroup(evaluationGroup); + List flowCharts = flowChartService.selectFlowChartsByGroupId(evaluationGroup.getId()); + if(flowCharts.size() == 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 + return 3; + } + List flowChartDetailRecords = new ArrayList<>(); + for (FlowChart chart:flowCharts + ) {//按照节点顺序获取正确的流程 + List flowChartDetailRecords1 + = flowChartDetailRecordService.selectFlowChartDetailRecordByGroupIdAndChartId(evaluationGroup.getId(), chart.getId()); + flowChartDetailRecords.addAll(flowChartDetailRecords1); + } - //拷贝考评组的指标信息 - List resultTagetLibs = new ArrayList<>(); + if(flowChartDetailRecords.size() == 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 + return 4; + } + Map chartNameMaps = + flowCharts.stream().collect(Collectors.toMap(FlowChart::getId, FlowChart::getName));//流程节点与流程名称对应map,下面多次循环,减少数据库查找 - for (ResultModelDto dto:resultModelDtos - ) { - - - dto.setEvaluationGroupId(evaluationGroup.getId());//设置拷贝组的id - //下面拷贝一份考评组信息的维度信息 - ResultModel resultModel = new ResultModel(); - BeanUtils.copyProperties(dto, resultModel); - resultModel.setId(null); - resultModelService.insertResultModel(resultModel); - - List libDtos = resultTagetLibService.selectResultTagetLibDtoByModelId(dto.getId()); - dto.setTagetLibs(libDtos); - for (ResultTagetLibDto libDto: libDtos - ) { - //下面拷贝考评组里面的指标信息 - ResultTagetLib resultTagetLib = new ResultTagetLib(); - BeanUtils.copyProperties(libDto, resultTagetLib); - resultTagetLib.setModelId(resultModel.getId());//设置新的维度id - resultTagetLib.setId(null); - resultTagetLibs.add(resultTagetLib); - } - } - if(resultTagetLibs.size() > 0){ - //插入备份的考评组指标信息 - resultTagetLibService.insertResultTagetLibs(resultTagetLibs); - } - - - - - //下面初始化lz_flow流程表 lz_flow_approval_role流程审批表 - List flowApprovalRoles = new ArrayList<>(); - int stepIndex = 0; - for (FlowChartDetailRecord flowChartDetailRecord:flowChartDetailRecords - ) { - Flow flow = new Flow(); - flow.setFlowId(evaluationGroup.getId()); - flow.setOpt("+"); - flow.setStartId(flowStart.getId()); - flow.setChartId(flowChartDetailRecord.getChartId()); - flow.setOptDesc(chartNameMaps.get(flowChartDetailRecord.getChartId())); - - flowService.insertFlow(flow); - FlowApprovalRole flowApprovalRole = null; - if(flowChartDetailRecord.getOptType().intValue() == ChartOptType.APPOINT.getCode()){//指定人员的 - String[] optIds = flowChartDetailRecord.getOptIds().split(","); - for (String id:optIds - ) { - - flowApprovalRole = new FlowApprovalRole(); - flowApprovalRole.setFlowId(flow.getId()); - flowApprovalRole.setApprovalId(Long.parseLong(id)); - flowApprovalRole.setStepType(flowChartDetailRecord.getStepType()); - flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds()); - flowApprovalRole.setType(flowChartDetailRecord.getOptType()); - flowApprovalRoles.add(flowApprovalRole); - flowApprovalRole.setStepIndex(stepIndex); - if(flowChartDetailRecord.getStepType().intValue() == 0){ - //依次 - stepIndex++; + List staffManagers = null; + if(!StringUtil.isEmpty(evaluationGroup.getManagerIds())){ + List mIds = Arrays.stream(evaluationGroup.getManagerIds().split(",")) + .map(new Function() { + @Override + public Long apply(String s) { + return Long.parseLong(s); } - } - //stepIndex++; - if(flowApprovalRole != null){ - stepIndex = flowApprovalRole.getStepIndex() + 1; - } + }).collect(Collectors.toList()); + //查找在职的管理人员 + staffManagers = staffService.selectOnJobByIds(mIds); + + } + if(staffManagers == null || staffManagers.size() == 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 + return 5; + } + + //下面拷贝一份考评组信息发起后所使用的考评组id为复制后的id + evaluationGroup.setCopyId(evaluationGroup.getId()); + evaluationGroup.setId(null); + evaluationGroup.setGmtCreate(null); + evaluationGroup.setGmtModified(null); + evaluationGroupService.insertEvaluationGroup(evaluationGroup); + + //拷贝考评组的指标信息 + List resultTagetLibs = new ArrayList<>(); + + for (ResultModelDto dto:resultModelDtos + ) { + + + dto.setEvaluationGroupId(evaluationGroup.getId());//设置拷贝组的id + //下面拷贝一份考评组信息的维度信息 + ResultModel resultModel = new ResultModel(); + BeanUtils.copyProperties(dto, resultModel); + resultModel.setId(null); + resultModelService.insertResultModel(resultModel); + + List libDtos = resultTagetLibService.selectResultTagetLibDtoByModelId(dto.getId()); + dto.setTagetLibs(libDtos); + for (ResultTagetLibDto libDto: libDtos + ) { + //下面拷贝考评组里面的指标信息 + ResultTagetLib resultTagetLib = new ResultTagetLib(); + BeanUtils.copyProperties(libDto, resultTagetLib); + resultTagetLib.setModelId(resultModel.getId());//设置新的维度id + resultTagetLib.setId(null); + resultTagetLibs.add(resultTagetLib); + } + } + if(resultTagetLibs.size() > 0){ + //插入备份的考评组指标信息 + resultTagetLibService.insertResultTagetLibs(resultTagetLibs); + } + + + + + //下面初始化lz_flow流程表 lz_flow_approval_role流程审批表 + List flowApprovalRoles = new ArrayList<>(); + int stepIndex = 0; + for (FlowChartDetailRecord flowChartDetailRecord:flowChartDetailRecords + ) { + Flow flow = new Flow(); + flow.setFlowId(evaluationGroup.getId()); + flow.setOpt("+"); + flow.setStartId(flowStart.getId()); + flow.setChartId(flowChartDetailRecord.getChartId()); + flow.setOptDesc(chartNameMaps.get(flowChartDetailRecord.getChartId())); + + flowService.insertFlow(flow); + FlowApprovalRole flowApprovalRole = null; + if(flowChartDetailRecord.getOptType().intValue() == ChartOptType.APPOINT.getCode()){//指定人员的 + String[] optIds = flowChartDetailRecord.getOptIds().split(","); + for (String id:optIds + ) { - }else{ flowApprovalRole = new FlowApprovalRole(); flowApprovalRole.setFlowId(flow.getId()); + flowApprovalRole.setApprovalId(Long.parseLong(id)); flowApprovalRole.setStepType(flowChartDetailRecord.getStepType()); flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds()); flowApprovalRole.setType(flowChartDetailRecord.getOptType()); flowApprovalRoles.add(flowApprovalRole); flowApprovalRole.setStepIndex(stepIndex); - - stepIndex++; + if(flowChartDetailRecord.getStepType().intValue() == 0){ + //依次 + stepIndex++; + } + } + //stepIndex++; + if(flowApprovalRole != null){ + stepIndex = flowApprovalRole.getStepIndex() + 1; } + }else{ + flowApprovalRole = new FlowApprovalRole(); + flowApprovalRole.setFlowId(flow.getId()); + flowApprovalRole.setStepType(flowChartDetailRecord.getStepType()); + flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds()); + flowApprovalRole.setType(flowChartDetailRecord.getOptType()); + flowApprovalRoles.add(flowApprovalRole); + flowApprovalRole.setStepIndex(stepIndex); + + stepIndex++; } - //插入记录/flowChart/saveDetailProcs - if(flowApprovalRoles.size() > 0){ - flowApprovalRoleService.insertFlowApprovalRoles(flowApprovalRoles); - //初始化lz_result_details数据 - List resultDetails = new ArrayList<>(); + } + //插入记录/flowChart/saveDetailProcs + if(flowApprovalRoles.size() > 0){ + flowApprovalRoleService.insertFlowApprovalRoles(flowApprovalRoles); + + //初始化lz_result_details数据 + List resultDetails = new ArrayList<>(); - List evaluationStartStaffs = new ArrayList<>(); + List evaluationStartStaffs = new ArrayList<>(); /*//下面初始化管理人员对应关系 for (StaffEntity entity:staffManagers @@ -347,156 +367,154 @@ public class FlowStartServiceImpl extends ServiceImpl 0){//当设置为几级领导时 - ///查找领导,如果不存在那么设置管理人员 - List staffLeader; - String key = staffInfo.getDepartmentId() + "_" + approvalRole.getType(); - if(staffManages.containsKey(key)){ - staffLeader = staffManages.get(staffInfo.getDepartmentId()); - }else{ - DepartManagers departManagers = - staffService.findLeader(staffInfo.getId(), approvalRole.getType()); - staffLeader = departManagers.getManagers(); - staffManages.put(key, departManagers.getManagers()); - } - - if(staffLeader.size() == 0){ - //没有领导,通知到组设置的绩效管理人员 - for (StaffEntity entity:staffManagers - ) { - roleJSON += ("{\"roleId\":0,\"staffId\":" + entity.getId() + "},");//这里写死了权限为0的即为找不到领导 - - } - if(i == 0){//目前只设置一个,多个不明确是否支持,roleJSON是支持多个的 - //设置当前审批员工id current_approval_staff_id - resultRecord.setCurrentApprovalStaffId(staffManagers.get(0).getId()); - //设置当前审批员工姓名 current_approval_staff_name - resultRecord.setCurrentApprovalStaffName(staffManagers.get(0).getName()); - - } - }else{ - for(int j = 0; j 0){//当设置为几级领导时 + ///查找领导,如果不存在那么设置管理人员 + List staffLeader; + String key = staffInfo.getDepartmentId() + "_" + approvalRole.getType(); + if(staffManages.containsKey(key)){ + staffLeader = staffManages.get(staffInfo.getDepartmentId()); }else{ + DepartManagers departManagers = + staffService.findLeader(staffInfo.getId(), approvalRole.getType()); + staffLeader = departManagers.getManagers(); + staffManages.put(key, departManagers.getManagers()); + } + + if(staffLeader.size() == 0){ + //没有领导,通知到组设置的绩效管理人员 + for (StaffEntity entity:staffManagers + ) { + roleJSON += ("{\"roleId\":0,\"staffId\":" + entity.getId() + "},");//这里写死了权限为0的即为找不到领导 + + } if(i == 0){//目前只设置一个,多个不明确是否支持,roleJSON是支持多个的 //设置当前审批员工id current_approval_staff_id - resultRecord.setCurrentApprovalStaffId(approvalRole.getApprovalId()); + resultRecord.setCurrentApprovalStaffId(staffManagers.get(0).getId()); //设置当前审批员工姓名 current_approval_staff_name - resultRecord.setCurrentApprovalStaffName(""); + resultRecord.setCurrentApprovalStaffName(staffManagers.get(0).getName()); + + } + }else{ + for(int j = 0; j 0){//模板里面有添加指标 - for (ResultTagetLibDto libDto: - modelDto.getTagetLibs()) { - - - ResultDetail resultDetail = new ResultDetail(); - resultDetail.setRecordId(resultRecord.getId()); - resultDetail.setTarget(libDto.getName()); - resultDetail.setType(modelDto.getType()); - resultDetail.setKeyResult(libDto.getKeyResult()); - resultDetail.setCheckWeight(libDto.getWeight()); - resultDetail.setStaffId(staffInfo.getId()); - resultDetail.setPriority(libDto.getOrderBy()); - resultDetails.add(resultDetail); } } + + roleJSON += ("{\"roleId\":"+ approvalRole.getRoleId() + + ",\"staffId\":" + staffId + "},"); + continue; + } + break; + } + roleJSON += "]"; + roleJSON = roleJSON.replace(",]", "]"); + resultRecord.setFlowStaffIdRole(roleJSON); + resultRecordService.insertResultRecord(resultRecord); + //下面生成实际的考核流程 + resultRecordService.initFlowRecord(resultRecord.getId()); + //下面生成ResultDetail对象 + for (ResultModelDto modelDto:resultModelDtos + ) { + + + if(modelDto.getTagetLibs() != null && modelDto.getTagetLibs().size() > 0){//模板里面有添加指标 + for (ResultTagetLibDto libDto: + modelDto.getTagetLibs()) { + + + ResultDetail resultDetail = new ResultDetail(); + resultDetail.setRecordId(resultRecord.getId()); + resultDetail.setTarget(libDto.getName()); + resultDetail.setType(modelDto.getType()); + resultDetail.setKeyResult(libDto.getKeyResult()); + resultDetail.setCheckWeight(libDto.getWeight()); + resultDetail.setStaffId(staffInfo.getId()); + resultDetail.setPriority(libDto.getOrderBy()); + resultDetails.add(resultDetail); + } } } - //如果有数据插入lz_result_detail表 - if(resultDetails.size() > 0){ - // - resultDetailService.insertResultDetails(resultDetails); + } + //如果有数据插入lz_result_detail表 + if(resultDetails.size() > 0){ + // + resultDetailService.insertResultDetails(resultDetails); - } - - - - evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs); - //下面通知所有参与考核人员 - - //如果有下面通知所有管理人员 - }else{ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 - return R.error(evaluationGroup.getName() + "——初始化考核流程失败"); } + + + evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs); + //下面通知所有参与考核人员 + + //如果有下面通知所有管理人员 + }else{ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 + return 6; } - return R.ok("发起成功").put("data", flowStart); + return 0; } @Override