package com.gkhy.safePlatform.specialWork.service.impl; import java.math.BigDecimal; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.rpc.apimodel.AccountDepartmentService; import com.gkhy.safePlatform.account.rpc.apimodel.AccountUserService; import com.gkhy.safePlatform.account.rpc.apimodel.CameraService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.CameraRpcRespDTO; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.DepInfoRPCRespDTO; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.UserInfoRPCRespDTO; import com.gkhy.safePlatform.commons.co.ContextCacheUser; import com.gkhy.safePlatform.commons.enums.E; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.AusinessException; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.BeanCopyUtils; import com.gkhy.safePlatform.commons.utils.RPCUtils; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import com.gkhy.safePlatform.equipment.rpc.api.EquipmentRpcAPi; import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.MaterialReceiveRecordsRPCRespDto; import com.gkhy.safePlatform.specialWork.entity.*; import com.gkhy.safePlatform.specialWork.enums.*; import com.gkhy.safePlatform.specialWork.model.bo.*; import com.gkhy.safePlatform.specialWork.model.dto.req.*; import com.gkhy.safePlatform.specialWork.model.dto.resp.*; import com.gkhy.safePlatform.specialWork.model.dto.resp.applicant.*; import com.gkhy.safePlatform.specialWork.model.dto.resp.approver.*; import com.gkhy.safePlatform.specialWork.model.dto.resp.others.*; import com.gkhy.safePlatform.specialWork.model.query.AllWorkApplyPageQuery; import com.gkhy.safePlatform.specialWork.model.query.WorkApplyApplyingPageQuery; import com.gkhy.safePlatform.specialWork.model.query.WorkApplyPendingPageQuery; import com.gkhy.safePlatform.specialWork.model.query.db.AllWorkApplyPageDBQuery; import com.gkhy.safePlatform.specialWork.model.query.db.WorkApplyApplyingPageDBQuery; import com.gkhy.safePlatform.specialWork.model.query.db.WorkApplyPendingPageDBQuery; import com.gkhy.safePlatform.specialWork.mq.msg.ApplySpecialWorkMsg; import com.gkhy.safePlatform.specialWork.service.*; import com.gkhy.safePlatform.specialWork.service.baseService.*; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.config.annotation.DubboReference; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; import java.time.LocalDateTime; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service("workApplyService") public class WorkApplyServiceImpl implements WorkApplyService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @DubboReference(check = false) private AccountUserService accountUserService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @DubboReference(check = false) private EquipmentRpcAPi equipmentRpcAPi; @DubboReference(check = false) private CameraService cameraService; @Autowired private WorkApplyInfoService workApplyInfoService; @Autowired private WorkApplyOperatorInfoService workApplyOperatorInfoService; @Autowired private WorkApprovalRuleInfoService workApprovalRuleInfoService; @Autowired private WorkApprovalStepInfoService workApprovalStepInfoService; @Autowired private WorkApprovalUnitInfoService workApprovalUnitInfoService; @Autowired private WorkApprovalItemInfoService workApprovalItemInfoService; @Autowired private WorkApprovalFilledItemInfoService workApprovalFilledItemInfoService; @Autowired private WorkApprovalItemMeasureInfoService workApprovalItemMeasureInfoService; @Autowired private WorkApprovalItemStandInfoService workApprovalItemStandInfoService; @Autowired private RuleService ruleService; @Autowired private ApprovalRuleStepService approvalRuleStepService; @Autowired private ApprovalRuleUnitService approvalRuleUnitService; @Autowired private ApprovalRuleUnitItemService approvalRuleUnitItemService; @Autowired private ApprovalRuleStandService approvalRuleStandService; @Autowired private ApprovalRuleItemMeasureService approvalRuleItemMeasureService; @Autowired private WorkHotInfoService workHotInfoService; @Autowired private WorkConfinedSpaceInfoService workConfinedSpaceInfoService; @Autowired private WorkAtHeightInfoService workAtHeightInfoService; @Autowired private WorkBrokenCircuitInfoService workBrokenCircuitInfoService; @Autowired private WorkTemporaryPowerInfoService workTemporaryPowerInfoService; @Autowired private WorkHoistingInfoService workHoistingInfoService; @Autowired private WorkBlindPlatePluggingInfoService workBlindPlatePluggingInfoService; @Autowired private WorkGroundBreakingInfoService workGroundBreakingInfoService; @Autowired private WorkApplyRocketMQService workApplyRocketMQService; @Autowired private ApprovalWorkRocketMQService approvalWorkRocketMQService; @Autowired private WorkApplyRecordService workApplyRecordService; @Autowired private SpecialWorkMinoService specialWorkMinoService; @Autowired private RedissonClient redissonClient; @Autowired private WorkPrintService workPrintService; @Autowired private WorkMaterialInfoService workMaterialInfoService; @Autowired private MaterialDetailInfoService materialDetailInfoService; @Autowired private WorkInfoService workInfoService; @Autowired private MaterialAllocationBaseService materialAllocationBaseService; @Autowired private WorkMaterialRecordsInfoService workMaterialRecordsInfoService; @Autowired private WorkApprovalDeviceInfoService workApprovalDeviceInfoService; @Override @Transactional public void workApply(ContextCacheUser currentUser, WorkApplyReqDTO< ? extends WorkApplyEight> applyReqDTO) { // 0.基本判断 if (applyReqDTO.getWorkLevel() == null || applyReqDTO.getWorkType() == null || applyReqDTO.getOperatorUids() == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } if (StringUtils.isBlank(applyReqDTO.getWorkContent())) { throw new AusinessException(E.DATA_PARAM_NULL, "作业内容不能为空"); } if (StringUtils.isBlank(applyReqDTO.getWorkLocation())) { throw new AusinessException(E.DATA_PARAM_NULL, "作业地点不能为空"); } if (StringUtils.isBlank(applyReqDTO.getHazardIdentification())) { throw new AusinessException(E.DATA_PARAM_NULL, "危险辨识不能为空"); } if (applyReqDTO.getExpEndTime() == null || applyReqDTO.getExpStartTime() == null) { throw new AusinessException(E.DATA_PARAM_NULL, "时间不能为空"); } //获取当前时间 LocalDateTime applyTime = LocalDateTime.now(); if(applyTime.isAfter(applyReqDTO.getExpStartTime())){ throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "作业开始时间不可早于作业申请时间"); } if (applyReqDTO.getExpStartTime().isAfter(applyReqDTO.getExpEndTime())) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "时间区间非法"); } WorkTypeEnum workTypeEnum = WorkTypeEnum.parse(applyReqDTO.getWorkType()); if (workTypeEnum == null) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "作业类型非法"); } WorkLevelEnum workLevelEnum = WorkLevelEnum.parse(applyReqDTO.getWorkLevel()); if (workLevelEnum == null) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "作业等级非法"); } if (applyReqDTO.getOperatorUids().size() == 0) { throw new AusinessException(E.DATA_PARAM_NULL, "请选择作业人"); } if (applyReqDTO.getWorkDetail() == null) { throw new AusinessException(E.DATA_PARAM_NULL, "请填写作业主体内容"); } if(null != applyReqDTO.getMaBaseId() && applyReqDTO.getMaBaseId() != 0){ if(CollectionUtils.isEmpty(applyReqDTO.getReceiveUids())){ throw new AusinessException(E.DATA_PARAM_NULL, "请选择领取人员!"); } //检查应急物资 //workMaterialCheck(applyReqDTO.getWmAddReqDTOList()); } // 设备选择 if (applyReqDTO.getCameraIds() == null || applyReqDTO.getCameraIds().size() == 0) { throw new AusinessException(E.DATA_PARAM_NULL, "请选择现场设备"); } // 设备id判断重复 if (applyReqDTO.getCameraIds().stream().distinct().count() != applyReqDTO.getCameraIds().size()) { throw new AusinessException(E.DATA_PARAM_NULL, "设备提交重复"); } // 校验设备 SearchResultVO> listSearchResultVO = cameraService.listByCameraIdList(applyReqDTO.getCameraIds()); if (!listSearchResultVO.getCode().equals(ResultCodes.OK.getCode())) { throw new BusinessException(listSearchResultVO.getCode(), listSearchResultVO.getMsg()); } if (listSearchResultVO.getData() == null || ((List)listSearchResultVO.getData()).size() == 0 || ((List)listSearchResultVO.getData()).size() != applyReqDTO.getCameraIds().size()) { throw new AusinessException(E.DATA_PARAM_NULL, "设备不存在"); } // 检查八大作业 WorkTypeMatchDetailCheck(workTypeEnum, applyReqDTO.getWorkDetail()); // 该部门下获取审批流 Long depId = currentUser.getDepId(); List rpcUsers; List operatorUids = applyReqDTO.getOperatorUids(); ResultVO> rpcOperatorsResult = accountUserService.listUserInfoByUids(operatorUids); if (rpcOperatorsResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcOperatorsResult.getData() != null) { rpcUsers = RPCUtils.castList(rpcOperatorsResult.getData(), UserInfoRPCRespDTO.class); if (rpcUsers.size() != operatorUids.size()) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "作业人不存在"); } }else{ throw new BusinessException(ResultCodes.RPC_DATA_NULL); } }else{ throw new BusinessException(rpcOperatorsResult.getCode(), rpcOperatorsResult.getMsg()); } // // 判断作业人员是否是部门或者子部门的人员 // ResultVO rpcResult = accountDepartmentService.isSelfOrSubDep(depId, operator.getDepId()); // if (rpcResult.getCode().equals(ResultCodes.OK.getCode())) { // if (rpcResult.getData() != null) { //// if (!(Boolean) rpcResult.getData()) { //// throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "作业人部门越界"); //// } //// }else{ //// throw new BusinessException(ResultCodes.RPC_DATA_NULL); //// } // }else{ // throw new BusinessException(rpcOperatorResult.getCode(), rpcOperatorResult.getMsg()); // } // 1.递归寻找部门的审批规则 ApprovalRuleBO ruleBO = ruleService.recursiveQueryRule(depId, applyReqDTO.getWorkType(), applyReqDTO.getWorkLevel()); if (ruleBO == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "无可用审批流"); } // 2.准备工作 // 2.1 workApprovalUStep // 根据 approvalRuleId 获取各个层级 List ruleSteps = approvalRuleStepService.listApprovalRuleStepByRuleId(ruleBO.getRuleId()); if (ruleSteps.size() < 1) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "审批规则非法,审批层级不存在"); } // 2.2 workApprovalUnit 获取各个单元 List ruleUnits = approvalRuleUnitService.listApprovalUnitByRuleId(ruleBO.getRuleId()); // 2.3 workApprovalItem 获取各个审批项 List ruleUnitItems = approvalRuleUnitItemService.listApprovalRuleUnitItemByRuleId(ruleBO.getRuleId()); // 1.workApply WorkApplyInfo applyEntity = new WorkApplyInfo(); applyEntity.setId(IdUtil.getSnowflake(0,0).nextId()); applyEntity.setDepId(currentUser.getDepId()); applyEntity.setApplyUid(currentUser.getUid()); applyEntity.setApplyUname(currentUser.getRealName()); applyEntity.setDepName(currentUser.getDepName()); applyEntity.setWorkType(applyReqDTO.getWorkType()); applyEntity.setWorkLevel(applyReqDTO.getWorkLevel()); // 申请中状态暂定 当前创建就进入审批中 applyEntity.setStatus(WorkApplyStatusEnum.STATU_IN_APPROVAL.getStatus()); applyEntity.setApplyTime(applyTime); applyEntity.setExpStartTime(applyReqDTO.getExpStartTime()); applyEntity.setExpEndTime(applyReqDTO.getExpEndTime()); applyEntity.setGmtCreate(LocalDateTime.now()); applyEntity.setWorkContent(applyReqDTO.getWorkContent()); applyEntity.setWorkLocation(applyReqDTO.getWorkLocation()); applyEntity.setHazardIdentification(applyReqDTO.getHazardIdentification()); applyEntity.setMaBaseId(applyReqDTO.getMaBaseId()); // operator List operatorEntities = new ArrayList<>(rpcUsers.size()); WorkApplyOperatorInfo operatorEntity; for (UserInfoRPCRespDTO respDTO : rpcUsers) { operatorEntity = new WorkApplyOperatorInfo(); operatorEntity.setId(IdUtil.getSnowflake(0, 0).nextId()); operatorEntity.setOperatorUid(respDTO.getUid()); operatorEntity.setOperatorUname(respDTO.getRealName()); operatorEntity.setOperatorIdentify(respDTO.getIdentify()); operatorEntity.setOperatorPhone(respDTO.getPhone()); operatorEntity.setWorkApplyId(applyEntity.getId()); operatorEntities.add(operatorEntity); } //material List saveWorkMaterialList = new ArrayList<>(); List saveWorkMaterialRecordList = new ArrayList<>(); Byte mResult = -1; if(null != applyReqDTO.getMaBaseId() && applyReqDTO.getMaBaseId() != 0) { MaterialReceiveReqDTO receiveReq = new MaterialReceiveReqDTO(); receiveReq.setReceiveUids(applyReqDTO.getReceiveUids()); receiveReq.setMaBaseId(applyReqDTO.getMaBaseId()); List materialReceiveRecordsList = materialAllocationBaseService.materialReceive(receiveReq); //记录作业领取详细清单 List materialDetailReceiveRecordsList = materialAllocationBaseService.materialDetailReceiveRecords(receiveReq); for (MaterialReceiveRecordsRespDTO materialRecord:materialReceiveRecordsList) { WorkMaterialInfo workMaterialInfo = new WorkMaterialInfo(); //作业物资填充 workMaterialInfo.setId(IdUtil.getSnowflake(0, 0).nextId()); workMaterialInfo.setMaterialName(materialRecord.getMaterialName()); workMaterialInfo.setSmallClassifyId(materialRecord.getBigClassifyId()); workMaterialInfo.setBigClassifyId(materialRecord.getBigClassifyId()); workMaterialInfo.setBigClassifyName(materialRecord.getBigClassifyName()); workMaterialInfo.setMaBaseId(materialRecord.getMaBaseId()); workMaterialInfo.setConfigurationLevel(materialRecord.getConfigurationLevel()); workMaterialInfo.setConsumable(materialRecord.getConsumable()); workMaterialInfo.setStandVal(materialRecord.getStandVal()); workMaterialInfo.setUseCount(materialRecord.getReceiveCount()); workMaterialInfo.setWorkApplyId(applyEntity.getId()); workMaterialInfo.setMdId(materialRecord.getMdId()); workMaterialInfo.setReceiveUids(materialRecord.getReceiveUids()); workMaterialInfo.setReceiveUnames(materialRecord.getReceiveUnames()); saveWorkMaterialList.add(workMaterialInfo); //过滤出作业物资领取清单 List selectList = materialDetailReceiveRecordsList.stream().filter(item -> item.getSmallClassifyId().equals(materialRecord.getSmallClassifyId())).collect(Collectors.toList()); for (MaterialReceiveRecordsRPCRespDto materialDetailReceiveRecord:selectList) { WorkMaterialRecordsInfo workMaterialRecordsInfo = new WorkMaterialRecordsInfo(); //作业物资填充 workMaterialRecordsInfo.setId(IdUtil.getSnowflake(0, 0).nextId()); workMaterialRecordsInfo.setMaterialName(materialDetailReceiveRecord.getMaterialName()); workMaterialRecordsInfo.setMaterialNo(materialDetailReceiveRecord.getMaterialNo()); workMaterialRecordsInfo.setRfid(materialDetailReceiveRecord.getRfid()); workMaterialRecordsInfo.setReceiveId(materialDetailReceiveRecord.getId()); workMaterialRecordsInfo.setWorkMaterialId(workMaterialInfo.getId()); workMaterialRecordsInfo.setWorkApplyId(applyEntity.getId()); workMaterialRecordsInfo.setReceiveUid(materialDetailReceiveRecord.getReceiveUid()); workMaterialRecordsInfo.setReceiveUname(materialDetailReceiveRecord.getReceiveUname()); workMaterialRecordsInfo.setReceiveTime(materialDetailReceiveRecord.getReceiveTime()); saveWorkMaterialRecordList.add(workMaterialRecordsInfo); } } mResult = getMrsult(saveWorkMaterialList); }else{ mResult = MaterialCheckResultEnum.UNASSOCIATED_MATREIALS.getType(); } applyEntity.setMaterialStatus(mResult); // rule WorkApprovalRuleInfo ruleEntity = new WorkApprovalRuleInfo(); ruleEntity.setId(IdUtil.getSnowflake(0,0).nextId()); ruleEntity.setApprovalRuleId(ruleBO.getRuleId()); ruleEntity.setApprovalRuleName(ruleBO.getRuleName()); ruleEntity.setDepId(ruleBO.getDepId()); ruleEntity.setDepName(ruleBO.getDepName()); ruleEntity.setWorkLevel(ruleBO.getWorkLevel()); ruleEntity.setWorkType(ruleBO.getWorkType()); ruleEntity.setWorkApplyId(applyEntity.getId()); // step List ruleStepBOs = new ArrayList<>(ruleSteps.size()); WorkApprovalStepInfoBO ruleStepBO; for (int i = 0; i < ruleSteps.size(); i++) { ApprovalRuleStep ruleStep = ruleSteps.get(i); ruleStepBO = new WorkApprovalStepInfoBO(); ruleStepBO.setId(IdUtil.getSnowflake(0, 0).nextId()); ruleStepBO.setStepSerial(ruleStep.getStepSerial()); ruleStepBO.setType(ruleStep.getAuditType()); ruleStepBO.setOriginalPreStepId(ruleStep.getPreStepId()); ruleStepBO.setWorkApplyId(applyEntity.getId()); ruleStepBO.setOriginalId(ruleStep.getStepId()); ruleStepBO.setContinueTime(ruleStep.getContinueTime()); ruleStepBO.setContinueTimeUnit(ruleStep.getContinueTimeUnit()); ruleStepBO.setStepName(ruleStep.getStepName()); ruleStepBO.setAuditType(ruleStep.getAuditType()); ruleStepBO.setPersonType(ruleStep.getPersonType()); ruleStepBO.setApprovalType(ruleStep.getApprovalType()); ruleStepBO.setContentType(ruleStep.getContentType()); if (ruleStep.getPreStepId() == null) { // 当前指向第一个层级 applyEntity.setApprovalStepId(ruleStepBO.getId()); } ruleStepBOs.add(ruleStepBO); if (i == 0) { ruleStepBO.setApprovalResult(WorkApprovalStepResultEnum.RESULT_IN_APPROVAL.getResult()); ruleStepBO.setStartApprovalTime(LocalDateTime.now()); }else{ ruleStepBO.setApprovalResult(WorkApprovalStepResultEnum.WAIT_TO_START.getResult()); } } // 整理ruleStepEntities if (ruleStepBOs.size() > 1) { ruleStepBOs = this.tidyRuleStepEntities(ruleStepBOs); } // 2.unit List unitBOs = new ArrayList<>(ruleUnits.size()); WorkApprovalUnitInfoBO unitBO; for (int i = 0; i < ruleStepBOs.size(); i++) { WorkApprovalStepInfoBO ruleStepInfo = ruleStepBOs.get(i); List stepUnits = ruleUnits.stream().filter(approvalRuleUnit -> // 当前层级的单元 ruleStepInfo.getOriginalId().equals(approvalRuleUnit.getStepId())) // 集合 .collect(Collectors.toList()); if (stepUnits.size() == 0) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "层级单元个数为0,请检查审批规则"); } for (ApprovalRuleUnit ruleUnit : stepUnits) { unitBO = new WorkApprovalUnitInfoBO(); unitBO.setId(IdUtil.getSnowflake(0, 0).nextId()); unitBO.setStepId(ruleStepInfo.getId()); unitBO.setApprovalUid(ruleUnit.getBindUid()); unitBO.setApprovalUname(ruleUnit.getBindUname()); unitBO.setOriginalId(ruleUnit.getUnitId()); unitBO.setWorkApplyId(applyEntity.getId()); // 第一个层级的单元开始审批 if (i == 0) { unitBO.setResult(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()); }else{ unitBO.setResult(WorkApprovalUnitResultEnum.WAIT_TO_START.getResult()); } unitBOs.add(unitBO); } } // 3.item List itemBOs = new ArrayList<>(ruleUnitItems.size()); WorkApprovalItemInfoBO itemBO; for (WorkApprovalStepInfoBO ruleStepInfo : ruleStepBOs) { List unitItems = ruleUnitItems.stream().filter(ruleUnitItem -> // 当前单元的审批项 ruleStepInfo.getOriginalId().equals(ruleUnitItem.getStepId())) // 集合 .collect(Collectors.toList()); if (unitItems.size() == 0) { // 不包含审批项 <=> 填报单元就行 ruleStepInfo.setContainItem(Boolean.FALSE); }else{ ruleStepInfo.setContainItem(Boolean.TRUE); for (ApprovalRuleUnitItem unitItem : unitItems) { itemBO = new WorkApprovalItemInfoBO(); itemBO.setId(IdUtil.getSnowflake(0, 0).nextId()); itemBO.setItemName(unitItem.getItemName()); itemBO.setType(unitItem.getType()); itemBO.setStepId(ruleStepInfo.getId()); itemBO.setOriginalStandId(unitItem.getStandId()); itemBO.setOriginalMeasureId(unitItem.getMeasureId()); itemBO.setOriginalId(unitItem.getId()); itemBO.setWorkApplyId(applyEntity.getId()); itemBOs.add(itemBO); } } } // 4.item measure Set measureIdSet = new HashSet<>(); Set standIdSet = new HashSet<>(); for (WorkApprovalItemInfoBO itemInfo : itemBOs) { // 获取 itemBO 的 measures if (itemInfo.getOriginalMeasureId() != null) { measureIdSet.add(itemInfo.getOriginalMeasureId()); } // 获取 itemBO 的 stands if (itemInfo.getOriginalStandId() != null) { standIdSet.add(itemInfo.getOriginalStandId()); } } List measureEntities = new ArrayList<>(measureIdSet.size()); Map measureMap = new HashMap<>(measureIdSet.size()); if (measureIdSet.size() > 0) { List measures = approvalRuleItemMeasureService.listItemMeasureByIds(measureIdSet); WorkApprovalItemMeasureInfo measureEntity; for (ApprovalRuleItemMeasureDO measure : measures) { measureEntity = new WorkApprovalItemMeasureInfo(); measureEntity.setId(IdUtil.getSnowflake(0, 0).nextId()); measureEntity.setContext(measure.getContext()); measureEntity.setCorrectVal(measure.getCorrectVal()); measureEntity.setType(measure.getType()); measureEntity.setWorkType(measure.getWorkType()); measureEntity.setWorkApplyId(applyEntity.getId()); measureEntities.add(measureEntity); measureMap.put(measure.getId(), measureEntity); } } List standEntities = new ArrayList<>(standIdSet.size()); Map standMap = new HashMap<>(standIdSet.size()); if (standIdSet.size() > 0) { List stands = approvalRuleStandService.listItemStandByIds(standIdSet); WorkApprovalItemStandInfo standEntity; for (ApprovalRuleItemStandDO stand : stands) { standEntity = new WorkApprovalItemStandInfo(); standEntity.setId(IdUtil.getSnowflake(0, 0).nextId()); standEntity.setDepId(stand.getDepId()); standEntity.setMaxVal(stand.getMaxVal()); standEntity.setMaxValMatchPattern(stand.getMaxValMatchPattern()); standEntity.setMinVal(stand.getMinVal()); standEntity.setMinValMatchPattern(stand.getMinValMatchPattern()); standEntity.setTitle(stand.getTitle()); standEntity.setType(stand.getType()); standEntity.setWorkApplyId(applyEntity.getId()); standEntities.add(standEntity); standMap.put(stand.getId(), standEntity); } } for (WorkApprovalItemInfoBO itemInfo : itemBOs) { if (itemInfo.getOriginalMeasureId() != null) { WorkApprovalItemMeasureInfo measureInfo = measureMap.get(itemInfo.getOriginalMeasureId()); if (measureInfo != null) { itemInfo.setMeasureId(measureInfo.getId()); } } if (itemInfo.getOriginalStandId() != null) { WorkApprovalItemStandInfo standInfo = standMap.get(itemInfo.getOriginalStandId()); if (standInfo != null) { itemInfo.setStandId(standInfo.getId()); } } } // 6.现场设备 List cameraRpcRespDTOs = (List) listSearchResultVO.getData(); List deviceInfoEntities = new ArrayList<>(cameraRpcRespDTOs.size()); WorkApprovalDeviceInfo deviceInfoEntity; for (CameraRpcRespDTO cameraRpcRespDTO : cameraRpcRespDTOs) { deviceInfoEntity = new WorkApprovalDeviceInfo(); deviceInfoEntity.setId(IdUtil.getSnowflake(0,0).nextId()); deviceInfoEntity.setWorkApplyId(applyEntity.getId()); deviceInfoEntity.setDeviceNo(cameraRpcRespDTO.getDeviceNo()); deviceInfoEntity.setDeviceName(cameraRpcRespDTO.getName()); deviceInfoEntity.setShortName(cameraRpcRespDTO.getShortName()); deviceInfoEntities.add(deviceInfoEntity); } //数据库入库 // execute //加分布式锁 RLock lock = redissonClient.getLock("LOCK_WORK_APPLY"); try { lock.lock(10, TimeUnit.SECONDS); //生成作业编号 int workCount = workApplyInfoService.countWorkApplyInfo(); applyEntity.setWorkPermitNo(this.generateWorkCode(workCount)); // 八大作业子表 WorkTypeMatchDetailSave(workTypeEnum, applyEntity, applyReqDTO.getWorkDetail(), currentUser); // 作业申请 workApplyInfoService.saveWorkApplyInfo(applyEntity); // 操作人 workApplyOperatorInfoService.saveBatchOperator(operatorEntities); // 规则 workApprovalRuleInfoService.saveRule(ruleEntity); // 层级 workApprovalStepInfoService.saveBatchRuleStep(ruleStepBOs.stream().map( // 强转实体类 item -> (WorkApprovalStepInfo) item) // 集合 .collect(Collectors.toList())); // 单元 workApprovalUnitInfoService.saveBatchRuleUnit(unitBOs.stream().map( // 强转实体类 item -> (WorkApprovalUnitInfo) item) // 集合 .collect(Collectors.toList())); // 审批项 if (itemBOs.size() > 0) { workApprovalItemInfoService.saveBatchRuleItem(itemBOs.stream().map( // 强转实体类 item -> (WorkApprovalItemInfo) item) // 集合 .collect(Collectors.toList())); } // 安全措施 if (measureEntities.size() > 0) { workApprovalItemMeasureInfoService.saveBatchMeasure(measureEntities); } // 标准 if (standEntities.size() > 0) { workApprovalItemStandInfoService.saveBatchStand(standEntities); } //应急物资 if(saveWorkMaterialList.size()>0){ workMaterialInfoService.saveBatch(saveWorkMaterialList); } if(saveWorkMaterialRecordList.size()>0){ workMaterialRecordsInfoService.saveBatch(saveWorkMaterialRecordList); } // 设备 workApprovalDeviceInfoService.saveBatchDevice(deviceInfoEntities); workApplyRecordService.log(currentUser, ProcessOperationEnum.APPLY, applyEntity.getId(), null, null, null); //创建成功,释放锁 lock.unlock(); //发送延时消息 ApplySpecialWorkMsg applySpecialWorkMsg = new ApplySpecialWorkMsg(); applySpecialWorkMsg.setWorkApplyId(applyEntity.getId()); applySpecialWorkMsg.setExpStartTime(conversionTimeType(applyEntity.getExpStartTime())); workApplyRocketMQService.syncSend(applySpecialWorkMsg); } catch (BusinessException e) { e.printStackTrace(); throw new BusinessException(e.getCode(), e.getMessage()); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(ResultCodes.SERVER_ERROR); } finally { if (lock.isLocked()) { lock.unlock(); } } } public Byte getMrsult(List list){ Byte mcResult = -1; //获取物资关联数据 List mustList= list .stream() .filter(wm -> wm.getConfigurationLevel().equals(ConfigurationLevelEnum.MANDATORY.getCode())) .collect(Collectors.toList()); List optList= list .stream() .filter(wm -> wm.getConfigurationLevel().equals(ConfigurationLevelEnum.OPTIONAL.getCode())) .collect(Collectors.toList()); List highList= list .stream() .filter(wm -> wm.getConfigurationLevel().equals(ConfigurationLevelEnum.HIGH_CONFIGURATION.getCode())) .collect(Collectors.toList()); if(mustList.size()>0){//存在必选 for(WorkMaterialInfo materialInfo:mustList){ if(materialInfo.getUseCount()0){ mcResult = MaterialCheckResultEnum.MATERIAL_ALLOCATION_HIGH.getType(); }else if(optList.size()>0){ mcResult = MaterialCheckResultEnum.MATERIAL_ALLOCATION_DISCIPLINE.getType(); }else { mcResult = MaterialCheckResultEnum.SUFFICIENT_REQUIRED_MATERIALS.getType(); } } }else{//不存在必选物资 if(highList.size()>0){ mcResult = MaterialCheckResultEnum.MATERIAL_ALLOCATION_HIGH.getType(); }else{ mcResult = MaterialCheckResultEnum.MATERIAL_ALLOCATION_DISCIPLINE.getType(); } } return mcResult; } private void WorkTypeMatchDetailSave(WorkTypeEnum workTypeEnum,WorkApplyInfo applyEntity, Object workDetail,ContextCacheUser currentUser) { switch (workTypeEnum) { case WORK_FIRE: if (workDetail instanceof WorkApplyHotReqDTO) { WorkApplyHotReqDTO workApplyHotReqDTO = ((WorkApplyHotReqDTO) workDetail); WorkHotInfo workHotInfo = new WorkHotInfo(); workHotInfo.setWorkApplyId(applyEntity.getId()); workHotInfo.setId(IdUtil.getSnowflake(0,0).nextId()); workHotInfo.setHotMethod(workApplyHotReqDTO.getHotMethod()); workHotInfo.setOtherSpecialWork(workApplyHotReqDTO.getOtherSpecialWork()); workHotInfoService.save(workHotInfo); applyEntity.setWorkDetailId(workHotInfo.getId()); } break; case WORK_HANG: if (workDetail instanceof WorkApplyHoistingReqDTO) { WorkApplyHoistingReqDTO reqDTO = ((WorkApplyHoistingReqDTO) workDetail); WorkHoistingInfo vo = new WorkHoistingInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setHoistingToolName(reqDTO.getHoistingToolName()); vo.setWeightMass(reqDTO.getWeightMass()); workHoistingInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_DIF_SOLI: if (workDetail instanceof WorkApplyGroundBreakingReqDTO) { WorkApplyGroundBreakingReqDTO reqDTO = ((WorkApplyGroundBreakingReqDTO) workDetail); ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(reqDTO.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); WorkGroundBreakingInfo vo = new WorkGroundBreakingInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setOperationDepId(reqDTO.getOperationDepId()); vo.setOperationDepName(depInfoByDepId.getDepName()); vo.setGbMethod(reqDTO.getGbMethod()); vo.setGbScope(reqDTO.getGbScope()); vo.setGbPath(reqDTO.getGbPath()); vo.setOtherSpecialWork(reqDTO.getOtherSpecialWork()); workGroundBreakingInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_BROKE_ROAD: if (workDetail instanceof WorkApplyBrokenCircuitReqDTO) { WorkApplyBrokenCircuitReqDTO reqDTO = ((WorkApplyBrokenCircuitReqDTO) workDetail); ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(reqDTO.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); WorkBrokenCircuitInfo vo = new WorkBrokenCircuitInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setOperationDepId(reqDTO.getOperationDepId()); vo.setOperationDepName(depInfoByDepId.getDepName()); vo.setBcReason(reqDTO.getBcReason()); vo.setBcExplain(reqDTO.getBcExplain()); vo.setBcPath(reqDTO.getBcPath()); vo.setInvolvedDepIds(reqDTO.getInvolvedDepIds()); workBrokenCircuitInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_HIGH_SPACE: if (workDetail instanceof WorkApplyAtHighReqDTO) { WorkApplyAtHighReqDTO reqDTO = ((WorkApplyAtHighReqDTO) workDetail); ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(reqDTO.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); WorkAtHeightInfo vo = new WorkAtHeightInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setOperationDepId(reqDTO.getOperationDepId()); vo.setOperationDepName(depInfoByDepId.getDepName()); vo.setOperationHeight(reqDTO.getOperationHeight()); vo.setOtherSpecialWork(reqDTO.getOtherSpecialWork()); workAtHeightInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_BLIND_PLATE: if (workDetail instanceof WorkApplyBlindPlatePluggingReqDTO) { WorkApplyBlindPlatePluggingReqDTO reqDTO = ((WorkApplyBlindPlatePluggingReqDTO) workDetail); WorkBlindPlatePluggingInfo vo = new WorkBlindPlatePluggingInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setBpCode(reqDTO.getBpCode()); vo.setMainMedia(reqDTO.getMainMedia()); vo.setTemperature(reqDTO.getTemperature()); vo.setPressure(reqDTO.getPressure()); vo.setBpMaterialQuality(reqDTO.getBpMaterialQuality()); vo.setBpSpecification(reqDTO.getBpSpecification()); vo.setBpLocation(reqDTO.getBpLocation()); vo.setBpLocationMapPath(reqDTO.getBpLocationMapPath()); vo.setInstallBpTime(reqDTO.getInstallBpTime()); vo.setUninstallBpTime(reqDTO.getUninstallBpTime()); vo.setOtherSpecialWork(reqDTO.getOtherSpecialWork()); workBlindPlatePluggingInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_CLOSE_SPACE: if (workDetail instanceof WorkApplyConfinedSpaceReqDTO) { WorkApplyConfinedSpaceReqDTO reqDTO = ((WorkApplyConfinedSpaceReqDTO) workDetail); ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(reqDTO.getCsDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); WorkConfinedSpaceInfo vo = new WorkConfinedSpaceInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setCsDepId(reqDTO.getCsDepId()); vo.setCsDepName(depInfoByDepId.getDepName()); vo.setCsName(reqDTO.getCsName()); vo.setCsOriginalName(reqDTO.getCsOriginalName()); vo.setOtherSpecialWork(reqDTO.getOtherSpecialWork()); workConfinedSpaceInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; case WORK_TEMP_ELECTRIC: if (workDetail instanceof WorkApplyTemporaryPowerReqDTO) { WorkApplyTemporaryPowerReqDTO reqDTO = ((WorkApplyTemporaryPowerReqDTO) workDetail); WorkTemporaryPowerInfo vo = new WorkTemporaryPowerInfo(); vo.setWorkApplyId(applyEntity.getId()); vo.setId(IdUtil.getSnowflake(0,0).nextId()); vo.setPowerAccessPoint(reqDTO.getPowerAccessPoint()); vo.setWorkingVoltage(reqDTO.getWorkingVoltage()); vo.setEquipmentAndPower(reqDTO.getEquipmentAndPower()); workTemporaryPowerInfoService.save(vo); applyEntity.setWorkDetailId(vo.getId()); } break; default: { throw new RuntimeException(); } // throw new BusinessException(ResultCodes.SERVER_ERROR); } } /*private void workMaterialCheck(List wmAddReqDTOList) { //获取配置 *//*List materialDetailInfoList = materialDetailInfoService.listByMaBaseId(maId); //过滤出包含必选的 List selectList= materialDetailInfoList .stream() .filter(md -> md.getConfigurationLevel().equals(ConfigurationLevelEnum.MANDATORY.getCode())) .collect(Collectors.toList());*//* for (WorkMaterialAddReqDTO workMaterialAddReqDTO:wmAddReqDTOList) { //验证数据 if(null == workMaterialAddReqDTO.getMaterialId()){ throw new AusinessException(E.DATA_PARAM_NULL,"配置物资id不可为空!"); } if(null == workMaterialAddReqDTO.getUseCount()){ throw new AusinessException(E.DATA_PARAM_NULL,"数量不能为空!"); } if(null == workMaterialAddReqDTO.getDepId()){ throw new AusinessException(E.DATA_PARAM_NULL,"部门不能为空!"); } } *//*for(MaterialDetailInfo md:selectList){ List collect = wmAddReqDTOList .stream() .filter(wm -> wm.getmId().equals(md.getId())) .collect(Collectors.toList()); if(collect.size() == 0){ throw new AusinessException(E.DATA_PARAM_NULL,"必选物资未选则!"); } }*//* }*/ private void WorkTypeMatchDetailCheck(WorkTypeEnum workTypeEnum, Object workDetail) { switch (workTypeEnum) { case WORK_FIRE: if (workDetail instanceof WorkApplyHotReqDTO) { checkHotReqDTO((WorkApplyHotReqDTO) workDetail); } break; case WORK_CLOSE_SPACE: if (workDetail instanceof WorkApplyConfinedSpaceReqDTO) { checkConfinedSpaceReqDTO((WorkApplyConfinedSpaceReqDTO) workDetail); } case WORK_HANG: if (workDetail instanceof WorkApplyHoistingReqDTO) { checkHostingReqDTO((WorkApplyHoistingReqDTO) workDetail); } break; case WORK_DIF_SOLI: if (workDetail instanceof WorkApplyGroundBreakingReqDTO) { checkGroundBreakingReqDTO((WorkApplyGroundBreakingReqDTO) workDetail); } break; case WORK_BROKE_ROAD: if (workDetail instanceof WorkApplyBrokenCircuitReqDTO) { checkBrokenCircuitReqDTO((WorkApplyBrokenCircuitReqDTO) workDetail); } break; case WORK_HIGH_SPACE: if (workDetail instanceof WorkApplyAtHighReqDTO) { checkAtHighReqDTO((WorkApplyAtHighReqDTO) workDetail); } break; case WORK_TEMP_ELECTRIC: if (workDetail instanceof WorkApplyTemporaryPowerReqDTO) { checkTemporaryPowerReqDTO((WorkApplyTemporaryPowerReqDTO) workDetail); } break; case WORK_BLIND_PLATE: if (workDetail instanceof WorkApplyBlindPlatePluggingReqDTO) { checkBlindPlatePluggingReqDTO((WorkApplyBlindPlatePluggingReqDTO) workDetail); } break; } } //动土作业 private void checkGroundBreakingReqDTO(WorkApplyGroundBreakingReqDTO workDetail) { if(null == workDetail.getOperationDepId()){ throw new AusinessException(E.DATA_PARAM_NULL, "作业单位不能为空"); } ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(workDetail.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); if (null == depInfoByDepId) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业单位不存在"); } if(StringUtils.isBlank(workDetail.getGbScope())){ throw new AusinessException(E.DATA_PARAM_NULL, "动土范围不能为空"); } if(null == workDetail.getGbMethod()){ throw new AusinessException(E.DATA_PARAM_NULL, "动土方式不能为空"); } if(StringUtils.isBlank(workDetail.getGbPath())){ throw new AusinessException(E.DATA_PARAM_NULL, "图片路径不能为空"); } } //临时用电作业 private void checkTemporaryPowerReqDTO(WorkApplyTemporaryPowerReqDTO workDetail) { if(StringUtils.isBlank(workDetail.getPowerAccessPoint())){ throw new AusinessException(E.DATA_PARAM_NULL, "电源接入点不能为空"); } if(null == workDetail.getWorkingVoltage()){ throw new AusinessException(E.DATA_PARAM_NULL, "起吊物体质量不能为空"); } if(StringUtils.isBlank(workDetail.getEquipmentAndPower())){ throw new AusinessException(E.DATA_PARAM_NULL, "用电设备及功率不能为空"); } } //吊装作业 private void checkHostingReqDTO(WorkApplyHoistingReqDTO workDetail) { if(StringUtils.isBlank(workDetail.getHoistingToolName())){ throw new AusinessException(E.DATA_PARAM_NULL, "吊装工具名称不能为空"); } if(null == workDetail.getWeightMass()){ throw new AusinessException(E.DATA_PARAM_NULL, "起吊物体质量不能为空"); } } //断路作业 private void checkBrokenCircuitReqDTO(WorkApplyBrokenCircuitReqDTO workDetail) { if(null == workDetail.getOperationDepId()){ throw new AusinessException(E.DATA_PARAM_NULL, "作业单位不能为空"); } ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(workDetail.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); if (null == depInfoByDepId) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业单位不存在"); } if(StringUtils.isBlank(workDetail.getBcReason())){ throw new AusinessException(E.DATA_PARAM_NULL, "断路地段原因不能为空"); } if(StringUtils.isBlank(workDetail.getBcExplain())){ throw new AusinessException(E.DATA_PARAM_NULL, "断路地段说明不能为空"); } // todo 图片上传 if(StringUtils.isBlank(workDetail.getBcPath())){ throw new AusinessException(E.DATA_PARAM_NULL, "断路地段图片路径不能为空"); } if(StringUtils.isBlank(workDetail.getInvolvedDepIds())){ throw new AusinessException(E.DATA_PARAM_NULL, "涉及相关部门不能为空"); } } //高处作业 private void checkAtHighReqDTO(WorkApplyAtHighReqDTO workDetail) { if(null == workDetail.getOperationDepId()){ throw new AusinessException(E.DATA_PARAM_NULL, "作业单位不能为空"); } ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(workDetail.getOperationDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); if (null == depInfoByDepId) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业单位不存在"); } if(null == workDetail.getOperationHeight()){ throw new AusinessException(E.DATA_PARAM_NULL, "作业高度不能为空"); } } //盲板抽都作业 private void checkBlindPlatePluggingReqDTO(WorkApplyBlindPlatePluggingReqDTO workDetail) { if(StringUtils.isBlank(workDetail.getBpCode())){ throw new AusinessException(E.DATA_PARAM_NULL, "盲板编号不能为空"); } if(StringUtils.isBlank(workDetail.getMainMedia())){ throw new AusinessException(E.DATA_PARAM_NULL, "主要介质不能为空"); } if(null == workDetail.getTemperature()){ throw new AusinessException(E.DATA_PARAM_NULL, "温度不能为空"); } if(null == workDetail.getPressure()){ throw new AusinessException(E.DATA_PARAM_NULL, "压力不能为空"); } if(StringUtils.isBlank(workDetail.getBpMaterialQuality())){ throw new AusinessException(E.DATA_PARAM_NULL, "盲板材质不能为空"); } if(StringUtils.isBlank(workDetail.getBpSpecification())){ throw new AusinessException(E.DATA_PARAM_NULL, "盲板规格不能为空"); } if(StringUtils.isBlank(workDetail.getBpLocation())){ throw new AusinessException(E.DATA_PARAM_NULL, "盲板位置不能为空"); } if(StringUtils.isBlank(workDetail.getBpLocationMapPath())){ throw new AusinessException(E.DATA_PARAM_NULL, "盲板位置图路径不能为空"); } if(null == workDetail.getInstallBpTime()){ throw new AusinessException(E.DATA_PARAM_NULL, "装盲板时间不能为空"); } if(null == workDetail.getUninstallBpTime()){ throw new AusinessException(E.DATA_PARAM_NULL, "拆盲板时间不能为空"); } } //受限空间验证 private void checkConfinedSpaceReqDTO(WorkApplyConfinedSpaceReqDTO workDetail) { // 受限空间所属单位 if(null == workDetail.getCsDepId()){ throw new AusinessException(E.DATA_PARAM_NULL, "受限空间所属单位不能为空"); } ResultVO resultVO = accountDepartmentService.getDepInfoByDepId(workDetail.getCsDepId()); DepInfoRPCRespDTO depInfoByDepId= (DepInfoRPCRespDTO)resultVO.getData(); if (null == depInfoByDepId) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "受限空间所属单位不存在"); } // 受限空间名称 if (StringUtils.isBlank(workDetail.getCsName())) { throw new AusinessException(E.DATA_PARAM_NULL, "受限空间名称不能为空"); } // 受限空间内原有介质名称 if (StringUtils.isBlank(workDetail.getCsOriginalName())) { throw new AusinessException(E.DATA_PARAM_NULL, "受限空间内原有介质名称不能为空"); } } private void checkHotReqDTO(WorkApplyHotReqDTO workDetail) { // 动火方式 if (StringUtils.isBlank(workDetail.getHotMethod())) { throw new AusinessException(E.DATA_PARAM_NULL, "动火方式不能为空"); } } @Override @Transactional public void cancelWorkApply(ContextCacheUser currentUser, Long workApplyId) { if (workApplyId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(workApplyId); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } if (!workApplyInfo.getApplyUid().equals(currentUser.getUid())) { throw new AusinessException(E.DATA_OPERATION_NO_PERMISSION, "需要本人取消申请"); } if (!workApplyInfo.getStatus().equals(WorkApplyStatusEnum.STATU_IN_APPROVAL.getStatus())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID, "申请单只有在审批中状态时才可以退回"); } List currentStepUnits = workApprovalUnitInfoService.listApprovalRuleUnitByStepId(workApplyInfo.getApprovalStepId()); List unitIds= currentStepUnits.stream().filter(unit -> unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()) || unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT.getResult())) // id .map(WorkApprovalUnitInfo::getId) // 集合 .collect(Collectors.toList()); if (unitIds.size() > 0) { // 单元审批中断 workApprovalUnitInfoService.updateStatusByIds(unitIds, WorkApprovalUnitResultEnum.RESULT_INTERRUPTED); } // 审批层级终止 workApprovalStepInfoService.updateStatusById(workApplyInfo.getApprovalStepId(),WorkApprovalStepResultEnum.RESULT_ABORD); // 作业取消 workApplyInfoService.updateStatusById(workApplyId, WorkApplyStatusEnum.STATU_APPLY_CANCEL); // 操作记录 WorkApprovalStepInfo currentStep = workApprovalStepInfoService.getById(workApplyInfo.getApprovalStepId()); workApplyRecordService.log(currentUser, ProcessOperationEnum.CANCEL, workApplyId, workApplyInfo.getApprovalStepId(), currentStep.getStepName(), null); } @Override public ResultVO> listApplyingWorkApplyByPage(ContextCacheUser currentUser, PageQuery pageQuery) { // 申请 WorkApplyApplyingPageDBQuery dbQuery = new WorkApplyApplyingPageDBQuery(); if (pageQuery.getSearchParams() != null) { dbQuery.setStartTime(pageQuery.getSearchParams().getStartTime()); dbQuery.setEndTime(pageQuery.getSearchParams().getEndTime()); dbQuery.setStatus(pageQuery.getSearchParams().getStatus()); dbQuery.setWorkType(pageQuery.getSearchParams().getWorkType()); } dbQuery.setApplyUid(currentUser.getUid()); Page page = new Page<>(pageQuery.getPageIndex(), pageQuery.getPageSize()); List dbData = workApplyInfoService.listWorkApplyInfoByPage(page, dbQuery); List respDTOs = new ArrayList<>(dbData.size()); WorkApplyStatusEnum statusEnum; WorkLevelEnum levelEnum; WorkTypeEnum workTypeEnum; List operatorRespDTOs; WorkApplyOperatorRespDTO operatorRespDTO; for (WorkApplyInfo workApplyInfo : dbData) { WorkApplyPageRespDTO respDTO = new WorkApplyPageRespDTO(); respDTO.setWorkApplyId(workApplyInfo.getId()); respDTO.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); respDTO.setWorkContent(workApplyInfo.getWorkContent()); respDTO.setWorkLocation(workApplyInfo.getWorkLocation()); respDTO.setHazardIdentification(workApplyInfo.getHazardIdentification()); respDTO.setDepId(workApplyInfo.getDepId()); respDTO.setDepName(workApplyInfo.getDepName()); respDTO.setApplyTime(workApplyInfo.getApplyTime()); respDTO.setApplyUid(workApplyInfo.getApplyUid()); respDTO.setApplyUname(workApplyInfo.getApplyUname()); respDTO.setApprovalStepId(workApplyInfo.getApprovalStepId()); respDTO.setExpEndTime(workApplyInfo.getExpEndTime()); respDTO.setExpStartTime(workApplyInfo.getExpStartTime()); respDTO.setGmtCreate(workApplyInfo.getGmtCreate()); respDTO.setGmtModified(workApplyInfo.getGmtModified()); respDTO.setStatus(workApplyInfo.getStatus()); respDTO.setMaterialStatus(workApplyInfo.getMaterialStatus()); //作业情况 respDTO.setWorking(workInfoService.getWorkByWorkApplyId(workApplyInfo.getId())); statusEnum = WorkApplyStatusEnum.parse(workApplyInfo.getStatus()); if (statusEnum != null) { respDTO.setStatusDesc(statusEnum.getDesc()); } respDTO.setWorkLevel(workApplyInfo.getWorkLevel()); levelEnum = WorkLevelEnum.parse(workApplyInfo.getWorkLevel()); if (levelEnum != null) { respDTO.setWorkLevelDesc(levelEnum.getTitle()); } MaterialCheckResultEnum materialCheckResultEnum = MaterialCheckResultEnum.parse(workApplyInfo.getMaterialStatus()); if(materialCheckResultEnum != null){ respDTO.setMaterialStatusDesc(materialCheckResultEnum.getDesc()); } respDTO.setWorkType(workApplyInfo.getWorkType()); workTypeEnum = WorkTypeEnum.parse(workApplyInfo.getWorkType()); if (workTypeEnum != null) { respDTO.setWorkTypeDesc(workTypeEnum.getName()); } // 操作人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyInfo.getId()); operatorRespDTOs = new ArrayList<>(operators.size()); for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new WorkApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } respDTO.setOperators(operatorRespDTOs); // 八大作业 if (workTypeEnum != null) { Object workDetail = this.getWorkDetail(workTypeEnum, workApplyInfo.getId(), workApplyInfo.getWorkDetailId()); if (workDetail != null) { respDTO.setWorkDetail(workDetail); } } //应急物资 List workMaterialInfoList = workMaterialInfoService.listByWorkApplyId(workApplyInfo.getId()); if(workMaterialInfoList.size()>0){ List workMaterialRespDTOList = BeanCopyUtils.copyBeanList(workMaterialInfoList, WorkMaterialRespDTO.class); respDTO.setWorkMaterial(workMaterialRespDTOList); } respDTOs.add(respDTO); } return new SearchResultVO<>(true, page.getCurrent(), page.getSize(), page.getPages(), page.getTotal(), respDTOs, ResultCodes.OK); } @Override public ResultVO> listPendingWorkApplyByPage(ContextCacheUser currentUser, PageQuery pageQuery) { WorkApplyPendingPageDBQuery dbQuery = new WorkApplyPendingPageDBQuery(); if (pageQuery.getSearchParams() != null) { dbQuery.setStartTime(pageQuery.getSearchParams().getStartTime()); dbQuery.setEndTime(pageQuery.getSearchParams().getEndTime()); dbQuery.setApplyUname(pageQuery.getSearchParams().getApplyUname()); dbQuery.setWorkType(pageQuery.getSearchParams().getWorkType()); } dbQuery.setApprovalUid(currentUser.getUid()); Page page = new Page<>(pageQuery.getPageIndex(), pageQuery.getPageSize()); List dbData = workApplyInfoService.listPendingWorkApplyInfo(page, dbQuery); List respDTOs = new ArrayList<>(dbData.size()); WorkApplyPendingPageRespDTO respDTO; WorkApplyStatusEnum statusEnum; ApprovalStepPersonTypeEnum stepTypeEnum; WorkApprovalStepResultEnum stepResultEnum; WorkApprovalUnitResultEnum unitResultEnum; WorkLevelEnum levelEnum; WorkTypeEnum workTypeEnum; List operatorRespDTOs; WorkApplyOperatorRespDTO operatorRespDTO; for (WorkApplyPendingInfoBO workApplyInfoBO : dbData) { respDTO = new WorkApplyPendingPageRespDTO(); // work respDTO.setWorkApplyId(workApplyInfoBO.getWorkApplyId()); respDTO.setWorkLevel(workApplyInfoBO.getWorkLevel()); levelEnum = WorkLevelEnum.parse(workApplyInfoBO.getWorkLevel()); if (levelEnum != null) { respDTO.setWorkLevelDesc(levelEnum.getTitle()); } respDTO.setWorkType(workApplyInfoBO.getWorkType()); workTypeEnum = WorkTypeEnum.parse(workApplyInfoBO.getWorkType()); if (workTypeEnum != null) { respDTO.setWorkTypeDesc(workTypeEnum.getName()); } respDTO.setWorkPermitNo(workApplyInfoBO.getWorkPermitNo()); respDTO.setWorkContent(workApplyInfoBO.getWorkContent()); respDTO.setWorkLocation(workApplyInfoBO.getWorkLocation()); respDTO.setHazardIdentification(workApplyInfoBO.getHazardIdentification()); respDTO.setDepId(workApplyInfoBO.getDepId()); respDTO.setDepName(workApplyInfoBO.getDepName()); respDTO.setApplyTime(workApplyInfoBO.getApplyTime()); respDTO.setApplyUid(workApplyInfoBO.getApplyUid()); respDTO.setApplyUname(workApplyInfoBO.getApplyUname()); respDTO.setApprovalStepId(workApplyInfoBO.getApprovalStepId()); respDTO.setExpEndTime(workApplyInfoBO.getExpEndTime()); respDTO.setExpStartTime(workApplyInfoBO.getExpStartTime()); respDTO.setGmtCreate(workApplyInfoBO.getGmtCreate()); respDTO.setGmtModified(workApplyInfoBO.getGmtModified()); respDTO.setStatus(workApplyInfoBO.getStatus()); respDTO.setMaterialStatus(workApplyInfoBO.getMaterialStatus()); statusEnum = WorkApplyStatusEnum.parse(workApplyInfoBO.getStatus()); if (statusEnum != null) { respDTO.setStatusDesc(statusEnum.getDesc()); } MaterialCheckResultEnum materialCheckResultEnum = MaterialCheckResultEnum.parse(workApplyInfoBO.getMaterialStatus()); if(materialCheckResultEnum != null){ respDTO.setMaterialStatusDesc(materialCheckResultEnum.getDesc()); } // step respDTO.setStepId(workApplyInfoBO.getStepId()); respDTO.setStepExpFinishApprovalTime(workApplyInfoBO.getStepExpFinishApprovalTime()); respDTO.setStepFinishApprovalTime(workApplyInfoBO.getStepFinishApprovalTime()); respDTO.setStepStartApprovalTime(workApplyInfoBO.getStepStartApprovalTime()); respDTO.setStepApprovalResult(workApplyInfoBO.getStepApprovalResult()); respDTO.setNextStepId(workApplyInfoBO.getNextStepId()); respDTO.setPreStepId(workApplyInfoBO.getPreStepId()); respDTO.setStepContainItem(workApplyInfoBO.getContainItem()); stepResultEnum = WorkApprovalStepResultEnum.parse(workApplyInfoBO.getStepApprovalResult()); if (stepResultEnum != null) { respDTO.setStepApprovalResultDesc(stepResultEnum.getDesc()); } respDTO.setStepType(workApplyInfoBO.getStepType()); stepTypeEnum = ApprovalStepPersonTypeEnum.parse(workApplyInfoBO.getStepType()); if (stepTypeEnum != null) { respDTO.setStepTypeDesc(stepTypeEnum.getDesc()); } // unit respDTO.setUnitId(workApplyInfoBO.getUnitId()); respDTO.setUnitApprovalUid(workApplyInfoBO.getUnitApprovalUid()); respDTO.setUnitApprovalUname(workApplyInfoBO.getUnitApprovalUname()); respDTO.setUnitApprovalEndTime(workApplyInfoBO.getUnitApprovalEndTime()); respDTO.setUnitApprovalStartTime(workApplyInfoBO.getUnitApprovalStartTime()); respDTO.setUnitApprovalActualTime(workApplyInfoBO.getUnitApprovalActualTime()); respDTO.setUnitResult(workApplyInfoBO.getUnitResult()); respDTO.setUnitFilledContent(workApplyInfoBO.getUnitFillContent()); unitResultEnum = WorkApprovalUnitResultEnum.parse(workApplyInfoBO.getUnitResult()); if (unitResultEnum != null) { respDTO.setUnitResultDesc(unitResultEnum.getDesc()); } // 操作人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyInfoBO.getWorkApplyId()); operatorRespDTOs = new ArrayList<>(operators.size()); for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new WorkApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } respDTO.setOperators(operatorRespDTOs); // 八大作业 if (workTypeEnum != null) { Object workDetail = this.getWorkDetail(workTypeEnum, workApplyInfoBO.getWorkApplyId(), workApplyInfoBO.getWorkDetailId()); if (workDetail != null) { respDTO.setWorkDetail(workDetail); } } //应急物资 List workMaterialInfoList = workMaterialInfoService.listByWorkApplyId(workApplyInfoBO.getWorkApplyId()); if(workMaterialInfoList.size() > 0){ List workMaterialRespDTOList = BeanCopyUtils.copyBeanList(workMaterialInfoList, WorkMaterialRespDTO.class); respDTO.setWorkMaterial(workMaterialRespDTOList); } respDTOs.add(respDTO); } return new SearchResultVO<>(true, page.getCurrent(), page.getSize(), page.getPages(), page.getTotal(), respDTOs, ResultCodes.OK); } @Override public ApplicantWorkApprovedApplyDetailRespDTO getApprovedApplyDetailForApplicant(ContextCacheUser currentUser, Long workApplyId) { if (workApplyId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(workApplyId); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } if (!workApplyInfo.getApplyUid().equals(currentUser.getUid())) { throw new AusinessException(E.DATA_OPERATION_NO_PERMISSION, "你不是作业申请人"); } // if (workApplyInfo.getStatus().equals(WorkStatusEnum.STATU_IN_APPLY.getStatus())) { // throw new AusinessException(E.DATA_STATUS_CHECK_INVALID, "作业还未审批"); // } // 结果 result ApplicantWorkApprovedApplyDetailRespDTO result = new ApplicantWorkApprovedApplyDetailRespDTO(); // 获取作业人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyId); // 获取层级 List steps = workApprovalStepInfoService.listApprovalRuleStepByWorkApplyId(workApplyId); // 获取单元 List units = workApprovalUnitInfoService.listApprovalRuleUnitByWorkApplyId(workApplyId); // 获取审批项 List items = workApprovalItemInfoService.listWorkApprovalItemByWorkApplyId(workApplyId); // 获取已经填报审批项 List filledItems = workApprovalFilledItemInfoService.listApprovalFilledItemInfoByWorkApplyId(workApplyId); // 获取标准 List stands = workApprovalItemStandInfoService.listWorkApprovalItemStandByWorkApplyId(workApplyId); // 获取措施 List measures = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyId); // 获取设备 List devices = workApprovalDeviceInfoService.listWorkApprovalDeviceByWorkApplyId(workApplyId); // 措施处理映射 Map measureMap = new HashMap<>(measures.size()); ApplicantWorkApprovalItemMeasureRespDTO measureRespDTO; MeasureTypeEnum measureTypeEnum; WorkTypeEnum workTypeEnum; for (WorkApprovalItemMeasureInfo measureInfo : measures) { measureRespDTO = new ApplicantWorkApprovalItemMeasureRespDTO(); measureRespDTO.setMeasureId(measureInfo.getId()); measureRespDTO.setContext(measureInfo.getContext()); measureRespDTO.setCorrectVal(measureInfo.getCorrectVal()); measureRespDTO.setWorkType(measureInfo.getWorkType()); measureRespDTO.setType(measureInfo.getType()); measureTypeEnum = MeasureTypeEnum.parse(measureInfo.getType()); if (measureTypeEnum != null) { measureRespDTO.setTypeDesc(measureTypeEnum.getDesc()); } workTypeEnum = WorkTypeEnum.parse(measureInfo.getWorkType()); if (workTypeEnum != null) { measureRespDTO.setWorkTypeDesc(workTypeEnum.getName()); } measureMap.put(measureRespDTO.getMeasureId(), measureRespDTO); } // 标准处理映射 Map standMap = new HashMap<>(stands.size()); ApplicantWorkApprovalItemStandRespDTO standRespDTO; WorkStandTypeEnum standTypeEnum; RuleStandMatchingTypeEnum pattern; for (WorkApprovalItemStandInfo standInfo : stands) { standRespDTO = new ApplicantWorkApprovalItemStandRespDTO(); standRespDTO.setStandId(standInfo.getId()); standRespDTO.setWorkApplyId(standInfo.getWorkApplyId()); standRespDTO.setDepId(standInfo.getDepId()); standRespDTO.setDepName(standInfo.getDepName()); standRespDTO.setEid(standInfo.getEid()); standRespDTO.setMaxVal(standInfo.getMaxVal()); standRespDTO.setMaxValMatchPattern(standInfo.getMaxValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMaxValMatchPattern()); if (pattern != null) { standRespDTO.setMaxValMatchPatternDesc(pattern.getValue()); } standRespDTO.setMinVal(standInfo.getMinVal()); standRespDTO.setMinValMatchPattern(standInfo.getMinValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMinValMatchPattern()); if (pattern != null) { standRespDTO.setMinValMatchPatternDesc(pattern.getValue()); } standRespDTO.setTitle(standInfo.getTitle()); standRespDTO.setType(standInfo.getType()); standTypeEnum = WorkStandTypeEnum.parse(standInfo.getType()); if (standTypeEnum != null) { standRespDTO.setTypeDesc(standTypeEnum.getDesc()); } standMap.put(standRespDTO.getStandId(), standRespDTO); } // 审批项映射 Map itemsMap = new HashMap<>(items.size()); for (WorkApprovalItemInfo item : items) { itemsMap.put(item.getId(), item); } // 已填写审批项映射 Map> filledItemMap = new HashMap<>(filledItems.size()); ApplicantWorkApprovalUnitFilledItemRespDTO filledItemRespDTO; WorkApprovalItemInfo itemInfo; RuleItemTypeEnum itemType; WorkRuleMeasureOptEnum optEnum; ApprovalFilledItemType filledItemType; for (WorkApprovalFilledItemInfo filledItem : filledItems) { filledItemRespDTO = new ApplicantWorkApprovalUnitFilledItemRespDTO(); filledItemRespDTO.setId(filledItem.getId()); filledItemRespDTO.setWorkApplyId(filledItem.getWorkApplyId()); filledItemRespDTO.setUnitId(filledItem.getUnitId()); filledItemRespDTO.setMeasureVal(filledItem.getMeasureVal()); filledItemRespDTO.setMeasureText(filledItem.getMeasureText()); filledItemRespDTO.setAnalysisLocation(filledItem.getAnalysisLocation()); filledItemRespDTO.setVal(filledItem.getVal()); filledItemRespDTO.setItemId(filledItem.getItemId()); filledItemRespDTO.setFillType(filledItem.getFillType()); optEnum = WorkRuleMeasureOptEnum.parse(filledItem.getMeasureVal()); if (optEnum != null) { filledItemRespDTO.setMeasureValDesc(optEnum.getDesc()); } filledItemType = ApprovalFilledItemType.parse(filledItem.getFillType()); if (filledItemType != null) { filledItemRespDTO.setFillTypeDesc(filledItemType.value); } itemInfo = itemsMap.get(filledItem.getItemId()); if (itemInfo != null) { filledItemRespDTO.setItemName(itemInfo.getItemName()); filledItemRespDTO.setStandId(itemInfo.getStandId()); filledItemRespDTO.setMeasureId(itemInfo.getMeasureId()); filledItemRespDTO.setMeasureInvolve(itemInfo.getMeasureInvolve()); filledItemRespDTO.setItemType(itemInfo.getType()); itemType = RuleItemTypeEnum.parse(itemInfo.getType()); if (itemType != null) { filledItemRespDTO.setItemTypeDesc(itemType.getValue()); } // 措施 filledItemRespDTO.setMeasure(measureMap.get(itemInfo.getMeasureId())); // 标准 filledItemRespDTO.setStand(standMap.get(itemInfo.getStandId())); } if (filledItemMap.get(filledItem.getUnitId()) == null) { List list = new ArrayList<>(); list.add(filledItemRespDTO); filledItemMap.put(filledItem.getUnitId(), list); }else{ filledItemMap.get(filledItem.getUnitId()).add(filledItemRespDTO); } } // 作业人处理 List operatorRespDTOs = new ArrayList<>(operators.size()); ApplicantWorkApprovedApplyOperatorRespDTO operatorRespDTO; for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new ApplicantWorkApprovedApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } // 层级处理 Long currentStepId = workApplyInfo.getApprovalStepId(); // 已经走过的层级和当前所处层级 List approvedSteps = this.makeApprovedStepInOrder(currentStepId, steps); List stepRespDTOs = new ArrayList<>(approvedSteps.size()); ApplicantWorkApprovalStepRespDTO stepRespDTO; ApplicantWorkApprovalUnitRespDTO stepUnitRespDTO; ApplicantWorkApprovalItemRespDTO stepItemRespDTO; ApprovalStepPersonTypeEnum personTypeEnum; ApprovalStepApprovalTypeEnum approvalTypeEnum; ApprovalStepContentTypeEnum contentTypeEnum; WorkApprovalStepResultEnum approvalStepResultEnum; WorkApprovalUnitResultEnum approvalUnitResultEnum; RuleItemTypeEnum itemTypeEnum; AuditTypeEnum auditTypeEnum; // 1.层级处理和单元处理 for (WorkApprovalStepInfo step : approvedSteps) { stepRespDTO = new ApplicantWorkApprovalStepRespDTO(); stepRespDTO.setStepId(step.getId()); stepRespDTO.setWorkApplyId(step.getWorkApplyId()); stepRespDTO.setApprovalResult(step.getApprovalResult()); approvalStepResultEnum = WorkApprovalStepResultEnum.parse(step.getApprovalResult()); if (approvalStepResultEnum != null) { stepRespDTO.setApprovalResultDesc(approvalStepResultEnum.getDesc()); } stepRespDTO.setExpFinishApprovalTime(step.getExpFinishApprovalTime()); stepRespDTO.setFinishApprovalTime(step.getFinishApprovalTime()); stepRespDTO.setPersonType(step.getPersonType()); personTypeEnum = ApprovalStepPersonTypeEnum.parse(step.getPersonType()); if (personTypeEnum != null) { stepRespDTO.setPersonTypeDesc(personTypeEnum.getDesc()); } approvalTypeEnum= ApprovalStepApprovalTypeEnum.parse(step.getApprovalType()); if (approvalTypeEnum != null) { stepRespDTO.setApprovalTypeDesc(approvalTypeEnum.value); } stepRespDTO.setApprovalType(step.getApprovalType()); stepRespDTO.setContentType(step.getContentType()); contentTypeEnum = ApprovalStepContentTypeEnum.parse(step.getContentType()); if (contentTypeEnum != null) { stepRespDTO.setContentTypeDesc(contentTypeEnum.getDesc()); } stepRespDTO.setStartApprovalTime(step.getStartApprovalTime()); stepRespDTO.setStepSerial(step.getStepSerial()); stepRespDTO.setNextStepId(step.getNextStepId()); stepRespDTO.setPreStepId(step.getPreStepId()); stepRespDTO.setContainItem(step.getContainItem()); stepRespDTO.setStepName(step.getStepName()); stepRespDTO.setAuditType(step.getAuditType()); auditTypeEnum = AuditTypeEnum.parse(step.getAuditType()); if (auditTypeEnum != null) { stepRespDTO.setAuditTypeDesc(auditTypeEnum.getDesc()); } // 审批项处理 List stepItems = items.stream().filter(item -> // 当前层级的审批项 step.getId().equals(item.getStepId())) // 集合 .collect(Collectors.toList()); List stepItemDTOs = new ArrayList<>(stepItems.size()); for (WorkApprovalItemInfo stepItem : stepItems) { stepItemRespDTO = new ApplicantWorkApprovalItemRespDTO(); stepItemRespDTO.setItemId(stepItem.getId()); stepItemRespDTO.setStepId(step.getId()); stepItemRespDTO.setWorkApplyId(stepItem.getWorkApplyId()); stepItemRespDTO.setItemName(stepItem.getItemName()); stepItemRespDTO.setMeasureId(stepItem.getMeasureId()); stepItemRespDTO.setMeasureInvolve(stepItem.getMeasureInvolve()); stepItemRespDTO.setStandId(stepItem.getStandId()); stepItemRespDTO.setUnitId(stepItem.getUnitId()); stepItemRespDTO.setType(stepItem.getType()); itemTypeEnum = RuleItemTypeEnum.parse(stepItem.getType()); stepItemRespDTO.setTypeDesc(itemTypeEnum.getValue()); // 措施 stepItemRespDTO.setMeasure(measureMap.get(stepItem.getMeasureId())); // 标准 stepItemRespDTO.setStand(standMap.get(stepItem.getStandId())); stepItemDTOs.add(stepItemRespDTO); } // 当前层级单元 List stepUnits = units.stream().filter(unit -> // 所属层级 step.getId().equals(unit.getStepId())) // 集合 .collect(Collectors.toList()); // 单元处理 List stepUnitDTOs = new ArrayList<>(stepUnits.size()); for (WorkApprovalUnitInfo stepUnit : stepUnits) { stepUnitRespDTO = new ApplicantWorkApprovalUnitRespDTO(); stepUnitRespDTO.setUnitId(stepUnit.getId()); stepUnitRespDTO.setStepId(stepUnit.getStepId()); stepUnitRespDTO.setWorkApplyId(stepUnit.getWorkApplyId()); stepUnitRespDTO.setResult(stepUnit.getResult()); approvalUnitResultEnum = WorkApprovalUnitResultEnum.parse(stepUnit.getResult()); if (approvalUnitResultEnum != null) { stepUnitRespDTO.setResultDesc(approvalUnitResultEnum.getDesc()); } stepUnitRespDTO.setApprovalUid(stepUnit.getApprovalUid()); stepUnitRespDTO.setApprovalUname(stepUnit.getApprovalUname()); stepUnitRespDTO.setApprovalActualTime(stepUnit.getApprovalActualTime()); stepUnitRespDTO.setApprovalEndTime(stepUnit.getApprovalEndTime()); stepUnitRespDTO.setApprovalStartTime(stepUnit.getApprovalStartTime()); stepUnitRespDTO.setFilledContent(stepUnit.getFillContent()); if (filledItemMap.get(stepUnit.getId()) != null) { stepUnitRespDTO.setFilledItems(filledItemMap.get(stepUnit.getId())); } stepUnitDTOs.add(stepUnitRespDTO); } stepRespDTO.setStepItems(stepItemDTOs); stepRespDTO.setStepUnits(stepUnitDTOs); stepRespDTOs.add(stepRespDTO); } // 设备 if (devices.size() > 0) { List deviceRespDTOs = new ArrayList<>(devices.size()); ApplicantWorkApprovalDeviceRespDTO deviceRespDTO; for (WorkApprovalDeviceInfo deviceInfo : devices) { deviceRespDTO = new ApplicantWorkApprovalDeviceRespDTO(); deviceRespDTO.setDeviceId(deviceInfo.getId()); deviceRespDTO.setWorkApplyId(deviceInfo.getWorkApplyId()); deviceRespDTO.setDeviceName(deviceInfo.getDeviceName()); deviceRespDTO.setDeviceNo(deviceInfo.getDeviceNo()); deviceRespDTO.setShortName(deviceInfo.getShortName()); deviceRespDTOs.add(deviceRespDTO); } result.setDevices(deviceRespDTOs); } result.setWorkApplyId(workApplyInfo.getId()); result.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); result.setOperators(operatorRespDTOs); result.setApprovalSteps(stepRespDTOs); result.setWorkContent(workApplyInfo.getWorkContent()); result.setWorkLocation(workApplyInfo.getWorkLocation()); result.setHazardIdentification(workApplyInfo.getHazardIdentification()); return result; } @Override public ApproverWorkApprovedApplyDetailRespDTO getApprovedApplyDetailForApprover(ContextCacheUser currentUser, Long workApplyId) { if (workApplyId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(workApplyId); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } // 循环过程中判断 当前人是否是审批人 boolean isApprover = false; // 结果 result ApproverWorkApprovedApplyDetailRespDTO result = new ApproverWorkApprovedApplyDetailRespDTO(); // 获取操作人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyId); // 获取层级 List steps = workApprovalStepInfoService.listApprovalRuleStepByWorkApplyId(workApplyId); // 获取单元 List units = workApprovalUnitInfoService.listApprovalRuleUnitByWorkApplyId(workApplyId); // 获取审批项 List items = workApprovalItemInfoService.listWorkApprovalItemByWorkApplyId(workApplyId); // 获取已经填报审批项 List filledItems = workApprovalFilledItemInfoService.listApprovalFilledItemInfoByWorkApplyId(workApplyId); // 获取标准 List stands = workApprovalItemStandInfoService.listWorkApprovalItemStandByWorkApplyId(workApplyId); // 获取措施 List measures = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyId); // 获取设备 List devices = workApprovalDeviceInfoService.listWorkApprovalDeviceByWorkApplyId(workApplyId); // 措施处理映射 Map measureMap = new HashMap<>(measures.size()); ApproverWorkApprovalItemMeasureRespDTO measureRespDTO; MeasureTypeEnum measureTypeEnum; WorkTypeEnum workTypeEnum; for (WorkApprovalItemMeasureInfo measureInfo : measures) { measureRespDTO = new ApproverWorkApprovalItemMeasureRespDTO(); measureRespDTO.setMeasureId(measureInfo.getId()); measureRespDTO.setContext(measureInfo.getContext()); measureRespDTO.setCorrectVal(measureInfo.getCorrectVal()); measureRespDTO.setWorkType(measureInfo.getWorkType()); measureRespDTO.setType(measureInfo.getType()); measureTypeEnum = MeasureTypeEnum.parse(measureInfo.getType()); if (measureTypeEnum != null) { measureRespDTO.setTypeDesc(measureTypeEnum.getDesc()); } workTypeEnum = WorkTypeEnum.parse(measureInfo.getWorkType()); if (workTypeEnum != null) { measureRespDTO.setWorkTypeDesc(workTypeEnum.getName()); } measureMap.put(measureRespDTO.getMeasureId(), measureRespDTO); } // 标准处理映射 Map standMap = new HashMap<>(stands.size()); ApproverWorkApprovalItemStandRespDTO standRespDTO; WorkStandTypeEnum standTypeEnum; RuleStandMatchingTypeEnum pattern; for (WorkApprovalItemStandInfo standInfo : stands) { standRespDTO = new ApproverWorkApprovalItemStandRespDTO(); standRespDTO.setStandId(standInfo.getId()); standRespDTO.setWorkApplyId(standInfo.getWorkApplyId()); standRespDTO.setDepId(standInfo.getDepId()); standRespDTO.setDepName(standInfo.getDepName()); standRespDTO.setEid(standInfo.getEid()); standRespDTO.setMaxVal(standInfo.getMaxVal()); standRespDTO.setMaxValMatchPattern(standInfo.getMaxValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMaxValMatchPattern()); if (pattern != null) { standRespDTO.setMaxValMatchPatternDesc(pattern.getValue()); } standRespDTO.setMinVal(standInfo.getMinVal()); standRespDTO.setMinValMatchPattern(standInfo.getMinValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMinValMatchPattern()); if (pattern != null) { standRespDTO.setMaxValMatchPatternDesc(pattern.getValue()); } standRespDTO.setTitle(standInfo.getTitle()); standRespDTO.setType(standInfo.getType()); standTypeEnum = WorkStandTypeEnum.parse(standInfo.getType()); if (standTypeEnum != null) { standRespDTO.setTypeDesc(standTypeEnum.getDesc()); } standMap.put(standRespDTO.getStandId(), standRespDTO); } // 审批项映射 Map itemsMap = new HashMap<>(items.size()); for (WorkApprovalItemInfo item : items) { itemsMap.put(item.getId(), item); } // 已填写审批项映射 Map> filledItemMap = new HashMap<>(filledItems.size()); ApproverWorkApprovalUnitFilledItemRespDTO filledItemRespDTO; WorkApprovalItemInfo itemInfo; RuleItemTypeEnum itemType; WorkRuleMeasureOptEnum optEnum; ApprovalFilledItemType filledItemType; for (WorkApprovalFilledItemInfo filledItem : filledItems) { filledItemRespDTO = new ApproverWorkApprovalUnitFilledItemRespDTO(); filledItemRespDTO.setId(filledItem.getId()); filledItemRespDTO.setWorkApplyId(filledItem.getWorkApplyId()); filledItemRespDTO.setUnitId(filledItem.getUnitId()); filledItemRespDTO.setMeasureVal(filledItem.getMeasureVal()); filledItemRespDTO.setMeasureText(filledItem.getMeasureText()); filledItemRespDTO.setAnalysisLocation(filledItem.getAnalysisLocation()); filledItemRespDTO.setVal(filledItem.getVal()); filledItemRespDTO.setItemId(filledItem.getItemId()); filledItemRespDTO.setFillType(filledItem.getFillType()); optEnum = WorkRuleMeasureOptEnum.parse(filledItem.getMeasureVal()); if (optEnum != null) { filledItemRespDTO.setMeasureValDesc(optEnum.getDesc()); } filledItemType = ApprovalFilledItemType.parse(filledItem.getFillType()); if (filledItemType != null) { filledItemRespDTO.setFillTypeDesc(filledItemType.value); } itemInfo = itemsMap.get(filledItem.getItemId()); if (itemInfo != null) { filledItemRespDTO.setItemName(itemInfo.getItemName()); filledItemRespDTO.setStandId(itemInfo.getStandId()); filledItemRespDTO.setMeasureId(itemInfo.getMeasureId()); filledItemRespDTO.setMeasureInvolve(itemInfo.getMeasureInvolve()); filledItemRespDTO.setItemType(itemInfo.getType()); itemType = RuleItemTypeEnum.parse(itemInfo.getType()); if (itemType != null) { filledItemRespDTO.setItemTypeDesc(itemType.getValue()); } // 措施 filledItemRespDTO.setMeasure(measureMap.get(itemInfo.getMeasureId())); // 标准 filledItemRespDTO.setStand(standMap.get(itemInfo.getStandId())); } if (filledItemMap.get(filledItem.getUnitId()) == null) { List list = new ArrayList<>(); list.add(filledItemRespDTO); filledItemMap.put(filledItem.getUnitId(), list); }else{ filledItemMap.get(filledItem.getUnitId()).add(filledItemRespDTO); } } // 作业人处理 List operatorRespDTOs= new ArrayList<>(operators.size()); ApproverWorkApprovedApplyOperatorRespDTO operatorRespDTO; for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new ApproverWorkApprovedApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } // 层级处理 Long currentStepId = workApplyInfo.getApprovalStepId(); // 已经走过的层级和当前所处层级 List approvedSteps = this.makeApprovedStepInOrder(currentStepId, steps); List stepRespDTOs = new ArrayList<>(approvedSteps.size()); ApproverWorkApprovalStepRespDTO stepRespDTO; ApproverWorkApprovalUnitRespDTO stepUnitRespDTO; ApproverWorkApprovalItemRespDTO stepItemRespDTO; ApprovalStepPersonTypeEnum personTypeEnum; ApprovalStepApprovalTypeEnum approvalTypeEnum; ApprovalStepContentTypeEnum contentTypeEnum; WorkApprovalStepResultEnum approvalStepResultEnum; WorkApprovalUnitResultEnum approvalUnitResultEnum; RuleItemTypeEnum itemTypeEnum; AuditTypeEnum auditTypeEnum; // 1.层级处理和单元处理 for (WorkApprovalStepInfo step : approvedSteps) { stepRespDTO = new ApproverWorkApprovalStepRespDTO(); stepRespDTO.setStepId(step.getId()); stepRespDTO.setWorkApplyId(step.getWorkApplyId()); stepRespDTO.setApprovalResult(step.getApprovalResult()); approvalStepResultEnum = WorkApprovalStepResultEnum.parse(step.getApprovalResult()); if (approvalStepResultEnum != null) { stepRespDTO.setApprovalResultDesc(approvalStepResultEnum.getDesc()); } stepRespDTO.setExpFinishApprovalTime(step.getExpFinishApprovalTime()); stepRespDTO.setFinishApprovalTime(step.getFinishApprovalTime()); stepRespDTO.setPersonType(step.getPersonType()); personTypeEnum = ApprovalStepPersonTypeEnum.parse(step.getPersonType()); if (personTypeEnum != null) { stepRespDTO.setPersonTypeDesc(personTypeEnum.getDesc()); } approvalTypeEnum= ApprovalStepApprovalTypeEnum.parse(step.getApprovalType()); if (approvalTypeEnum != null) { stepRespDTO.setApprovalTypeDesc(approvalTypeEnum.value); } stepRespDTO.setApprovalType(step.getApprovalType()); stepRespDTO.setContentType(step.getContentType()); contentTypeEnum = ApprovalStepContentTypeEnum.parse(step.getContentType()); if (contentTypeEnum != null) { stepRespDTO.setContentTypeDesc(contentTypeEnum.getDesc()); } stepRespDTO.setStartApprovalTime(step.getStartApprovalTime()); stepRespDTO.setStepSerial(step.getStepSerial()); stepRespDTO.setNextStepId(step.getNextStepId()); stepRespDTO.setPreStepId(step.getPreStepId()); stepRespDTO.setContainItem(step.getContainItem()); stepRespDTO.setStepName(step.getStepName()); stepRespDTO.setAuditType(step.getAuditType()); auditTypeEnum = AuditTypeEnum.parse(step.getAuditType()); if (auditTypeEnum != null) { stepRespDTO.setAuditTypeDesc(auditTypeEnum.getDesc()); } // 审批项处理 List stepItems = items.stream().filter(item -> // 当前层级的审批项 step.getId().equals(item.getStepId())) // 集合 .collect(Collectors.toList()); List stepItemDTOs = new ArrayList<>(stepItems.size()); for (WorkApprovalItemInfo stepItem : stepItems) { stepItemRespDTO = new ApproverWorkApprovalItemRespDTO(); stepItemRespDTO.setItemId(stepItem.getId()); stepItemRespDTO.setStepId(step.getId()); stepItemRespDTO.setWorkApplyId(stepItem.getWorkApplyId()); stepItemRespDTO.setItemName(stepItem.getItemName()); stepItemRespDTO.setMeasureId(stepItem.getMeasureId()); stepItemRespDTO.setMeasureInvolve(stepItem.getMeasureInvolve()); stepItemRespDTO.setStandId(stepItem.getStandId()); stepItemRespDTO.setUnitId(stepItem.getUnitId()); stepItemRespDTO.setType(stepItem.getType()); itemTypeEnum = RuleItemTypeEnum.parse(stepItem.getType()); stepItemRespDTO.setTypeDesc(itemTypeEnum.getValue()); // 措施 stepItemRespDTO.setMeasure(measureMap.get(stepItem.getMeasureId())); // 标准 stepItemRespDTO.setStand(standMap.get(stepItem.getStandId())); stepItemDTOs.add(stepItemRespDTO); } // 当前层级单元 List stepUnits = units.stream().filter(unit -> // 所属层级 step.getId().equals(unit.getStepId())) // 集合 .collect(Collectors.toList()); // 单元处理 List stepUnitDTOs = new ArrayList<>(stepUnits.size()); for (WorkApprovalUnitInfo stepUnit : stepUnits) { stepUnitRespDTO = new ApproverWorkApprovalUnitRespDTO(); stepUnitRespDTO.setUnitId(stepUnit.getId()); stepUnitRespDTO.setStepId(stepUnit.getStepId()); stepUnitRespDTO.setWorkApplyId(stepUnit.getWorkApplyId()); stepUnitRespDTO.setResult(stepUnit.getResult()); approvalUnitResultEnum = WorkApprovalUnitResultEnum.parse(stepUnit.getResult()); if (approvalUnitResultEnum != null) { stepUnitRespDTO.setResultDesc(approvalUnitResultEnum.getDesc()); } stepUnitRespDTO.setApprovalUid(stepUnit.getApprovalUid()); stepUnitRespDTO.setApprovalUname(stepUnit.getApprovalUname()); stepUnitRespDTO.setApprovalActualTime(stepUnit.getApprovalActualTime()); stepUnitRespDTO.setApprovalEndTime(stepUnit.getApprovalEndTime()); stepUnitRespDTO.setApprovalStartTime(stepUnit.getApprovalStartTime()); stepUnitRespDTO.setFilledContent(stepUnit.getFillContent()); if (filledItemMap.get(stepUnit.getId()) != null) { stepUnitRespDTO.setFilledItems(filledItemMap.get(stepUnit.getId())); } stepUnitDTOs.add(stepUnitRespDTO); // 判断是否是审批人 if (stepUnit.getApprovalUid().equals(currentUser.getUid())) { isApprover = true; } } stepRespDTO.setStepItems(stepItemDTOs); stepRespDTO.setStepUnits(stepUnitDTOs); stepRespDTOs.add(stepRespDTO); } // 设备 if (devices.size() > 0) { List deviceRespDTOs = new ArrayList<>(devices.size()); ApproverWorkApprovalDeviceRespDTO deviceRespDTO; for (WorkApprovalDeviceInfo deviceInfo : devices) { deviceRespDTO = new ApproverWorkApprovalDeviceRespDTO(); deviceRespDTO.setDeviceId(deviceInfo.getId()); deviceRespDTO.setWorkApplyId(deviceInfo.getWorkApplyId()); deviceRespDTO.setDeviceName(deviceInfo.getDeviceName()); deviceRespDTO.setDeviceNo(deviceInfo.getDeviceNo()); deviceRespDTO.setShortName(deviceInfo.getShortName()); deviceRespDTOs.add(deviceRespDTO); } result.setDevices(deviceRespDTOs); } if (!isApprover) { throw new AusinessException(E.DATA_OPERATION_NO_PERMISSION, "操作人不为审批人"); } result.setWorkApplyId(workApplyInfo.getId()); result.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); result.setOperators(operatorRespDTOs); result.setApprovalSteps(stepRespDTOs); result.setWorkContent(workApplyInfo.getWorkContent()); result.setWorkLocation(workApplyInfo.getWorkLocation()); result.setHazardIdentification(workApplyInfo.getHazardIdentification()); return result; } @Override public ApproverWorkPendingApprovalDataRespDTO getPendingApprovalData(ContextCacheUser currentUser, Long workApplyId) { if (workApplyId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getWorkApprovalByApprovalUid(workApplyId, currentUser.getUid()); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在或者你不是该作业的审批人"); } // 获取当前层级 WorkApprovalStepInfo currentStep = workApprovalStepInfoService.getById(workApplyInfo.getApprovalStepId()); // todo 当前层级状态判断 如果已经有状态,没有可以审批的信息 // 获取当前单元 WorkApprovalUnitInfo currentUnit = workApprovalUnitInfoService.getWorkApprovalUnitByStepIdAndUid(currentStep.getId(), currentUser.getUid()); // 如果单元被自动驳回,需要返回当时的数据进行修改 if (currentUnit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_SUCCESS.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID, "单元审批已完成"); } ApproverWorkPendingApprovalDataRespDTO pendingData = new ApproverWorkPendingApprovalDataRespDTO(); // 层级 pendingData.setStepId(currentStep.getId()); pendingData.setWorkApplyId(currentStep.getWorkApplyId()); pendingData.setPersonType(currentStep.getPersonType()); ApprovalStepPersonTypeEnum personTypeEnum = ApprovalStepPersonTypeEnum.parse(currentStep.getPersonType()); if (personTypeEnum != null) { pendingData.setPersonTypeDesc(personTypeEnum.getDesc()); } pendingData.setApprovalType(currentStep.getApprovalType()); ApprovalStepApprovalTypeEnum approvalTypeEnum = ApprovalStepApprovalTypeEnum.parse(currentStep.getApprovalType()); if (approvalTypeEnum != null) { pendingData.setApprovalTypeDesc(approvalTypeEnum.value); } pendingData.setContentType(currentStep.getContentType()); ApprovalStepContentTypeEnum contentTypeEnum = ApprovalStepContentTypeEnum.parse(currentStep.getContentType()); if (contentTypeEnum != null) { pendingData.setContentTypeDesc(contentTypeEnum.getDesc()); } ApprovalStepApprovalTypeEnum.parse(currentStep.getApprovalType()); pendingData.setStepApprovalResult(currentStep.getApprovalResult()); WorkApprovalStepResultEnum approvalStepResultEnum = WorkApprovalStepResultEnum.parse(currentStep.getApprovalResult()); if (approvalStepResultEnum != null) { pendingData.setStepApprovalResultDesc(approvalStepResultEnum.getDesc()); } pendingData.setStepStartApprovalTime(currentStep.getStartApprovalTime()); pendingData.setStepExpFinishApprovalTime(currentStep.getExpFinishApprovalTime()); pendingData.setStepFinishApprovalTime(currentStep.getFinishApprovalTime()); pendingData.setPreStepId(currentStep.getPreStepId()); pendingData.setNextStepId(currentStep.getNextStepId()); pendingData.setContainItem(currentStep.getContainItem()); pendingData.setStepName(currentStep.getStepName()); // 单元 pendingData.setUnitId(currentUnit.getId()); pendingData.setApprovalUid(currentUnit.getApprovalUid()); pendingData.setApprovalUname(currentUnit.getApprovalUname()); pendingData.setUnitApprovalResult(currentUnit.getResult()); WorkApprovalUnitResultEnum approvalUnitResultEnum = WorkApprovalUnitResultEnum.parse(currentUnit.getResult()); if (approvalUnitResultEnum != null) { pendingData.setUnitApprovalResultDesc(approvalUnitResultEnum.getDesc()); } pendingData.setUnitApprovalStartTime(currentUnit.getApprovalStartTime()); pendingData.setUnitApprovalEndTime(currentUnit.getApprovalEndTime()); pendingData.setUnitApprovalActualTime(currentUnit.getApprovalActualTime()); // 审批项 List items = workApprovalItemInfoService.listWorkApprovalItemInfoByStepId(currentStep.getId()); // 审批措施 List measures = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyId); // 审批标准 List stands = workApprovalItemStandInfoService.listWorkApprovalItemStandByWorkApplyId(workApplyId); // // 已填写审批项内容 // List filledItems = workApprovalFilledItemInfoService.listApprovalFilledItemInfoByUnitId(currentUnit.getId()); // 安全措施映射准备 Map measureMap = new HashMap<>(measures.size()); ApproverWorkPendingApprovalItemMeasureRespDTO measureRespDTO; WorkTypeEnum workTypeEnum; MeasureTypeEnum measureTypeEnum; for (WorkApprovalItemMeasureInfo measure : measures) { measureRespDTO = new ApproverWorkPendingApprovalItemMeasureRespDTO(); measureRespDTO.setMeasureId(measure.getId()); measureRespDTO.setWorkType(measure.getWorkType()); workTypeEnum = WorkTypeEnum.parse(measure.getWorkType()); if (workTypeEnum != null) { measureRespDTO.setWorkTypeDesc(workTypeEnum.getName()); } measureRespDTO.setType(measure.getType()); measureTypeEnum = MeasureTypeEnum.parse(measure.getType()); if (measureTypeEnum != null) { measureRespDTO.setTypeDesc(measureTypeEnum.getDesc()); } measureRespDTO.setCorrectVal(measure.getCorrectVal()); measureRespDTO.setContext(measure.getContext()); measureRespDTO.setWorkApplyId(measure.getWorkApplyId()); measureMap.put(measureRespDTO.getMeasureId(), measureRespDTO); } // 标准映射准备 Map standMap = new HashMap<>(stands.size()); ApproverWorkPendingApprovalItemStandRespDTO standRespDTO; WorkStandTypeEnum standTypeEnum; RuleStandMatchingTypeEnum pattern; for (WorkApprovalItemStandInfo stand : stands) { standRespDTO = new ApproverWorkPendingApprovalItemStandRespDTO(); standRespDTO.setStandId(stand.getId()); standRespDTO.setType(stand.getType()); standTypeEnum = WorkStandTypeEnum.parse(stand.getType()); if (standTypeEnum != null) { standRespDTO.setTypeDesc(standTypeEnum.getDesc()); } standRespDTO.setDepName(stand.getDepName()); standRespDTO.setMinVal(stand.getMinVal()); standRespDTO.setMinValMatchPattern(stand.getMinValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(stand.getMinValMatchPattern()); if (pattern != null) { standRespDTO.setMinValMatchPatternDesc(pattern.getValue()); } standRespDTO.setMaxVal(stand.getMaxVal()); standRespDTO.setMaxValMatchPattern(stand.getMaxValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(stand.getMaxValMatchPattern()); if (pattern != null) { standRespDTO.setMaxValMatchPatternDesc(pattern.getValue()); } standRespDTO.setTitle(stand.getTitle()); standRespDTO.setWorkApplyId(stand.getWorkApplyId()); standMap.put(standRespDTO.getStandId(), standRespDTO); } // // 已经填写的内容准备 // Map filledItemRespDTOMap = new HashMap<>(filledItems.size()); // ApproverWorkApprovalUnitFilledItemRespDTO filledItemRespDTO; // for (WorkApprovalFilledItemInfo filledItem : filledItems) { // filledItemRespDTO = new ApproverWorkApprovalUnitFilledItemRespDTO(); // filledItemRespDTO.setId(filledItem.getId()); // filledItemRespDTO.setItemId(filledItem.getItemId()); // filledItemRespDTO.setUnitId(filledItem.getUnitId()); // filledItemRespDTO.setVal(filledItem.getVal()); // filledItemRespDTO.setWorkApplyId(filledItem.getWorkApplyId()); // filledItemRespDTO.setMeasureVal(filledItem.getMeasureVal()); // filledItemRespDTO.setMeasureText(filledItem.getMeasureText()); // filledItemRespDTOMap.put(filledItemRespDTO.getItemId(), filledItemRespDTO); // // } List itemRespDTOS = new ArrayList<>(items.size()); ApproverWorkPendingApprovalItemRespDTO itemRespDTO; RuleItemTypeEnum itemTypeEnum; for (WorkApprovalItemInfo item : items) { itemRespDTO = new ApproverWorkPendingApprovalItemRespDTO(); itemRespDTO.setItemId(item.getId()); itemRespDTO.setItemName(item.getItemName()); itemRespDTO.setWorkApplyId(item.getWorkApplyId()); itemRespDTO.setStepId(item.getStepId()); itemRespDTO.setUnitId(item.getUnitId()); itemRespDTO.setType(item.getType()); itemTypeEnum = RuleItemTypeEnum.parse(item.getType()); itemRespDTO.setTypeDesc(itemTypeEnum.getValue()); itemRespDTO.setStandId(item.getStandId()); itemRespDTO.setStand(standMap.get(item.getStandId())); itemRespDTO.setMeasureId(item.getMeasureId()); itemRespDTO.setMeasure(measureMap.get(item.getMeasureId())); // filledItemRespDTO = filledItemRespDTOMap.get(itemRespDTO.getItemId()); // if (filledItemRespDTO != null) { // itemRespDTO.setFilled(true); // itemRespDTO.setFilledItemContent(filledItemRespDTO); // } itemRespDTOS.add(itemRespDTO); } pendingData.setItems(itemRespDTOS); return pendingData; } @Override @Transactional public void approveItem(ContextCacheUser currentUser, ApprovalItemDataReqDTO approvalItemData) { if (approvalItemData.getWorkApplyId() == null ) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(approvalItemData.getWorkApplyId()); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } if (workApplyInfo.getStatus().equals(WorkApplyStatusEnum.STATU_ABORD.getStatus())) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请已终止"); } if (workApplyInfo.getStatus().equals(WorkApplyStatusEnum.STATU_FINISH.getStatus())) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请已结束"); } WorkApprovalStepInfo currentStep = workApprovalStepInfoService.getById(workApplyInfo.getApprovalStepId()); if (currentStep.getApprovalResult().equals(WorkApprovalStepResultEnum.WAIT_TO_START.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级审批未开始"); } // 当前层级不在审批中 <=> 层级审批结束 if (!currentStep.getApprovalResult().equals(WorkApprovalStepResultEnum.RESULT_IN_APPROVAL.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级审批已结束"); } WorkApprovalUnitInfo currentUnit = workApprovalUnitInfoService.getWorkApprovalUnitByStepIdAndUid(currentStep.getId(), currentUser.getUid()); // 审批单元 不存在 <=> 审批人非法 if (currentUnit == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "操作人非审批人"); } if (currentUnit.getResult().equals(WorkApprovalUnitResultEnum.WAIT_TO_START.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级单元未开始"); } // 如果单元状态既不是 !(审批中 | 自动驳回) if (!currentUnit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()) && !currentUnit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT.getResult())) { // 审批单元不在审批中 或者 自动驳回 <=> 当前单元已经结束 throw new AusinessException(E.DATA_STATUS_CHECK_INVALID, "当前审批单元已经结束"); } // 1.内容类型 => 审批项审批 if (currentStep.getContentType().equals(ApprovalStepContentTypeEnum.APP_ITEM.getType())) { // 0.审批项校验 List itemFilledContents = approvalItemData.getItemFilledContents(); if (itemFilledContents == null || itemFilledContents.size() == 0) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "审批项提交为空"); } // 查询当前层级所有审批项 List items = workApprovalItemInfoService.listWorkApprovalItemInfoByStepId(currentStep.getId()); List dBItemIds = items.stream().map(WorkApprovalItemInfo::getId).collect(Collectors.toList()); List paramItemIds = itemFilledContents.stream().map(ApprovalItemReqDTO::getItemId).collect(Collectors.toList()); // 判断提交的审批项 是否和 层级的审批项 id 完全相等 同时校验了提交id不重复 if (dBItemIds.size() != paramItemIds.size()) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "提交的审批项个数非法"); } if (!dBItemIds.containsAll(paramItemIds)) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "提交的审批项id不匹配"); } // 审批项 审批内容映射 Map itemMap = new HashMap<>(items.size()); for (WorkApprovalItemInfo item : items) { itemMap.put(item.getId(), item); } // 不是分析人层级 && 审批项目审批 if (!currentStep.getPersonType().equals(ApprovalStepPersonTypeEnum.TYPE_ANALYST.getType())) { // 获取所有措施 List measures = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyInfo.getId()); // 审批措施映射 Map measureMap = new HashMap<>(measures.size()); if (measures.size() > 0) { for (WorkApprovalItemMeasureInfo measure : measures) { measureMap.put(measure.getId(), measure); } } // 不是分析人审批 => 安全措施 和 措施内容填写 for (ApprovalItemReqDTO itemFilledContent : itemFilledContents) { WorkApprovalItemInfo itemInfo = itemMap.get(itemFilledContent.getItemId()); assert itemInfo != null; RuleItemTypeEnum itemTypeEnum = RuleItemTypeEnum.parse(itemInfo.getType()); if (itemTypeEnum == RuleItemTypeEnum.FILL) { if (StringUtils.isBlank(itemFilledContent.getMeasureText())) { throw new AusinessException(E.DATA_PARAM_NULL, "审批项措施内容填写为空"); } } if (itemTypeEnum == RuleItemTypeEnum.OPTION) { if (itemFilledContent.getMeasureVal() == null) { throw new AusinessException(E.DATA_PARAM_NULL, "审批措施选项填写为空"); } WorkRuleMeasureOptEnum measureOptEnum = WorkRuleMeasureOptEnum.parse(itemFilledContent.getMeasureVal()); if (measureOptEnum == null) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "审批措施选项非法填写"); } } } List filledItemInfos = new ArrayList<>(items.size()); List contents = new ArrayList<>(items.size()); WorkApprovalFilledItemInfo filledItemInfo; boolean unitAutoReject = false; for (ApprovalItemReqDTO itemFilledContent : itemFilledContents) { // 根据item 的类型 WorkApprovalItemInfo itemInfo = itemMap.get(itemFilledContent.getItemId()); filledItemInfo = new WorkApprovalFilledItemInfo(); filledItemInfo.setId(IdUtil.getSnowflake(0,0).nextId()); filledItemInfo.setItemId(itemFilledContent.getItemId()); filledItemInfo.setUnitId(currentUnit.getId()); filledItemInfo.setWorkApplyId(workApplyInfo.getId()); // 选项类型 - 安全措施自动判断 if (itemInfo.getType().equals(RuleItemTypeEnum.OPTION.getCode())) { // 对象选项赋予 filledItemInfo.setMeasureVal(itemFilledContent.getMeasureVal()); WorkRuleMeasureOptEnum optEnum = WorkRuleMeasureOptEnum.parse(filledItemInfo.getMeasureVal()); // 选项记录 contents.add(String.format("%s 判断为:%s", itemInfo.getItemName(), optEnum.getDesc())); // 安全措施 WorkApprovalItemMeasureInfo measureInfo = measureMap.get(itemInfo.getMeasureId()); // 是否符合安全措施的判断 boolean measureQualified = itemFilledContent.getMeasureVal().equals(measureInfo.getCorrectVal()); // 选项为是或否 && 不符合安全措施的判断 => 自动驳回 if (optEnum != WorkRuleMeasureOptEnum.UNINVOLVED && !measureQualified) { unitAutoReject = true; // 终止判断 break; } } if (itemInfo.getType().equals(RuleItemTypeEnum.FILL.getCode())) { // 对象填空赋予 filledItemInfo.setMeasureText(itemFilledContent.getMeasureText()); // 填空记录 contents.add(String.format("%s 填写:%s", itemInfo.getItemName(), filledItemInfo.getMeasureText())); } // add filledItemInfos.add(filledItemInfo); } // 填报记录 workApplyRecordService.log(currentUser, ProcessOperationEnum.APPROVE, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(), currentStep.getStepName(), String.join(",", contents)); // 没有自动驳回 所有审批项默认符合标准,保存进数据库 if (!unitAutoReject) { workApprovalFilledItemInfoService.saveBatchFilledItemInfo(filledItemInfos); // 单元状态 => 通过 workApprovalUnitInfoService.updateStatusById(currentUnit.getId(), WorkApprovalUnitResultEnum.RESULT_SUCCESS); // 操作记录 workApplyRecordService.log(ProcessOperationEnum.APPROVE_SUCCESS, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(),currentStep.getStepName(), null); }else{ // 单元状态 => 自动驳回 workApprovalUnitInfoService.updateStatusById(currentUnit.getId(), WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT); // 自动驳回 <=> 单元阻塞 // 操作记录 workApplyRecordService.log(ProcessOperationEnum.AUTO_REJECT, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(), currentStep.getStepName(), null); } } // 1.1 审批项审批 分析层级 的数据标准不需要填写 if (currentStep.getPersonType().equals(ApprovalStepPersonTypeEnum.TYPE_ANALYST.getType())) { // 1.1.1 数据填报校验 // 至少包含一个审批项标准 boolean atLeastOne = false; for (ApprovalItemReqDTO itemFillContent : itemFilledContents) { // 标准填写涉及不涉及 if (itemFillContent.getFillType() == null) { throw new AusinessException(E.DATA_PARAM_NULL, "审批项是否涉及为空"); } ApprovalFilledItemType itemType = ApprovalFilledItemType.parse(itemFillContent.getFillType()); if (itemType == null) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "审批项涉及选项非法填写"); } if (itemType == ApprovalFilledItemType.INVOLVED) { atLeastOne = true; } } // 1.1.2 if (!atLeastOne) { throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "至少涉及一个审批项标准"); } // 1.1.3 准备保存进数据库 List filledItemInfos = new ArrayList<>(items.size()); WorkApprovalFilledItemInfo filledItemInfo; for (ApprovalItemReqDTO itemFillContent : itemFilledContents) { filledItemInfo = new WorkApprovalFilledItemInfo(); filledItemInfo.setId(IdUtil.getSnowflake(0,0).nextId()); filledItemInfo.setFillType(itemFillContent.getFillType()); filledItemInfo.setUnitId(currentUnit.getId()); filledItemInfo.setWorkApplyId(workApplyInfo.getId()); filledItemInfo.setItemId(itemFillContent.getItemId()); filledItemInfos.add(filledItemInfo); } // 入库 workApprovalFilledItemInfoService.saveBatchFilledItemInfo(filledItemInfos); // 单元状态 => 通过 workApprovalUnitInfoService.updateStatusById(currentUnit.getId(), WorkApprovalUnitResultEnum.RESULT_SUCCESS); // 操作记录 workApplyRecordService.log(ProcessOperationEnum.APPROVE_SUCCESS, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(),currentStep.getStepName(), null); } } // 2.内容类型 => 简单审批 if (currentStep.getContentType().equals(ApprovalStepContentTypeEnum.APP_SIMPLE.getType())) { if (StringUtils.isBlank(approvalItemData.getUnitFillContent())) { throw new AusinessException(E.DATA_PARAM_NULL, "单元填报意见不能为空"); } // 填报记录 workApplyRecordService.log(currentUser, ProcessOperationEnum.APPROVE, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(),currentStep.getStepName(), approvalItemData.getUnitFillContent()); // 单元状态 => 填报内容 && 通过 workApprovalUnitInfoService.updateStatusAndFillContentById(currentUnit.getId(), approvalItemData.getUnitFillContent(), WorkApprovalUnitResultEnum.RESULT_SUCCESS); // 操作记录 workApplyRecordService.log(ProcessOperationEnum.APPROVE_SUCCESS, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(),currentStep.getStepName(), null); } // 3.判断是否所有单元是否通过 List units = workApprovalUnitInfoService.listApprovalRuleUnitByStepId(currentStep.getId()); // 是否还有单元再审批中(审批中 和 自动驳回 都是需要审批) boolean isUnitUnderApproval = false; for (WorkApprovalUnitInfo unit : units) { if (unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()) || unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT.getResult())) { isUnitUnderApproval = true; break; } } // 是否有一个人通过 boolean jointTrialOneSuccess = false; // 未审批通过单元 ids List otherUnApprovalUnitIds = new ArrayList<>(units.size()); // 多人会审 => 判断是否存在单元通过 if (currentStep.getAuditType() != null && currentStep.getAuditType().equals(AuditTypeEnum.CONCURRENT_JOINT_TRIAL.getType())) { for (WorkApprovalUnitInfo unit : units) { if (unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_SUCCESS.getResult())) { jointTrialOneSuccess = true; }else{ otherUnApprovalUnitIds.add(unit.getId()); } } } // 没有单元审批中 || 多人会审一人通过 => 层级通过 if (!isUnitUnderApproval || jointTrialOneSuccess) { // 会审情况 => 将其他单元状态改成未审批通过(层级已结束) if (jointTrialOneSuccess && otherUnApprovalUnitIds.size() > 0) { // 修改状态 workApprovalUnitInfoService.batchUpdateStatusByIds(otherUnApprovalUnitIds, WorkApprovalUnitResultEnum.RESULT_APPROVED_UNSUCCESS); } // 层级通过 workApprovalStepInfoService.updateStatusById(currentStep.getId(), WorkApprovalStepResultEnum.RESULT_SUCCESS); // 层级结束时间 workApprovalStepInfoService.updateFinishApprovalTimeById(currentStep.getId(), LocalDateTime.now()); // 层级是最后的层级 <=> 作业结束 if (currentStep.getNextStepId() == null) { // 作业结束 workApplyInfoService.updateStatusById(workApplyInfo.getId(), WorkApplyStatusEnum.STATU_FINISH); // 作业层级指向 置空 workApplyInfoService.finishStepById(workApplyInfo.getId()); // 操作记录 workApplyRecordService.log(ProcessOperationEnum.FINISH, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(), currentStep.getStepName(), null); // 开始作业 // 作业相关信息 WorkInfo workInfoEntity = new WorkInfo(); workInfoEntity.setId(IdUtil.getSnowflake(0, 0).nextId()); workInfoEntity.setWorkApplyId(workApplyInfo.getId()); workInfoEntity.setWorkType(workApplyInfo.getWorkType()); workInfoEntity.setWorkLevel(workApplyInfo.getWorkLevel()); workInfoEntity.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); // 分析未开始 workInfoEntity.setWorkAnalysisStatus(WorkingAnalysisStatusEnum.WAIT_TO_START.code); // 作业未开始 workInfoEntity.setWorkStatus(WorkingStatusEnum.WAIT_TO_START.code); workInfoEntity.setWorkAcceptStatus(WorkingAcceptStatusEnum.UNSTARTED.code); workInfoEntity.setGmtCreate(LocalDateTime.now()); // todo 存入的部门是当前申请人的部门还是所有作业人员的部门 workInfoEntity.setDepId(workApplyInfo.getDepId()); // 作业相关状态 workInfoService.saveWorkInfo(workInfoEntity); }else{ // 开始下一个层级 WorkApprovalStepInfo nextStep = workApprovalStepInfoService.getById(currentStep.getNextStepId()); // 作业指向下一个层级 workApplyInfoService.updateApprovalStepIdById(workApplyInfo.getId(),currentStep.getNextStepId()); // 下一个层级状态为审批中 workApprovalStepInfoService.updateStatusById(nextStep.getId(), WorkApprovalStepResultEnum.RESULT_IN_APPROVAL); // 下一个层级开始时间更新 workApprovalStepInfoService.updateStartApprovalTimeById(nextStep.getId(), LocalDateTime.now()); // 层级下所有单元状态为审批中 workApprovalUnitInfoService.updateStatusByStepId(nextStep.getId(),WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL); } } } @Override public void abordItem(ContextCacheUser currentUser, ApprovalItemAbordDataReqDTO abordDataReqDTO) { if ( abordDataReqDTO.getWorkApplyId() == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(abordDataReqDTO.getWorkApplyId()); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } if (workApplyInfo.getStatus().equals(WorkApplyStatusEnum.STATU_ABORD.getStatus())) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请已终止"); } if (workApplyInfo.getStatus().equals(WorkApplyStatusEnum.STATU_FINISH.getStatus())) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请已结束"); } WorkApprovalStepInfo currentStep = workApprovalStepInfoService.getById(workApplyInfo.getApprovalStepId()); if (currentStep.getApprovalResult().equals(WorkApprovalStepResultEnum.WAIT_TO_START.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级审批未开始"); } // 当前层级不在审批中 <=> 层级审批结束 if (!currentStep.getApprovalResult().equals(WorkApprovalStepResultEnum.RESULT_IN_APPROVAL.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级审批已结束"); } WorkApprovalUnitInfo currentUnit = workApprovalUnitInfoService.getWorkApprovalUnitByStepIdAndUid(currentStep.getId(), currentUser.getUid()); // 审批单元 不存在 <=> 审批人非法 if (currentUnit == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "操作人非审批人"); } if (currentUnit.getResult().equals(WorkApprovalUnitResultEnum.WAIT_TO_START.getResult())) { throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"当前层级单元未开始"); } if (currentUnit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()) || currentUnit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT.getResult())) { // 1.单元终止 workApprovalUnitInfoService.updateStatusById(currentUnit.getId(), WorkApprovalUnitResultEnum.RESULT_ABORD); // 2.当前层级其他单元 更新状态为 终止提前结束 List currentStepUnits = workApprovalUnitInfoService.listApprovalRuleUnitByStepId(currentStep.getId()); List unitIdsExceptCurrent = currentStepUnits.stream().filter(unit -> // 除此之外 && 状态是(审批中 | 自动驳回) !unit.getId().equals(currentUnit.getId()) && (unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_IN_APPROVAL.getResult()) || unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_AUTO_REJECT.getResult()))) // id .map(WorkApprovalUnitInfo::getId) // 集合 .collect(Collectors.toList()); if (unitIdsExceptCurrent.size() > 0) { workApprovalUnitInfoService.updateStatusByIds(unitIdsExceptCurrent, WorkApprovalUnitResultEnum.RESULT_INTERRUPTED); } // 3.层级终止 workApprovalStepInfoService.updateStatusById(currentStep.getId(), WorkApprovalStepResultEnum.RESULT_ABORD); // 4.作业终止 workApplyInfoService.updateStatusById(workApplyInfo.getId(), WorkApplyStatusEnum.STATU_ABORD); // 5.操作记录 workApplyRecordService.log(currentUser, ProcessOperationEnum.ABORD, workApplyInfo.getId(), workApplyInfo.getApprovalStepId(), currentStep.getStepName(), null); }else{ // 审批单元不在审批中 或者 自动驳回 <=> 当前单元已经结束 throw new AusinessException(E.DATA_STATUS_CHECK_INVALID, "当前审批单元已经结束"); } } /** * 打印票证 * @param currentUser */ @Override public void printing(ContextCacheUser currentUser, Long applyWorkId, HttpServletResponse response) { //主键id不可为空 if(null == applyWorkId){ throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } //获取当前作业基础数据 WorkApplyInfo workApplyInfo = workApplyInfoService.getById(applyWorkId); if(workApplyInfo == null){ throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT,"该条作业不存在!"); } //判断该作业未结束不可打印(暂定) if(!WorkApplyStatusEnum.parse(workApplyInfo.getStatus()).equals(WorkApplyStatusEnum.STATU_FINISH)){ throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"此作业票未走完审批流,不可导出!"); } //调用具体导出功能 //workPrintService.workPrint(response,workApplyInfo); } /** * 打印票证 * @param currentUser */ @Override public void printingPdf(ContextCacheUser currentUser, Long applyWorkId, HttpServletResponse response) { //主键id不可为空 if(null == applyWorkId){ throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } //获取当前作业基础数据 WorkApplyInfo workApplyInfo = workApplyInfoService.getById(applyWorkId); WorkInfo workInfo = workInfoService.getWorkByWorkApplyId(applyWorkId); if(workApplyInfo == null || workInfo == null){ throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT,"该条作业不存在!"); } //作业未结束不可以打印 if(!WorkingAcceptStatusEnum.parse(workInfo.getWorkAcceptStatus()).equals(WorkingAcceptStatusEnum.ALREADY_ACCEPTED)){ throw new AusinessException(E.DATA_STATUS_CHECK_INVALID,"此作业未完成验收,不可执行导出功能!"); } try{ //调用具体导出功能 workPrintService.workPrintPdf(response,workApplyInfo,workInfo); }catch (AusinessException e) { e.printStackTrace(); throw new AusinessException(e.getCode(), e.getMessage()); }catch (BusinessException e) { e.printStackTrace(); throw new BusinessException(e.getCode(), e.getMessage()); }catch (Exception e){ logger.error("导出失败!",e); throw new AusinessException(E.EXPORT_FAIL,"导出失败!"); } } @Override public SearchResultVO> listAllWorkApply(ContextCacheUser currentUser, PageQuery pageQuery) { AllWorkApplyPageDBQuery dbQuery = new AllWorkApplyPageDBQuery(); if (pageQuery.getSearchParams() != null) { dbQuery.setStatus(pageQuery.getSearchParams().getStatus()); dbQuery.setWorkType(pageQuery.getSearchParams().getWorkType()); dbQuery.setWorkLevel(pageQuery.getSearchParams().getWorkLevel()); dbQuery.setApplyDepId(pageQuery.getSearchParams().getApplyDepId()); dbQuery.setApplyStartTime(pageQuery.getSearchParams().getApplyStartTime()); dbQuery.setApplyEndTime(pageQuery.getSearchParams().getApplyEndTime()); } Page page = new Page<>(pageQuery.getPageIndex(), pageQuery.getPageSize()); List dbData = workApplyInfoService.listAllWorkApplyByPage(page, dbQuery); List respDTOs = new ArrayList<>(dbData.size()); WorkApplyStatusEnum statusEnum; WorkLevelEnum levelEnum; WorkTypeEnum workTypeEnum; List operatorRespDTOs; WorkApplyOperatorRespDTO operatorRespDTO; for (WorkApplyInfo workApplyInfo : dbData) { AllWorkApplyPageRespDTO respDTO = new AllWorkApplyPageRespDTO(); respDTO.setWorkApplyId(workApplyInfo.getId()); respDTO.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); respDTO.setWorkContent(workApplyInfo.getWorkContent()); respDTO.setWorkLocation(workApplyInfo.getWorkLocation()); respDTO.setHazardIdentification(workApplyInfo.getHazardIdentification()); respDTO.setDepId(workApplyInfo.getDepId()); respDTO.setDepName(workApplyInfo.getDepName()); respDTO.setApplyTime(workApplyInfo.getApplyTime()); respDTO.setApplyUid(workApplyInfo.getApplyUid()); respDTO.setApplyUname(workApplyInfo.getApplyUname()); respDTO.setApprovalStepId(workApplyInfo.getApprovalStepId()); respDTO.setExpEndTime(workApplyInfo.getExpEndTime()); respDTO.setExpStartTime(workApplyInfo.getExpStartTime()); respDTO.setGmtCreate(workApplyInfo.getGmtCreate()); respDTO.setGmtModified(workApplyInfo.getGmtModified()); respDTO.setStatus(workApplyInfo.getStatus()); respDTO.setMaterialStatus(workApplyInfo.getMaterialStatus()); //作业情况 respDTO.setWorking(workInfoService.getWorkByWorkApplyId(workApplyInfo.getId())); MaterialCheckResultEnum materialCheckResultEnum = MaterialCheckResultEnum.parse(workApplyInfo.getMaterialStatus()); if(materialCheckResultEnum != null){ respDTO.setMaterialStatusDesc(materialCheckResultEnum.getDesc()); } statusEnum = WorkApplyStatusEnum.parse(workApplyInfo.getStatus()); if (statusEnum != null) { respDTO.setStatusDesc(statusEnum.getDesc()); } respDTO.setWorkLevel(workApplyInfo.getWorkLevel()); levelEnum = WorkLevelEnum.parse(workApplyInfo.getWorkLevel()); if (levelEnum != null) { respDTO.setWorkLevelDesc(levelEnum.getTitle()); } respDTO.setWorkType(workApplyInfo.getWorkType()); workTypeEnum = WorkTypeEnum.parse(workApplyInfo.getWorkType()); if (workTypeEnum != null) { respDTO.setWorkTypeDesc(workTypeEnum.getName()); } // 操作人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyInfo.getId()); operatorRespDTOs = new ArrayList<>(operators.size()); for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new WorkApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } respDTO.setOperators(operatorRespDTOs); // 八大作业 if (workTypeEnum != null) { Object workDetail = this.getWorkDetail(workTypeEnum, workApplyInfo.getId(), workApplyInfo.getWorkDetailId()); if (workDetail != null) { respDTO.setWorkDetail(workDetail); } } //物资 List workMaterialInfoList = workMaterialInfoService.listByWorkApplyId(workApplyInfo.getId()); if(workMaterialInfoList.size() > 0){ List workMaterialRespDTOList = BeanCopyUtils.copyBeanList(workMaterialInfoList, WorkMaterialRespDTO.class); respDTO.setWorkMaterial(workMaterialRespDTOList); } respDTOs.add(respDTO); } return new SearchResultVO<>( true, page.getCurrent(), page.getSize(), page.getPages(), page.getTotal(), respDTOs, ResultCodes.OK); } @Override public OthersWorkApprovedApplyDetailRespDTO getWorkApplyDetailForOthers(ContextCacheUser currentUser, Long workApplyId) { if (workApplyId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } WorkApplyInfo workApplyInfo = workApplyInfoService.getById(workApplyId); if (workApplyInfo == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "作业申请不存在"); } // 结果 result OthersWorkApprovedApplyDetailRespDTO result = new OthersWorkApprovedApplyDetailRespDTO(); // 获取作业人 List operators = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyId); // 获取层级 List steps = workApprovalStepInfoService.listApprovalRuleStepByWorkApplyId(workApplyId); // 获取单元 List units = workApprovalUnitInfoService.listApprovalRuleUnitByWorkApplyId(workApplyId); // 获取审批项 List items = workApprovalItemInfoService.listWorkApprovalItemByWorkApplyId(workApplyId); // 获取已经填报审批项 List filledItems = workApprovalFilledItemInfoService.listApprovalFilledItemInfoByWorkApplyId(workApplyId); // 获取标准 List stands = workApprovalItemStandInfoService.listWorkApprovalItemStandByWorkApplyId(workApplyId); // 获取措施 List measures = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyId); // 获取设备 List devices = workApprovalDeviceInfoService.listWorkApprovalDeviceByWorkApplyId(workApplyId); // 措施处理映射 Map measureMap = new HashMap<>(measures.size()); OthersWorkApprovalItemMeasureRespDTO measureRespDTO; MeasureTypeEnum measureTypeEnum; WorkTypeEnum workTypeEnum; for (WorkApprovalItemMeasureInfo measureInfo : measures) { measureRespDTO = new OthersWorkApprovalItemMeasureRespDTO(); measureRespDTO.setMeasureId(measureInfo.getId()); measureRespDTO.setContext(measureInfo.getContext()); measureRespDTO.setCorrectVal(measureInfo.getCorrectVal()); measureRespDTO.setWorkType(measureInfo.getWorkType()); measureRespDTO.setType(measureInfo.getType()); measureTypeEnum = MeasureTypeEnum.parse(measureInfo.getType()); if (measureTypeEnum != null) { measureRespDTO.setTypeDesc(measureTypeEnum.getDesc()); } workTypeEnum = WorkTypeEnum.parse(measureInfo.getWorkType()); if (workTypeEnum != null) { measureRespDTO.setWorkTypeDesc(workTypeEnum.getName()); } measureMap.put(measureRespDTO.getMeasureId(), measureRespDTO); } // 标准处理映射 Map standMap = new HashMap<>(stands.size()); OthersWorkApprovalItemStandRespDTO standRespDTO; WorkStandTypeEnum standTypeEnum; RuleStandMatchingTypeEnum pattern; for (WorkApprovalItemStandInfo standInfo : stands) { standRespDTO = new OthersWorkApprovalItemStandRespDTO(); standRespDTO.setStandId(standInfo.getId()); standRespDTO.setWorkApplyId(standInfo.getWorkApplyId()); standRespDTO.setDepId(standInfo.getDepId()); standRespDTO.setDepName(standInfo.getDepName()); standRespDTO.setEid(standInfo.getEid()); standRespDTO.setMaxVal(standInfo.getMaxVal()); standRespDTO.setMaxValMatchPattern(standInfo.getMaxValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMaxValMatchPattern()); if (pattern != null) { standRespDTO.setMaxValMatchPatternDesc(pattern.getValue()); } standRespDTO.setMinVal(standInfo.getMinVal()); standRespDTO.setMinValMatchPattern(standInfo.getMinValMatchPattern()); pattern = RuleStandMatchingTypeEnum.parse(standInfo.getMinValMatchPattern()); if (pattern != null) { standRespDTO.setMinValMatchPatternDesc(pattern.getValue()); } standRespDTO.setTitle(standInfo.getTitle()); standRespDTO.setType(standInfo.getType()); standTypeEnum = WorkStandTypeEnum.parse(standInfo.getType()); if (standTypeEnum != null) { standRespDTO.setTypeDesc(standTypeEnum.getDesc()); } standMap.put(standRespDTO.getStandId(), standRespDTO); } // 审批项映射 Map itemsMap = new HashMap<>(items.size()); for (WorkApprovalItemInfo item : items) { itemsMap.put(item.getId(), item); } // 已填写审批项映射 Map> filledItemMap = new HashMap<>(filledItems.size()); OthersWorkApprovalUnitFilledItemRespDTO filledItemRespDTO; WorkApprovalItemInfo itemInfo; RuleItemTypeEnum itemType; WorkRuleMeasureOptEnum optEnum; ApprovalFilledItemType filledItemType; for (WorkApprovalFilledItemInfo filledItem : filledItems) { filledItemRespDTO = new OthersWorkApprovalUnitFilledItemRespDTO(); filledItemRespDTO.setId(filledItem.getId()); filledItemRespDTO.setWorkApplyId(filledItem.getWorkApplyId()); filledItemRespDTO.setUnitId(filledItem.getUnitId()); filledItemRespDTO.setMeasureVal(filledItem.getMeasureVal()); filledItemRespDTO.setMeasureText(filledItem.getMeasureText()); filledItemRespDTO.setAnalysisLocation(filledItem.getAnalysisLocation()); filledItemRespDTO.setVal(filledItem.getVal()); filledItemRespDTO.setItemId(filledItem.getItemId()); filledItemRespDTO.setFillType(filledItem.getFillType()); optEnum = WorkRuleMeasureOptEnum.parse(filledItem.getMeasureVal()); if (optEnum != null) { filledItemRespDTO.setMeasureValDesc(optEnum.getDesc()); } filledItemType = ApprovalFilledItemType.parse(filledItem.getFillType()); if (filledItemType != null) { filledItemRespDTO.setFillTypeDesc(filledItemType.value); } itemInfo = itemsMap.get(filledItem.getItemId()); if (itemInfo != null) { filledItemRespDTO.setItemName(itemInfo.getItemName()); filledItemRespDTO.setStandId(itemInfo.getStandId()); filledItemRespDTO.setMeasureId(itemInfo.getMeasureId()); filledItemRespDTO.setMeasureInvolve(itemInfo.getMeasureInvolve()); filledItemRespDTO.setItemType(itemInfo.getType()); itemType = RuleItemTypeEnum.parse(itemInfo.getType()); if (itemType != null) { filledItemRespDTO.setItemTypeDesc(itemType.getValue()); } // 措施 filledItemRespDTO.setMeasure(measureMap.get(itemInfo.getMeasureId())); // 标准 filledItemRespDTO.setStand(standMap.get(itemInfo.getStandId())); } if (filledItemMap.get(filledItem.getUnitId()) == null) { List list = new ArrayList<>(); list.add(filledItemRespDTO); filledItemMap.put(filledItem.getUnitId(), list); } else { filledItemMap.get(filledItem.getUnitId()).add(filledItemRespDTO); } } // 作业人处理 List operatorRespDTOs = new ArrayList<>(operators.size()); OthersWorkApprovedApplyOperatorRespDTO operatorRespDTO; for (WorkApplyOperatorInfo operator : operators) { operatorRespDTO = new OthersWorkApprovedApplyOperatorRespDTO(); operatorRespDTO.setId(operator.getId()); operatorRespDTO.setOperatorUid(operator.getOperatorUid()); operatorRespDTO.setOperatorUname(operator.getOperatorUname()); operatorRespDTO.setOperatorCertificate(operator.getOperatorCertificate()); operatorRespDTO.setOperatorPhone(operator.getOperatorPhone()); operatorRespDTO.setOperatorIdentify(operator.getOperatorIdentify()); operatorRespDTO.setWorkApplyId(operator.getWorkApplyId()); operatorRespDTOs.add(operatorRespDTO); } // 层级处理 Long currentStepId = workApplyInfo.getApprovalStepId(); // 已经走过的层级和当前所处层级 List approvedSteps = this.makeApprovedStepInOrder(currentStepId, steps); List stepRespDTOs = new ArrayList<>(approvedSteps.size()); OthersWorkApprovalStepRespDTO stepRespDTO; OthersWorkApprovalUnitRespDTO stepUnitRespDTO; OthersWorkApprovalItemRespDTO stepItemRespDTO; ApprovalStepPersonTypeEnum personTypeEnum; ApprovalStepApprovalTypeEnum approvalTypeEnum; ApprovalStepContentTypeEnum contentTypeEnum; WorkApprovalStepResultEnum approvalStepResultEnum; WorkApprovalUnitResultEnum approvalUnitResultEnum; RuleItemTypeEnum itemTypeEnum; AuditTypeEnum auditTypeEnum; // 1.层级处理和单元处理 for (WorkApprovalStepInfo step : approvedSteps) { stepRespDTO = new OthersWorkApprovalStepRespDTO(); stepRespDTO.setStepId(step.getId()); stepRespDTO.setWorkApplyId(step.getWorkApplyId()); stepRespDTO.setApprovalResult(step.getApprovalResult()); approvalStepResultEnum = WorkApprovalStepResultEnum.parse(step.getApprovalResult()); if (approvalStepResultEnum != null) { stepRespDTO.setApprovalResultDesc(approvalStepResultEnum.getDesc()); } stepRespDTO.setExpFinishApprovalTime(step.getExpFinishApprovalTime()); stepRespDTO.setFinishApprovalTime(step.getFinishApprovalTime()); stepRespDTO.setPersonType(step.getPersonType()); personTypeEnum = ApprovalStepPersonTypeEnum.parse(step.getPersonType()); if (personTypeEnum != null) { stepRespDTO.setPersonTypeDesc(personTypeEnum.getDesc()); } approvalTypeEnum= ApprovalStepApprovalTypeEnum.parse(step.getApprovalType()); if (approvalTypeEnum != null) { stepRespDTO.setApprovalTypeDesc(approvalTypeEnum.value); } stepRespDTO.setApprovalType(step.getApprovalType()); stepRespDTO.setContentType(step.getContentType()); contentTypeEnum = ApprovalStepContentTypeEnum.parse(step.getContentType()); if (contentTypeEnum != null) { stepRespDTO.setContentTypeDesc(contentTypeEnum.getDesc()); } stepRespDTO.setStartApprovalTime(step.getStartApprovalTime()); stepRespDTO.setStepSerial(step.getStepSerial()); stepRespDTO.setNextStepId(step.getNextStepId()); stepRespDTO.setPreStepId(step.getPreStepId()); stepRespDTO.setContainItem(step.getContainItem()); stepRespDTO.setStepName(step.getStepName()); stepRespDTO.setAuditType(step.getAuditType()); auditTypeEnum = AuditTypeEnum.parse(step.getAuditType()); if (auditTypeEnum != null) { stepRespDTO.setAuditTypeDesc(auditTypeEnum.getDesc()); } // 审批项处理 List stepItems = items.stream().filter(item -> // 当前层级的审批项 step.getId().equals(item.getStepId())) // 集合 .collect(Collectors.toList()); List stepItemDTOs = new ArrayList<>(stepItems.size()); for (WorkApprovalItemInfo stepItem : stepItems) { stepItemRespDTO = new OthersWorkApprovalItemRespDTO(); stepItemRespDTO.setItemId(stepItem.getId()); stepItemRespDTO.setStepId(step.getId()); stepItemRespDTO.setWorkApplyId(stepItem.getWorkApplyId()); stepItemRespDTO.setItemName(stepItem.getItemName()); stepItemRespDTO.setMeasureId(stepItem.getMeasureId()); stepItemRespDTO.setMeasureInvolve(stepItem.getMeasureInvolve()); stepItemRespDTO.setStandId(stepItem.getStandId()); stepItemRespDTO.setUnitId(stepItem.getUnitId()); stepItemRespDTO.setType(stepItem.getType()); itemTypeEnum = RuleItemTypeEnum.parse(stepItem.getType()); stepItemRespDTO.setTypeDesc(itemTypeEnum.getValue()); // 措施 stepItemRespDTO.setMeasure(measureMap.get(stepItem.getMeasureId())); // 标准 stepItemRespDTO.setStand(standMap.get(stepItem.getStandId())); stepItemDTOs.add(stepItemRespDTO); } // 当前层级单元 List stepUnits = units.stream().filter(unit -> // 所属层级 step.getId().equals(unit.getStepId())) // 集合 .collect(Collectors.toList()); // 单元处理 List stepUnitDTOs = new ArrayList<>(stepUnits.size()); for (WorkApprovalUnitInfo stepUnit : stepUnits) { stepUnitRespDTO = new OthersWorkApprovalUnitRespDTO(); stepUnitRespDTO.setUnitId(stepUnit.getId()); stepUnitRespDTO.setStepId(stepUnit.getStepId()); stepUnitRespDTO.setWorkApplyId(stepUnit.getWorkApplyId()); stepUnitRespDTO.setResult(stepUnit.getResult()); approvalUnitResultEnum = WorkApprovalUnitResultEnum.parse(stepUnit.getResult()); if (approvalUnitResultEnum != null) { stepUnitRespDTO.setResultDesc(approvalUnitResultEnum.getDesc()); } stepUnitRespDTO.setApprovalUid(stepUnit.getApprovalUid()); stepUnitRespDTO.setApprovalUname(stepUnit.getApprovalUname()); stepUnitRespDTO.setApprovalActualTime(stepUnit.getApprovalActualTime()); stepUnitRespDTO.setApprovalEndTime(stepUnit.getApprovalEndTime()); stepUnitRespDTO.setApprovalStartTime(stepUnit.getApprovalStartTime()); stepUnitRespDTO.setFilledContent(stepUnit.getFillContent()); if (filledItemMap.get(stepUnit.getId()) != null) { stepUnitRespDTO.setFilledItems(filledItemMap.get(stepUnit.getId())); } stepUnitDTOs.add(stepUnitRespDTO); } stepRespDTO.setStepItems(stepItemDTOs); stepRespDTO.setStepUnits(stepUnitDTOs); stepRespDTOs.add(stepRespDTO); } // 设备 if (devices.size() > 0) { List deviceRespDTOs = new ArrayList<>(devices.size()); OthersWorkApprovalDeviceRespDTO deviceRespDTO; for (WorkApprovalDeviceInfo deviceInfo : devices) { deviceRespDTO = new OthersWorkApprovalDeviceRespDTO(); deviceRespDTO.setDeviceId(deviceInfo.getId()); deviceRespDTO.setWorkApplyId(deviceInfo.getWorkApplyId()); deviceRespDTO.setDeviceName(deviceInfo.getDeviceName()); deviceRespDTO.setDeviceNo(deviceInfo.getDeviceNo()); deviceRespDTO.setShortName(deviceInfo.getShortName()); deviceRespDTOs.add(deviceRespDTO); } result.setDevices(deviceRespDTOs); } result.setWorkApplyId(workApplyInfo.getId()); result.setWorkPermitNo(workApplyInfo.getWorkPermitNo()); result.setOperators(operatorRespDTOs); result.setApprovalSteps(stepRespDTOs); result.setWorkContent(workApplyInfo.getWorkContent()); result.setWorkLocation(workApplyInfo.getWorkLocation()); result.setHazardIdentification(workApplyInfo.getHazardIdentification()); result.setMaterialStatus(workApplyInfo.getMaterialStatus()); MaterialCheckResultEnum materialCheckResultEnum = MaterialCheckResultEnum.parse(workApplyInfo.getMaterialStatus()); if(null != materialCheckResultEnum){ result.setMaterialStatusDesc(materialCheckResultEnum.getDesc()); } return result; } // 递归寻找有序的层级 private List makeApprovedStepInOrder(Long currentStepId, List steps) { Map map = new HashMap<>(); List result = new ArrayList<>(); // 循环中找出最后一个层级 WorkApprovalStepInfo lastStep = null; for (WorkApprovalStepInfo step : steps) { map.put(step.getId(), step); if (step.getNextStepId() == null) { lastStep = step; } } WorkApprovalStepInfo currentStep = map.get(currentStepId); // 如果 currentStepId 为 null ,说明审批层级已经结束 实际指向最后一个层级 if (currentStepId == null) { currentStep = lastStep; } // 递归生成顺序数组 make(currentStep, map, result); return result; } private void make(WorkApprovalStepInfo currentStep, Map map,List result) { result.add(0, currentStep); if (currentStep.getPreStepId() != null) { currentStep = map.get(currentStep.getPreStepId()); make(currentStep, map, result); } } /** * @Description: 根据 单向变双向 */ private List tidyRuleStepEntities(List ruleStepEntities) { List result = Collections.emptyList(); if (ruleStepEntities != null && ruleStepEntities.size() > 0) { Map map = new HashMap<>(); Map idMap = new HashMap<>(); // 头节点 for (WorkApprovalStepInfoBO workApprovalStepInfo : ruleStepEntities) { map.put(workApprovalStepInfo.getOriginalPreStepId(), workApprovalStepInfo); idMap.put(workApprovalStepInfo.getOriginalId(), workApprovalStepInfo.getId()); } WorkApprovalStepInfoBO headStep = map.get(null); if (headStep != null) { makeNext(headStep, map,idMap); } return new ArrayList<>(map.values()); } return result; } private void makeNext(WorkApprovalStepInfoBO headStep, Map map,Map idMap) { // 获取下一个节点 WorkApprovalStepInfoBO nextStep = map.get(headStep.getOriginalId()); headStep.setNextStepId(nextStep.getId()); headStep.setPreStepId(idMap.get(headStep.getOriginalPreStepId())); headStep = nextStep; if (map.get(headStep.getOriginalId()) != null) { makeNext(headStep, map,idMap); }else{ // 尾部 特殊处理 headStep.setPreStepId(idMap.get(headStep.getOriginalPreStepId())); } } private boolean judge(BigDecimal actualVal, BigDecimal comparedVal, RuleStandMatchingTypeEnum matchPattern) { boolean result = false; switch (matchPattern) { case EQUAL: if (actualVal.compareTo(comparedVal) == 0) { result = true; } break; case LESS_THAN: if (actualVal.compareTo(comparedVal) < 0) { result = true; } break; case GREATER_THAN: if (actualVal.compareTo(comparedVal) > 0) { result = true; } break; case LESS_THAN_AND_EQUAL:; if (actualVal.compareTo(comparedVal) < 0 || actualVal.compareTo(comparedVal) == 0) { result = true; } break; case GREATER_THAN_AND_EQUAL: if (actualVal.compareTo(comparedVal) > 0 || actualVal.compareTo(comparedVal) == 0) { result = true; } break; } return result; } /** * @Description: 根据 RuleContinueTimeUnitEnum 获取秒数 * @date 2022/8/23 16:14 */ private long generateSeconds(RuleContinueTimeUnitEnum unit, int continueTime) { long result = 0; if (continueTime > 0) { switch (unit) { case TYPE_DAY: result = continueTime * 60 * 60 * 24; break; case TYPE_HOUR: result = continueTime * 60 * 60; break; case TYPE_MINUTE: result = continueTime * 60; break; case TYPE_SECOND: result = continueTime; break; } } return result; } /** * 生成作业证编号 */ private String generateWorkCode(int workCount){ if(workCount < 0){ return null; } String code = null; String prefix = "GTXH-"; String serialCode = null; if(workCount >= 1000000){ serialCode = "" + (workCount+1); }else if(workCount >=0){ String countStr = String.valueOf(workCount+1); serialCode = "0000000".substring(0,(7 - countStr.length()))+countStr; } if(serialCode != null && !serialCode.isEmpty()){ code = prefix+serialCode; } return code; } private Date conversionTimeType(LocalDateTime localDateTime){ ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = localDateTime.atZone(zoneId); Date date = Date.from(zdt.toInstant()); return date; } private Object getWorkDetail(WorkTypeEnum workTypeEnum, Long workApplyId, Long workDetailId) { Object result = null; switch (workTypeEnum) { case WORK_FIRE: if (null != workDetailId) { WorkHotInfo workHotInfo = workHotInfoService.getById(workDetailId); if (workHotInfo != null) { WorkApplyHotRespDTO hotRespDTO = new WorkApplyHotRespDTO(); hotRespDTO.setHotId(workHotInfo.getId()); hotRespDTO.setWorkApplyId(workApplyId); hotRespDTO.setHotMethod(workHotInfo.getHotMethod()); hotRespDTO.setOtherSpecialWork(workHotInfo.getOtherSpecialWork()); result = hotRespDTO; } } break; case WORK_CLOSE_SPACE: if (null != workDetailId) { WorkConfinedSpaceInfo confinedSpaceInfo = workConfinedSpaceInfoService.getById(workDetailId); if (confinedSpaceInfo != null) { WorkApplyConfinedSpaceRespDTO confinedSpaceRespDTO = new WorkApplyConfinedSpaceRespDTO(); confinedSpaceRespDTO.setId(confinedSpaceInfo.getId()); confinedSpaceRespDTO.setWorkApplyId(workApplyId); confinedSpaceRespDTO.setCsDepId(confinedSpaceInfo.getCsDepId()); confinedSpaceRespDTO.setCsName(confinedSpaceInfo.getCsName()); confinedSpaceRespDTO.setCsOriginalName(confinedSpaceInfo.getCsOriginalName()); confinedSpaceRespDTO.setOtherSpecialWork(confinedSpaceInfo.getOtherSpecialWork()); result = confinedSpaceRespDTO; } } break; case WORK_BLIND_PLATE: if (null != workDetailId) { WorkBlindPlatePluggingInfo blindPlatePluggingInfo = workBlindPlatePluggingInfoService.getById(workDetailId); if (blindPlatePluggingInfo != null) { WorkApplyBlindPlatePluggingRespDTO blindPlatePluggingRespDTO = new WorkApplyBlindPlatePluggingRespDTO(); blindPlatePluggingRespDTO.setId(blindPlatePluggingInfo.getId()); blindPlatePluggingRespDTO.setWorkApplyId(workApplyId); blindPlatePluggingRespDTO.setBpCode(blindPlatePluggingInfo.getBpCode()); blindPlatePluggingRespDTO.setMainMedia(blindPlatePluggingInfo.getMainMedia()); blindPlatePluggingRespDTO.setTemperature(blindPlatePluggingInfo.getTemperature()); blindPlatePluggingRespDTO.setPressure(blindPlatePluggingInfo.getPressure()); blindPlatePluggingRespDTO.setBpMaterialQuality(blindPlatePluggingInfo.getBpMaterialQuality()); blindPlatePluggingRespDTO.setBpSpecification(blindPlatePluggingInfo.getBpSpecification()); blindPlatePluggingRespDTO.setBpLocation(blindPlatePluggingInfo.getBpLocation()); blindPlatePluggingRespDTO.setInstallBpTime(blindPlatePluggingInfo.getInstallBpTime()); blindPlatePluggingRespDTO.setUninstallBpTime(blindPlatePluggingInfo.getUninstallBpTime()); blindPlatePluggingRespDTO.setOtherSpecialWork(blindPlatePluggingInfo.getOtherSpecialWork()); if (StringUtils.isNotBlank(blindPlatePluggingInfo.getBpLocationMapPath())) { blindPlatePluggingRespDTO.setBpLocationMapPath(specialWorkMinoService.viewFiles(blindPlatePluggingInfo.getBpLocationMapPath())); } result = blindPlatePluggingRespDTO; } } break; case WORK_BROKE_ROAD: if (null != workDetailId) { WorkBrokenCircuitInfo brokenCircuitInfo = workBrokenCircuitInfoService.getById(workDetailId); if (brokenCircuitInfo != null) { WorkApplyBrokenCircuitRespDTO brokenCircuitRespDTO = new WorkApplyBrokenCircuitRespDTO(); brokenCircuitRespDTO.setId(brokenCircuitInfo.getId()); brokenCircuitRespDTO.setWorkApplyId(workApplyId); brokenCircuitRespDTO.setOperationDepId(brokenCircuitInfo.getOperationDepId()); brokenCircuitRespDTO.setBcReason(brokenCircuitInfo.getBcReason()); brokenCircuitRespDTO.setBcExplain(brokenCircuitInfo.getBcExplain()); brokenCircuitRespDTO.setInvolvedDepIds(brokenCircuitInfo.getInvolvedDepIds()); if (StringUtils.isNotBlank(brokenCircuitInfo.getBcPath())) { brokenCircuitRespDTO.setBcPath(specialWorkMinoService.viewFiles(brokenCircuitInfo.getBcPath())); } result = brokenCircuitRespDTO; } } break; case WORK_DIF_SOLI: if (null != workDetailId) { WorkGroundBreakingInfo groundBreakingInfo = workGroundBreakingInfoService.getById(workDetailId); if (groundBreakingInfo != null) { WorkApplyGroundBreakingRespDTO groundBreakingRespDTO = new WorkApplyGroundBreakingRespDTO(); groundBreakingRespDTO.setId(groundBreakingInfo.getId()); groundBreakingRespDTO.setWorkApplyId(workApplyId); groundBreakingRespDTO.setOperationDepId(groundBreakingInfo.getOperationDepId()); groundBreakingRespDTO.setGbScope(groundBreakingInfo.getGbScope()); groundBreakingRespDTO.setGbMethod(groundBreakingInfo.getGbMethod()); groundBreakingRespDTO.setOtherSpecialWork(groundBreakingInfo.getOtherSpecialWork()); if (StringUtils.isNotBlank(groundBreakingInfo.getGbPath())) { groundBreakingRespDTO.setGbPath(specialWorkMinoService.viewFiles(groundBreakingInfo.getGbPath())); } result = groundBreakingRespDTO; } } break; case WORK_HIGH_SPACE: if (null != workDetailId) { WorkAtHeightInfo atHeightInfo = workAtHeightInfoService.getById(workDetailId); if (atHeightInfo != null) { WorkApplyAtHeightRespDTO atHeightRespDTO = new WorkApplyAtHeightRespDTO(); atHeightRespDTO.setId(atHeightInfo.getId()); atHeightRespDTO.setWorkApplyId(workApplyId); atHeightRespDTO.setOperationDepId(atHeightInfo.getOperationDepId()); atHeightRespDTO.setOperationHeight(atHeightInfo.getOperationHeight()); atHeightRespDTO.setOtherSpecialWork(atHeightInfo.getOtherSpecialWork()); result = atHeightRespDTO; } } break; case WORK_HANG: if (null != workDetailId) { WorkHoistingInfo hoistingInfo = workHoistingInfoService.getById(workDetailId); if (hoistingInfo != null) { WorkApplyHoistingRespDTO hoistingRespDTO = new WorkApplyHoistingRespDTO(); hoistingRespDTO.setId(hoistingInfo.getId()); hoistingRespDTO.setWorkApplyId(workApplyId); hoistingRespDTO.setHoistingToolName(hoistingInfo.getHoistingToolName()); hoistingRespDTO.setWeightMass(hoistingInfo.getWeightMass()); result = hoistingRespDTO; } } break; case WORK_TEMP_ELECTRIC: if (null != workDetailId) { WorkTemporaryPowerInfo temporaryPowerInfo = workTemporaryPowerInfoService.getById(workDetailId); if (temporaryPowerInfo != null) { WorkApplyTemporaryPowerRespDTO temporaryPowerRespDTO = new WorkApplyTemporaryPowerRespDTO(); temporaryPowerRespDTO.setId(temporaryPowerInfo.getId()); temporaryPowerRespDTO.setWorkApplyId(workApplyId); temporaryPowerRespDTO.setPowerAccessPoint(temporaryPowerInfo.getPowerAccessPoint()); temporaryPowerRespDTO.setWorkingVoltage(temporaryPowerInfo.getWorkingVoltage()); temporaryPowerRespDTO.setEquipmentAndPower(temporaryPowerInfo.getEquipmentAndPower()); result = temporaryPowerRespDTO; } } break; } return result; } }