| package com.doumee.service.business.impl; | 
|   | 
| import com.doumee.biz.system.SystemDictDataBiz; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.core.model.PageData; | 
| import com.doumee.core.model.PageWrap; | 
| import com.doumee.core.utils.Constants; | 
| import com.doumee.core.utils.Utils; | 
| import com.doumee.dao.business.*; | 
| import com.doumee.dao.business.dao.CompanyMapper; | 
| import com.doumee.dao.business.dto.ApproveDTO; | 
| import com.doumee.dao.business.join.ApproveJoinMapper; | 
| import com.doumee.dao.business.model.*; | 
| import com.doumee.dao.business.vo.ApproveDataVO; | 
| import com.doumee.dao.system.model.SystemUser; | 
| import com.doumee.dao.web.response.InternalHomeVO; | 
| import com.doumee.service.business.ApproveService; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
| import com.baomidou.mybatisplus.core.metadata.IPage; | 
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
| import com.github.xiaoymin.knife4j.core.util.CollectionUtils; | 
| import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.apache.xpath.operations.Bool; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.util.*; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * 审批信息记录表Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2023/12/28 14:09 | 
|  */ | 
| @Service | 
| public class ApproveServiceImpl implements ApproveService { | 
|   | 
|     @Autowired | 
|     private ApproveMapper approveMapper; | 
|   | 
|     @Autowired | 
|     private ApproveJoinMapper approveJoinMapper; | 
|   | 
|     @Autowired | 
|     private SystemDictDataBiz systemDictDataBiz; | 
|   | 
|     @Autowired | 
|     private ApproveTemplMapper approveTemplMapper; | 
|   | 
|     @Autowired | 
|     private ApproveParamMapper approveParamMapper; | 
|   | 
|     @Autowired | 
|     private MemberMapper memberMapper; | 
|   | 
|     @Autowired | 
|     private CompanyMapper companyMapper; | 
|   | 
|     @Autowired | 
|     private CarUseBookMapper carUseBookMapper; | 
|   | 
|     @Autowired | 
|     private CarDriverMapper carDriverMapper; | 
|   | 
|     @Autowired | 
|     private VisitsMapper visitsMapper; | 
|   | 
|     @Override | 
|     public Integer create(Approve approve) { | 
|         approveMapper.insert(approve); | 
|         return approve.getId(); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteById(Integer id) { | 
|         approveMapper.deleteById(id); | 
|     } | 
|   | 
|     @Override | 
|     public void delete(Approve approve) { | 
|         UpdateWrapper<Approve> deleteWrapper = new UpdateWrapper<>(approve); | 
|         approveMapper.delete(deleteWrapper); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteByIdInBatch(List<Integer> ids) { | 
|         if (CollectionUtils.isEmpty(ids)) { | 
|             return; | 
|         } | 
|         approveMapper.deleteBatchIds(ids); | 
|     } | 
|   | 
|     @Override | 
|     public void updateById(Approve approve) { | 
|         approveMapper.updateById(approve); | 
|     } | 
|   | 
|     @Override | 
|     public void updateByIdInBatch(List<Approve> approves) { | 
|         if (CollectionUtils.isEmpty(approves)) { | 
|             return; | 
|         } | 
|         for (Approve approve: approves) { | 
|             this.updateById(approve); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public Approve findById(Integer id) { | 
|         return approveMapper.selectById(id); | 
|     } | 
|   | 
|     @Override | 
|     public Approve findOne(Approve approve) { | 
|         QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve); | 
|         return approveMapper.selectOne(wrapper); | 
|     } | 
|   | 
|     @Override | 
|     public List<Approve> findList(Approve approve) { | 
|         QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve); | 
|         return approveMapper.selectList(wrapper); | 
|     } | 
|    | 
|     @Override | 
|     public PageData<Approve> findPage(PageWrap<Approve> pageWrap) { | 
|         IPage<Approve> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         QueryWrapper<Approve> queryWrapper = new QueryWrapper<>(); | 
|         Utils.MP.blankToNull(pageWrap.getModel()); | 
|         if (pageWrap.getModel().getId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getId, pageWrap.getModel().getId()); | 
|         } | 
|         if (pageWrap.getModel().getCreator() != null) { | 
|             queryWrapper.lambda().eq(Approve::getCreator, pageWrap.getModel().getCreator()); | 
|         } | 
|         if (pageWrap.getModel().getCreateDate() != null) { | 
|             queryWrapper.lambda().ge(Approve::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); | 
|             queryWrapper.lambda().le(Approve::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); | 
|         } | 
|         if (pageWrap.getModel().getEdirot() != null) { | 
|             queryWrapper.lambda().eq(Approve::getEdirot, pageWrap.getModel().getEdirot()); | 
|         } | 
|         if (pageWrap.getModel().getEditDate() != null) { | 
|             queryWrapper.lambda().ge(Approve::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); | 
|             queryWrapper.lambda().le(Approve::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); | 
|         } | 
|         if (pageWrap.getModel().getIsdeleted() != null) { | 
|             queryWrapper.lambda().eq(Approve::getIsdeleted, pageWrap.getModel().getIsdeleted()); | 
|         } | 
|         if (pageWrap.getModel().getRemark() != null) { | 
|             queryWrapper.lambda().eq(Approve::getRemark, pageWrap.getModel().getRemark()); | 
|         } | 
|         if (pageWrap.getModel().getChekorId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getChekorId, pageWrap.getModel().getChekorId()); | 
|         } | 
|         if (pageWrap.getModel().getTitle() != null) { | 
|             queryWrapper.lambda().eq(Approve::getTitle, pageWrap.getModel().getTitle()); | 
|         } | 
|         if (pageWrap.getModel().getTemplatId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getTemplatId, pageWrap.getModel().getTemplatId()); | 
|         } | 
|         if (pageWrap.getModel().getErpId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getErpId, pageWrap.getModel().getErpId()); | 
|         } | 
|         if (pageWrap.getModel().getStatus() != null) { | 
|             queryWrapper.lambda().eq(Approve::getStatus, pageWrap.getModel().getStatus()); | 
|         } | 
|         if (pageWrap.getModel().getStatusInfo() != null) { | 
|             queryWrapper.lambda().eq(Approve::getStatusInfo, pageWrap.getModel().getStatusInfo()); | 
|         } | 
|         if (pageWrap.getModel().getCheckInfo() != null) { | 
|             queryWrapper.lambda().eq(Approve::getCheckInfo, pageWrap.getModel().getCheckInfo()); | 
|         } | 
|         if (pageWrap.getModel().getCheorId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getCheorId, pageWrap.getModel().getCheorId()); | 
|         } | 
|         if (pageWrap.getModel().getCheckorName() != null) { | 
|             queryWrapper.lambda().eq(Approve::getCheckorName, pageWrap.getModel().getCheckorName()); | 
|         } | 
|         if (pageWrap.getModel().getIsEndCheck() != null) { | 
|             queryWrapper.lambda().eq(Approve::getIsEndCheck, pageWrap.getModel().getIsEndCheck()); | 
|         } | 
|         if (pageWrap.getModel().getObjId() != null) { | 
|             queryWrapper.lambda().eq(Approve::getObjId, pageWrap.getModel().getObjId()); | 
|         } | 
|         if (pageWrap.getModel().getLevel() != null) { | 
|             queryWrapper.lambda().eq(Approve::getLevel, pageWrap.getModel().getLevel()); | 
|         } | 
|         if (pageWrap.getModel().getApproveType() != null) { | 
|             queryWrapper.lambda().eq(Approve::getApproveType, pageWrap.getModel().getApproveType()); | 
|         } | 
|         for(PageWrap.SortData sortData: pageWrap.getSorts()) { | 
|             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { | 
|                 queryWrapper.orderByDesc(sortData.getProperty()); | 
|             } else { | 
|                 queryWrapper.orderByAsc(sortData.getProperty()); | 
|             } | 
|         } | 
|         return PageData.from(approveMapper.selectPage(page, queryWrapper)); | 
|     } | 
|   | 
|     @Override | 
|     public long count(Approve approve) { | 
|         QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve); | 
|         return approveMapper.selectCount(wrapper); | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 内部人员H5页面首页 | 
|      * @param memberId | 
|      * @return | 
|      */ | 
|     @Override | 
|     public InternalHomeVO getHomeData(Integer memberId){ | 
|         InternalHomeVO internalHomeVO = new InternalHomeVO(); | 
|         internalHomeVO.setHomeImg(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HOME_IMAGE).getCode()); | 
|         internalHomeVO.setTaskNum(approveMapper.selectCount(new QueryWrapper<Approve>().lambda().eq(Approve::getChekorId,memberId).eq(Approve::getStatus,Constants.ZERO))); | 
|         return internalHomeVO; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 创建审批流程 | 
|      * @param tempType 模板类型  0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 | 
|      * @param businessId 业务主键 根据 tempType | 
|      * @param createMemberId 提交流程人员 | 
|      */ | 
|     @Override | 
|     @Transactional(rollbackFor = {Exception.class,BusinessException.class}) | 
|     public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId){ | 
|         //查询处理模板 | 
|         ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda() | 
|                 .eq(ApproveTempl::getType,tempType) | 
|                 .eq(ApproveTempl::getIsdeleted,Constants.ZERO) | 
|                 .last(" limit 1 ") | 
|         ); | 
|         if(Objects.isNull(approveTempl)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到审批流配置模板"); | 
|         } | 
|         //查询配置流程 | 
|         List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>() | 
|                 .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO) | 
|                 .eq(ApproveParam::getTemplId,approveTempl.getId()) | 
|                 .orderByAsc(ApproveParam::getType) | 
|                 .orderByAsc(ApproveParam::getLevel) | 
|         ); | 
|         if(Objects.isNull(approveParamAllList)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程"); | 
|         } | 
|         //审批配置 | 
|         List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList()); | 
|         if(Objects.isNull(approveParamList)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程"); | 
|         } | 
|         List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList()); | 
|   | 
|         Member createMember = memberMapper.selectById(createMemberId); | 
|         if(Objects.isNull(createMember)|| Objects.isNull(createMember.getCompanyId())){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"申请人组织信息异常"); | 
|         } | 
|         List<Approve> approveList = new ArrayList<>(); | 
|   | 
|         this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList); | 
|   | 
|         if(CollectionUtils.isEmpty(approveList)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误"); | 
|         } | 
|   | 
|         //处理抄送数据 | 
|         if(CollectionUtils.isNotEmpty(approveCopyList)){ | 
|             this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList); | 
|         } | 
|         approveMapper.insertBatchSomeColumn(approveList); | 
|   | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 组织审批流数据 | 
|      * @param approveTempl | 
|      * @param approveParamList | 
|      * @param createMember | 
|      * @param businessId | 
|      * @param approveList | 
|      */ | 
|     public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){ | 
|         //审批业务数据 | 
|         for (int i = 0; i < approveParamList.size(); i++) { | 
|             ApproveParam approveParam = approveParamList.get(i); | 
|             List<Integer> ids = this.getApproveUserIds(approveParam,createMember); | 
|             for (Integer memberId:ids) { | 
|                 Approve approve = new Approve(); | 
|                 approve.setCreateDate(new Date()); | 
|                 approve.setIsdeleted(Constants.ZERO); | 
|                 approve.setTemplatId(approveTempl.getId()); | 
|                 approve.setChekorId(memberId); | 
|                 approve.setStatus(i==0?Constants.ONE:Constants.ZERO); | 
|                 approve.setStatusInfo(i==0?"审批中":"待审批"); | 
|                 approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO); | 
|                 approve.setObjId(businessId); | 
|                 approve.setLevel(i+1); | 
|                 approve.setObjType(approveTempl.getType()); | 
|                 approve.setApproveType(approveParam.getApproveType()); | 
|                 approve.setDriverParam(approveParam.getDriverParam()); | 
|                 approve.setAddrParam(approveParam.getAddrParam()); | 
|                 approve.setType(Constants.ZERO); | 
|                 approveList.add(approve); | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     public void organizeApproveCopyData(ApproveTempl approveTempl,List<ApproveParam> approveCopyList,Integer businessId,List<Approve> approveList){ | 
|         for (ApproveParam approveParam:approveCopyList) { | 
|             if(StringUtils.isBlank(approveParam.getObjIds())){ | 
|                 return; | 
|             } | 
|             List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda() | 
|                     .eq(Member::getIsdeleted,Constants.ZERO) | 
|                     .eq(Member::getWorkStatus,Constants.ZERO) | 
|                     .in(Member::getId,approveParam.getObjIds().split(","))); | 
|             List<Integer> userIds = new ArrayList<>(); | 
|             if(CollectionUtils.isNotEmpty(memberList)){ | 
|                 userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList())); | 
|             } | 
|             //公务用车 默认加入 司机抄送 | 
|             if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){ | 
|                 CarUseBook carUseBook = carUseBookMapper.selectById(businessId); | 
|                 if(Objects.isNull(carUseBook)){ | 
|                     throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"为查询到用车申请信息"); | 
|                 } | 
|                 CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId()); | 
|                 if(Objects.isNull(carDriver)){ | 
|                     throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"为查询到司机信息"); | 
|                 } | 
|                 userIds.add(carDriver.getMemberId()); | 
|             } | 
|   | 
|             if(CollectionUtils.isNotEmpty(userIds)){ | 
|                 for (Integer memberId:userIds) { | 
|                     Approve approve = new Approve(); | 
|                     approve.setCreateDate(new Date()); | 
|                     approve.setIsdeleted(Constants.ZERO); | 
|                     approve.setTemplatId(approveTempl.getId()); | 
|                     approve.setChekorId(memberId); | 
|                     approve.setObjId(businessId); | 
|                     approve.setType(Constants.ONE); | 
|                     approveList.add(approve); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     public List<Integer> getApproveUserIds(ApproveParam approveParam,Member createMember){ | 
|         List<Integer> userIds = new ArrayList<>(); | 
|         if(approveParam.getMemberType().equals(Constants.ZERO)){ | 
|             //申请人 | 
|             userIds.add(createMember.getId()); | 
|         }else if(approveParam.getMemberType().equals(Constants.ONE)){ | 
|             //指定人员 | 
|             if(StringUtils.isBlank(approveParam.getObjIds())){ | 
|                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"审批流配置错误[未配置指定审批人员]"); | 
|             } | 
|             List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda() | 
|                     .eq(Member::getIsdeleted,Constants.ZERO) | 
|                     .in(Member::getId,approveParam.getObjIds().split(","))); | 
|             if(memberList.size()!=approveParam.getObjIds().split(",").length){ | 
|                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批人员信息异常]"); | 
|             } | 
|             userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList())); | 
|         }else if(approveParam.getMemberType().equals(Constants.TWO)){ | 
|             //部门主管审批 | 
|             //审批部门 | 
|             Company memberCompany = companyMapper.selectById(createMember.getCompanyId()); | 
|             if(Objects.isNull(memberCompany)){ | 
|                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]"); | 
|             } | 
|             Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel()); | 
|             if(Objects.isNull(auditCompany)){ | 
|                 //审批部门为空 自动流转下一级审批配置 | 
|                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]"); | 
|             }else{ | 
|                 //查询部门负责人 | 
|                 Member headMember = memberMapper.selectById(auditCompany.getHeadId()); | 
|                 if(Objects.isNull(headMember)){ | 
|                     //未查询到部门负责人  根据配置处理   由上级主管代替审核/直接结束流程 | 
|                     if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){ | 
|                         auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId())); | 
|                         //无父级 直接流传下一级审批 | 
|                         if(Objects.isNull(auditCompany)){ | 
|                             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]"); | 
|                         } | 
|                         headMember = memberMapper.selectById(auditCompany.getHeadId()); | 
|                         if(Objects.isNull(headMember)){ | 
|                             //查询部门负责人 为空 自动流转下一级审批配置 | 
|                             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未设置负责人]"); | 
|                         }else{ | 
|                             //添加审批人 | 
|                             userIds.add(headMember.getId()); | 
|                         } | 
|                     }else{ | 
|                         //添加审批人 | 
|                         userIds.add(headMember.getId()); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         return userIds; | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 根据配置查询上级数据 | 
|      * @param companyId 父级部门主键 | 
|      * @param objLevel  查询级别 | 
|      */ | 
|     public Company getAuditCompanyHead(Integer companyId, Integer objLevel){ | 
|         Integer queryLevel = Constants.ZERO; | 
|         Company auditCompany =  companyMapper.selectById(companyId); | 
|         while(queryLevel.equals(objLevel)){ | 
|             auditCompany = companyMapper.selectById(auditCompany.getParentId()); | 
|             if(Objects.isNull(auditCompany)){ | 
|                 return null; | 
|             } | 
|             queryLevel = queryLevel + 1; | 
|         } | 
|         return auditCompany; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 整理 审批数据 | 
|      * @param businessId | 
|      * @param businessType | 
|      * @return | 
|      */ | 
|     @Override | 
|     public ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId){ | 
|         ApproveDataVO approveDateVO = new ApproveDataVO(); | 
|         approveDateVO.setCanBeApproved(Constants.ZERO); | 
|         List<Approve> approveGroupList = approveJoinMapper.selectJoinList(Approve.class, | 
|                 new MPJLambdaWrapper<Approve>(). | 
|                         select(Approve::getLevel,Approve::getType) | 
|                         .eq(Approve::getIsdeleted,Constants.ZERO) | 
|                         .eq(Approve::getObjId,businessId) | 
|                         .isNotNull(Approve::getLevel) | 
|                         .eq(Approve::getObjType,businessType) | 
|                         .groupBy(Approve::getLevel,Approve::getType) | 
|         ); | 
|         if(CollectionUtils.isEmpty(approveGroupList)){ | 
|             return approveDateVO; | 
|         } | 
|         //所有的审批记录 | 
|         List<Approve> approveAllList = approveJoinMapper.selectJoinList(Approve.class, | 
|                 new MPJLambdaWrapper<Approve>() | 
|                         .selectAll(Approve.class) | 
|                         .selectAs(Member::getName,Approve::getMemberName) | 
|                         .selectAs(Member::getPhone,Approve::getMemberPhone) | 
|                         .selectAs(Company::getName,Approve::getCompanyName) | 
|                         .leftJoin(Member.class,Member::getId,Approve::getChekorId) | 
|                         .leftJoin(Company.class,Company::getId,Member::getCompanyId) | 
|                         .leftJoin(SystemUser.class,SystemUser::getMemberId,Member::getId) | 
|                         .eq(Approve::getIsdeleted,Constants.ZERO) | 
|                         .eq(Approve::getObjId,businessId) | 
|                         .eq(Approve::getObjType,businessType) | 
|                         .orderByAsc(Approve::getType) | 
|                         .orderByAsc(Approve::getLevel) | 
|                         .orderByAsc(Approve::getId) | 
|         ); | 
|         if(CollectionUtils.isEmpty(approveAllList)){ | 
|             return approveDateVO; | 
|         } | 
|         List<Approve> approveList = approveAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList()); | 
|         if(CollectionUtils.isEmpty(approveList)){ | 
|             return approveDateVO; | 
|         } | 
|         approveDateVO.setCanBeApproved(this.canBeApproved(approveList,memberId)); | 
|         //根据审批级别 处理数据 | 
|         for (Approve approve:approveGroupList) { | 
|             approve.setApproveList( | 
|                     approveList.stream().filter(i->Objects.nonNull(i.getLevel())&&i.getLevel().equals(approve.getLevel())).collect(Collectors.toList()) | 
|             ); | 
|         } | 
|         approveDateVO.setApproveList(approveGroupList); | 
|         approveDateVO.setCopyList(approveAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList())); | 
|         return approveDateVO; | 
|     } | 
|   | 
|   | 
|     public Integer canBeApproved(List<Approve> approveList,Integer memberId){ | 
|         //获取所有待审批的数据 | 
|         List<Approve> waitApprovedList = approveList.stream().filter(i->i.getType().equals(Constants.ZERO)&&i.getStatus().equals(Constants.ZERO)).collect(Collectors.toList()); | 
|         if(CollectionUtils.isNotEmpty(waitApprovedList)){ | 
|             //下个审批流程等级 | 
|             Integer nextApprovedLevel = waitApprovedList.get(Constants.ZERO).getLevel(); | 
|             //下个审批流程的 所有数据 | 
|             List<Approve> nextApprovedList = waitApprovedList.stream().filter(i->i.getStatus().equals(Constants.ZERO)&&i.getLevel().equals(nextApprovedLevel)).collect(Collectors.toList()); | 
|             //下个审批流程内 如果存在当前 用户的抓紧 则可以进行审批 | 
|             if(nextApprovedList.stream().filter(i->i.getChekorId().equals(memberId)).collect(Collectors.toList()).size()>0){ | 
|                 return Constants.ONE; | 
|             } | 
|         } | 
|         return Constants.ZERO; | 
|     } | 
|   | 
|   | 
|   | 
|   | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = {Exception.class,BusinessException.class}) | 
|     public void approved(ApproveDTO approveDTO){ | 
|         if(Objects.isNull(approveDTO) | 
|         || Objects.isNull(approveDTO.getObjId()) | 
|                 || Objects.isNull(approveDTO.getObjType()) | 
|                 || Objects.isNull(approveDTO.getStatus()) | 
|                 || Objects.isNull(approveDTO.getLoginUserInfo())){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         if(approveDTO.getStatus().equals(Constants.THREE)&&StringUtils.isBlank(approveDTO.getCheckInfo())){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请输入拒绝说明"); | 
|         } | 
|         Approve approve = approveMapper.selectOne(new QueryWrapper<Approve>() | 
|                 .lambda() | 
|                 .eq(Approve::getObjId,approveDTO.getObjId()) | 
|                 .eq(Approve::getObjType,approveDTO.getObjType()) | 
|                 .last(" limit 1") | 
|         ); | 
|         if(Objects.isNull(approve)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到审批数据"); | 
|         } | 
|         if(!approve.getStatus().equals(Constants.ONE)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批记录状态错误!"); | 
|         } | 
|   | 
|         //处理审批信息 | 
|         approve.setStatus(approveDTO.getStatus()); | 
|         approve.setCheckInfo(approveDTO.getCheckInfo()); | 
|         approve.setCheorId(approveDTO.getLoginUserInfo().getMemberId().toString()); | 
|         approve.setCheckorName(approve.getLoginUserInfo().getRealname()); | 
|         approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"审批通过":approveDTO.getCheckInfo()); | 
|         Visits visits = new Visits(); | 
|         CarUseBook carUseBook = new CarUseBook(); | 
|         this.dealBusinessData(approveDTO,approve,visits,carUseBook); | 
|         //本级所有 待审批记录 | 
|         List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class, | 
|                 new MPJLambdaWrapper<Approve>() | 
|                         .selectAll(Approve.class) | 
|                         .eq(Approve::getIsdeleted,Constants.ZERO) | 
|                         .eq(Approve::getObjId,approveDTO.getObjId()) | 
|                         .eq(Approve::getObjType,approveDTO.getObjType()) | 
|                         .eq(Approve::getLevel,approve.getLevel()) | 
|                         .eq(Approve::getStatus,Constants.ONE) | 
|                         .ne(Approve::getId,approve.getId()) | 
|         ); | 
|         //处理本次审批的业务数据 | 
|         approveMapper.updateById(approve); | 
|         //是否处理 业务数据 | 
|         Boolean dealBusinessBean = false; | 
|         //审批驳回情况 | 
|         if(approveDTO.getStatus().equals(Constants.THREE)){ | 
|             //修改其他所有待审批和审批中记录数据 | 
|             approveJoinMapper.update(null,new UpdateWrapper<Approve>() | 
|                     .lambda() | 
|                     .set(Approve::getStatus,Constants.approveStatus.otherUnPass) | 
|                     .in(Approve::getStatus,Constants.approveStatus.auditIng,Constants.approveStatus.wait) | 
|                     .eq(Approve::getObjId,approve.getObjId()) | 
|                     .eq(Approve::getObjType,approve.getObjType()) | 
|                     .ne(Approve::getId,approve.getId())); | 
|         }else{ | 
|             //处理其他业务数据 | 
|             if(approve.getApproveType().equals(Constants.ZERO)&&approve.getIsEndCheck()==Constants.ONE){ | 
|                 //或签  且 终审 | 
|                 approveJoinMapper.update(null,new UpdateWrapper<Approve>() | 
|                         .lambda() | 
|                         .set(Approve::getStatus,Constants.approveStatus.otherDeal) | 
|                         .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList()))); | 
|                 dealBusinessBean = true; | 
|   | 
|             }else if(approve.getApproveType().equals(Constants.ZERO)&&approve.getIsEndCheck()!=Constants.ONE){ | 
|                 //或签 非终审 则开启下一步业务流程 | 
|                 /**处理本级数据**/ | 
|                 approveJoinMapper.update(null,new UpdateWrapper<Approve>() | 
|                         .lambda() | 
|                         .set(Approve::getStatus,Constants.approveStatus.otherDeal) | 
|                         .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList()))); | 
|                 /**开启下一级别的数据为待审核**/ | 
|                 approveJoinMapper.update(null,new UpdateWrapper<Approve>() | 
|                         .lambda() | 
|                         .set(Approve::getStatus,Constants.approveStatus.auditIng) | 
|                         .eq(Approve::getStatus,Constants.approveStatus.wait) | 
|                         .eq(Approve::getObjId,approve.getObjId()) | 
|                         .eq(Approve::getObjType,approve.getObjType()) | 
|                         .eq(Approve::getLevel,(approve.getLevel()+1)) | 
|                 ); | 
|   | 
|             }else if(approve.getApproveType().equals(Constants.ONE)&&approve.getIsEndCheck()==Constants.ONE){ | 
|             //会签 且终审 | 
|                 if(approveList.size()==Constants.ZERO){ | 
|                     dealBusinessBean = true; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit) | 
|                 ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit) | 
|                 ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){ | 
|             // 访客 三类业务数据 | 
|             visitsMapper.updateById(visits); | 
|             if(dealBusinessBean){ | 
|                 //TODO 发送审批通过消息 | 
|   | 
|             }else if(approveDTO.getStatus().equals(Constants.THREE)){ | 
|                 //TODO 审批未通过通知 | 
|   | 
|             } | 
|   | 
|   | 
|         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals( | 
|                 Constants.approveObjectType.unCityUseCar)){ | 
|             // 市内外用车申请 | 
|             carUseBookMapper.updateById(carUseBook); | 
|             if(dealBusinessBean){ | 
|                 //TODO 发送审批通过消息 | 
|   | 
|             }else if(approveDTO.getStatus().equals(Constants.THREE)){ | 
|                 //TODO 审批未通过通知 | 
|   | 
|             } | 
|   | 
|   | 
|         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){ | 
|             //TODO  物流车预约 | 
|   | 
|         } | 
|     } | 
|   | 
|     public void dealBusinessData(ApproveDTO approveDTO,Approve approve,Visits visits,CarUseBook carUseBook){ | 
|         if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit) | 
|                 ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit) | 
|                 ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){ | 
|             // 访客 三类业务数据 | 
|             visits = visitsMapper.selectById(approveDTO.getObjId()); | 
|             if(Objects.isNull(visits)){ | 
|                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到申请记录"); | 
|             } | 
|             visits.setStatus(approveDTO.getStatus()); | 
|             visits.setEditDate(new Date()); | 
|             visits.setEditor(approveDTO.getLoginUserInfo().getMemberId()); | 
|   | 
|   | 
|         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals( | 
|                 Constants.approveObjectType.unCityUseCar)){ | 
|             // 市内外用车申请 | 
|             carUseBook = carUseBookMapper.selectById(approveDTO.getObjId()); | 
|             if(Objects.isNull(carUseBook)){ | 
|                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到用车记录"); | 
|             } | 
|             carUseBook.setStatus(approveDTO.getStatus()); | 
|             carUseBook.setEditDate(new Date()); | 
|             carUseBook.setEditor(approveDTO.getLoginUserInfo().getMemberId()); | 
|             //如果配置修改司机 且 入参了更换后司机信息 | 
|             if(approveDTO.getStatus()==Constants.TWO&&approve.getDriverParam().equals(Constants.ONE)){ | 
|                 CarDriver carDriver = carDriverMapper.selectById(approveDTO.getDriverId()); | 
|                 if(Objects.isNull(carDriver)){ | 
|                     throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到司机信息"); | 
|                 } | 
|                 carUseBook.setDriverId(carDriver.getId()); | 
|             } | 
|   | 
|         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){ | 
|             //TODO  物流车预约 | 
|   | 
|         }else{ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|     } | 
|   | 
|   | 
| } |