package com.doumee.service.business.impl; import com.alibaba.fastjson.JSONObject; 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.DateUtil; 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.join.CarUseBookJoinMapper; import com.doumee.dao.business.join.VisitsJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.vo.ApproveDataVO; import com.doumee.dao.system.dto.NoticesDTO; import com.doumee.dao.system.join.NoticesJoinMapper; import com.doumee.dao.system.model.Notices; 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.doumee.service.system.NoticesService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.xpath.operations.Bool; import org.springframework.beans.BeanUtils; 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 @Slf4j 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; @Autowired private VisitsJoinMapper visitsJoinMapper; @Autowired private CarUseBookJoinMapper carUseBookJoinMapper; @Autowired private NoticesJoinMapper noticesJoinMapper; @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 deleteWrapper = new UpdateWrapper<>(approve); approveMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } approveMapper.deleteBatchIds(ids); } @Override public void updateById(Approve approve) { approveMapper.updateById(approve); } @Override public void updateByIdInBatch(List 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 wrapper = new QueryWrapper<>(approve); return approveMapper.selectOne(wrapper); } @Override public List findList(Approve approve) { QueryWrapper wrapper = new QueryWrapper<>(approve); return approveMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper 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 wrapper = new QueryWrapper<>(approve); return approveMapper.selectCount(wrapper); } /** * 内部人员H5页面首页 * @param memberId * @param isDetail 是否查询详细 1是;0否 * @return */ @Override public InternalHomeVO getHomeDataH5(Integer memberId,Integer isDetail){ InternalHomeVO internalHomeVO = new InternalHomeVO(); internalHomeVO.setHomeImg(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HOME_IMAGE).getCode()); //任务数据 List noticesList = noticesJoinMapper. selectList(new QueryWrapper().lambda() .eq(Notices::getUserId,memberId).orderByDesc(Notices::getCreateDate)); internalHomeVO.setTaskNum(noticesList.size()); if(Constants.equalsInteger(Constants.ONE,isDetail)){ if(CollectionUtils.isNotEmpty(noticesList)){ //待我处理的数据 internalHomeVO.setNoticeWaitNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId) &&Constants.equalsInteger(i.getStatus(),Constants.ZERO) &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO) ).count() ); internalHomeVO.setNoticeDealNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId) &&Constants.equalsInteger(i.getStatus(),Constants.ONE) &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO) ).count() ); internalHomeVO.setNoticeCreateNum( noticesJoinMapper.selectCount(new QueryWrapper().lambda().eq(Notices::getParam3,memberId)) ); internalHomeVO.setNoticeCopyNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId) &&Constants.equalsInteger(i.getSendacopy(),Constants.ONE) ).count() ); } } return internalHomeVO; } @Override public InternalHomeVO getHomeDataPC(NoticesDTO noticesDTO){ InternalHomeVO internalHomeVO = new InternalHomeVO(); internalHomeVO.setHomeImg(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HOME_IMAGE).getCode()); //任务数据 List noticesList = noticesJoinMapper. selectList(new QueryWrapper().lambda() .ge(noticesDTO.getStartDate() != null, Notices::getCreateDate, Utils.Date.getStart(noticesDTO.getStartDate() )) .le(noticesDTO.getEndDate() != null, Notices::getCreateDate, Utils.Date.getEnd(noticesDTO.getEndDate() )) .eq(noticesDTO.getType() != null, Notices::getType, noticesDTO.getType()) .eq(Notices::getUserId,noticesDTO.getMemberId()) .orderByDesc(Notices::getCreateDate) ); internalHomeVO.setTaskNum(noticesList.size()); if(CollectionUtils.isNotEmpty(noticesList)){ //待我处理的数据 internalHomeVO.setNoticeWaitNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId()) &&Constants.equalsInteger(i.getStatus(),Constants.ZERO) &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO) ).count() ); internalHomeVO.setNoticeDealNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId()) &&Constants.equalsInteger(i.getStatus(),Constants.ONE) &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO) ).count() ); internalHomeVO.setNoticeCreateNum( noticesJoinMapper.selectCount(new QueryWrapper().lambda().eq(Notices::getParam3,noticesDTO.getMemberId())) ); internalHomeVO.setNoticeCopyNum( noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId()) &&Constants.equalsInteger(i.getSendacopy(),Constants.ONE) ).count() ); } 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().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 approveParamAllList = approveParamMapper.selectList(new QueryWrapper() .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 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 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 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 approveParamList,Member createMember,Integer businessId,List approveList){ //创建默认人信息 Approve createUserApprove = new Approve(); createUserApprove.setRemark("发起申请"); createUserApprove.setCreateDate(new Date()); createUserApprove.setIsdeleted(Constants.ZERO); createUserApprove.setTemplatId(approveTempl.getId()); createUserApprove.setChekorId(createMember.getId()); createUserApprove.setStatus(Constants.approveStatus.pass); createUserApprove.setTitle("发起申请"); createUserApprove.setStatusInfo(""); createUserApprove.setIsEndCheck(Constants.ZERO); createUserApprove.setObjId(businessId); createUserApprove.setLevel(-1); createUserApprove.setObjType(approveTempl.getType()); createUserApprove.setApproveType(Constants.TWO); createUserApprove.setDriverParam(Constants.ZERO); createUserApprove.setAddrParam(Constants.ZERO); createUserApprove.setType(Constants.ZERO); approveList.add(createUserApprove); //审批业务数据 for (int i = 0; i < approveParamList.size(); i++) { ApproveParam approveParam = approveParamList.get(i); List ids = this.getApproveUserIds(approveParam,createMember); Integer noticeType = Constants.approveTypeToNoticeType(approveTempl.getType()); String title = "【访客申请】申请人 - "; Map jsonMap = new HashMap<>(); for (int j = 0; j < ids.size(); j++) { Integer memberId = ids.get(j); //生成待办 notices 表数据 if(i==0){ if(jsonMap.isEmpty()){ title = this.createNoticesData(noticeType,businessId,title,jsonMap); } if(j==0){ //默认生成一条 申请人的数据 标记删除状态用于处理到 任务中心(我发起)使用 Notices notices = new Notices(); notices.setCreateDate(new Date()); notices.setIsdeleted(Constants.ONE); notices.setObjId(businessId); notices.setObjType(noticeType); notices.setType(noticeType); notices.setTitle(title); notices.setParam1(JSONObject.toJSONString(jsonMap)); notices.setStatus(Constants.ZERO); notices.setReaded(Constants.ZERO); notices.setSendacopy(Constants.ZERO); notices.setParam2("0"); notices.setParam3(createMember.getId().toString()); notices.setInfo("处理中"); noticesJoinMapper.insert(notices); } Notices notices = new Notices(); notices.setCreateDate(new Date()); notices.setIsdeleted(Constants.ZERO); notices.setObjId(businessId); notices.setObjType(noticeType); notices.setType(noticeType); notices.setTitle(title); notices.setParam1(JSONObject.toJSONString(jsonMap)); notices.setUserId(memberId); notices.setPalt(Constants.ZERO); notices.setStatus(Constants.ZERO); notices.setReaded(Constants.ZERO); notices.setSendacopy(Constants.ZERO); notices.setParam2("0"); notices.setParam3(""); notices.setInfo("待处理"); noticesJoinMapper.insert(notices); } Approve approve = new Approve(); approve.setRemark(approveParam.getRemark()); 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 String createNoticesData(Integer noticeType,Integer businessId,String title,Map jsonMap){ jsonMap.clear(); if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.visit) || Constants.equalsInteger(noticeType,Constants.noticesObjectType.visitReporting)){ //访客记录与访客报备 Visits visits = visitsJoinMapper.selectJoinOne(Visits.class, new MPJLambdaWrapper().selectAll(Visits.class) .selectAs(Member::getName,Visits::getReceptMemberName) .selectAs(Company::getName,Visits::getReceptMemberDepartment) .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId) .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(Visits::getId,businessId) .last(" limit 1 ") ); if(Objects.isNull(visits)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到业务数据信息"); } if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.visit)){ title = title + visits.getName(); }else{ title = "【访客报备】申请人 - " + visits.getName(); } jsonMap.put("name", "访问人:" + visits.getCompanyName() + " - " + visits.getReceptMemberName()); jsonMap.put("sTime", "入园时间:" + DateUtil.DateToStr(visits.getStarttime() , "yyyy-MM-dd HH:mm")); jsonMap.put("eTime", "离园时间:" + DateUtil.DateToStr(visits.getEndtime() , "yyyy-MM-dd HH:mm")); jsonMap.put("reason", StringUtils.isBlank(visits.getReason())?"来访事由: - ": "来访事由:" +visits.getReason()); jsonMap.put("carNos", StringUtils.isBlank(visits.getCarNos())?"随行车辆: - ": "随行车辆:" +visits.getCarNos()); }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.useCar)){ //用车申请 CarUseBook carUseBook = carUseBookJoinMapper.selectJoinOne(CarUseBook.class, new MPJLambdaWrapper().selectAll(CarUseBook.class) .selectAs(Member::getName,CarUseBook::getMemberName) .selectAs(Company::getName,CarUseBook::getCompanyName) .leftJoin(Member.class,Member::getId,CarUseBook::getMemberId) .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(CarUseBook::getId,businessId) .last(" limit 1 ") ); if(Objects.isNull(carUseBook)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到业务数据信息"); } title = "【用车申请】申请人 - " + carUseBook.getMemberName(); jsonMap.put("name", "申请人:" + carUseBook.getCompanyName() + " - " + carUseBook.getMemberName()); jsonMap.put("sTime", "开始时间:" + DateUtil.DateToStr(carUseBook.getStartTime() , "yyyy-MM-dd HH:mm")); jsonMap.put("eTime", "结束时间:" + DateUtil.DateToStr(carUseBook.getEndTime() , "yyyy-MM-dd HH:mm")); jsonMap.put("usrNum", StringUtils.isBlank(carUseBook.getMemberIds())?"乘车人数: 0人": "乘车人数: " +carUseBook.getMemberIds().split(",").length +"人"); jsonMap.put("mdd", StringUtils.isBlank(carUseBook.getAddr())?"目的地: - ": "目的地:" +carUseBook.getAddr()); }else { throw new BusinessException(ResponseStatus.NOT_ALLOWED); } return title; } public void organizeApproveCopyData(ApproveTempl approveTempl,List approveCopyList,Integer businessId,List approveList){ for (ApproveParam approveParam:approveCopyList) { if(StringUtils.isBlank(approveParam.getObjIds())){ return; } List memberList = memberMapper.selectList(new QueryWrapper().lambda() .eq(Member::getIsdeleted,Constants.ZERO) .eq(Member::getWorkStatus,Constants.ZERO) .in(Member::getId,approveParam.getObjIds().split(","))); List 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 getApproveUserIds(ApproveParam approveParam,Member createMember){ List 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 memberList = memberMapper.selectList(new QueryWrapper().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().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; } @Override public ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId){ ApproveDataVO approveDateVO = new ApproveDataVO(); approveDateVO.setApproveList(new ArrayList<>()); approveDateVO.setCanBeApproved(Constants.ZERO); List approveGroupList = approveJoinMapper.selectJoinList(Approve.class, new MPJLambdaWrapper(). selectAll(Approve.class) .selectAs(Member::getName,Approve::getMemberName) .selectAs(Member::getPhone,Approve::getMemberPhone) .selectAs(Member::getFaceImg,Approve::getFaceImg) .selectAs(Company::getCompanyNamePath,Approve::getCompanyName) .leftJoin(Member.class,Member::getId,Approve::getChekorId) .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(Approve::getIsdeleted,Constants.ZERO) .ne(Approve::getStatus,Constants.approveStatus.cancel) .eq(Approve::getObjId,businessId) .eq(Approve::getObjType,businessType) .orderByAsc(Approve::getLevel) ); //查找全部levelList List levelList = getLevelListFromResult(approveGroupList,approveDateVO,memberId); List copyList = getAllCopyList(approveGroupList); //遍历level查询每一级别业务数据 if(levelList!=null){ for(Approve level:levelList){ List tlist = getLevelInfoFromList(level,approveGroupList); approveDateVO.getApproveList().addAll(tlist); if(tlist.size() ==0 ||Constants.equalsInteger(Constants.approveStatus.unPass, tlist.get(0).getStatus()) ||Constants.equalsInteger(Constants.approveStatus.cancel, tlist.get(0).getStatus())){ break; } } } //处理抄送记录 if (CollectionUtils.isNotEmpty(copyList)) { Approve waitModel = new Approve(); waitModel.setApproveType(Constants.ONE); waitModel.setTitle("抄送人"); waitModel.setStatus(copyList.get(Constants.ZERO).getStatus()); waitModel.setType(Constants.ONE); waitModel.setApproveList(copyList); approveDateVO.getApproveList().add(waitModel); } return approveDateVO; } private List getAllCopyList(List approveGroupList) { List copyList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(approveGroupList)) { copyList.addAll(approveGroupList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList())); } return copyList; } private List getLevelInfoFromList(Approve level,List approveGroupList) { List list = new ArrayList<>(); if(Constants.equalsInteger(level.getApproveType(),Constants.TWO)){ level.setApproveType(Constants.ZERO); //如果是单人审批 list.add(level); return list; } //查找全部已处理的集合 List passList = new ArrayList<>();//已同意的记录集 Approve refuseModel = new Approve();//已拒绝的记录 List waitList = new ArrayList<>(); //查询全部未处理的集合 List otherPassList = new ArrayList<>();//他人已处理的记录集 int appType = Constants.formatIntegerNum(level.getApproveType());//当前审批类型 dealGroupListBiz(level,approveGroupList,passList,refuseModel,waitList,otherPassList); if(Objects.nonNull(refuseModel) && Objects.nonNull(refuseModel.getId())){ //存在拒绝的,只需要返回一条处理数据,后续不需要回显 refuseModel.setApproveType(Constants.ZERO); list.add(refuseModel); return list; } list.addAll(sortByCreateTime(passList)); if(Constants.equalsInteger(appType,Constants.ONE)){ //如果是会签 if(waitList.size()>1){ Approve waitModel = new Approve(); waitModel.setApproveType(Constants.ONE); waitModel.setType(Constants.ZERO); waitModel.setTitle(StringUtils.defaultString(level.getTitle(),"审批人")); waitModel.setStatus(Constants.equalsInteger(waitList.get(Constants.ZERO).getStatus(),Constants.ONE)?Constants.ONE:Constants.ZERO); waitModel.setStatusInfo("处理中"); if(Constants.equalsInteger(level.getStatus(),Constants.approveStatus.auditIng) ||Constants.equalsInteger(level.getStatus(),Constants.approveStatus.pass)){ waitModel.setMemberName(waitList.size() +"人会签"); } if(CollectionUtils.isNotEmpty(waitList)){ waitModel.setCreateDate(waitList.get(Constants.ZERO).getCreateDate()); } waitModel.setApproveList(waitList); list.add(waitModel); }else if(waitList.size()>0){ Approve approve = waitList.get(Constants.ZERO); approve.setApproveType(Constants.ZERO); approve.setType(Constants.ZERO); list.add(approve); } }else { if((waitList.size()> 0 || otherPassList.size()>0)){ Approve waitModel = new Approve(); waitModel.setApproveType(Constants.ONE); if(Constants.equalsInteger(level.getStatus(),Constants.approveStatus.pass)){ waitModel.setStatus(Constants.approveStatus.pass); waitModel.setType(Constants.ONE); waitModel.setTitle("审批人(抄送或签审批人)"); }else{ waitModel.setType(Constants.ZERO); waitModel.setStatusInfo(passList.size()<=0?StringUtils.defaultString(level.getTitle(),"审批人"):"抄送或签审批人"); waitModel.setStatus(passList.size()>0?Constants.ONE:Constants.ZERO); } List approveList = new ArrayList<>(); approveList.addAll(waitList); //如果是或签 if(passList.size()>0){ approveList.addAll(otherPassList); } if(CollectionUtils.isNotEmpty(approveList)){ waitModel.setCreateDate(approveList.get(Constants.ZERO).getCreateDate()); } waitModel.setMemberName("已抄送"+ approveList.size() +"人"); waitModel.setApproveList(approveList); list.add(waitModel); } //如果是或签 // if(otherPassList.size()>0){ // Approve waitModel = new Approve(); // waitModel.setApproveType(Constants.ONE); // waitModel.setStatusInfo(StringUtils.defaultString(level.getTitle(),"审批人")+"(抄送或签审批人)"); // waitModel.setStatus(Constants.ONE); // waitModel.setApproveList(otherPassList); // list.add(waitModel); // } } return list; } private void dealGroupListBiz(Approve level, List approveGroupList, List passList, Approve refuseModel, List waitList, List otherPassList) { //查询是否存在拒绝数据 List levelApprove = approveGroupList.stream().filter(i->Constants.equalsInteger(i.getLevel(),level.getLevel())).collect(Collectors.toList()); for (Approve approve:levelApprove) { if(!Constants.equalsInteger(level.getLevel(),approve.getLevel())){ continue; } if(Constants.equalsInteger(Constants.approveStatus.pass,approve.getStatus())){ approve.setApproveType(Constants.ZERO); passList.add(approve); }else if(Constants.equalsInteger(Constants.approveStatus.otherDeal,approve.getStatus())){ otherPassList.add(approve); }else if(Constants.equalsInteger(Constants.approveStatus.auditIng,approve.getStatus())||Constants.equalsInteger(Constants.approveStatus.wait,approve.getStatus())){ waitList.add(approve); }else if(Constants.equalsInteger(Constants.approveStatus.unPass,approve.getStatus())){ refuseModel = approve; } } } private List sortByCreateTime(List passList) { Collections.sort(passList, (a, b) -> a.getCheckDate().compareTo(b.getCheckDate())); return passList; } private List getLevelListFromResult(List approveGroupList,ApproveDataVO approveDataVO,Integer memberId) { approveDataVO.setCanBeApproved(Constants.ZERO); approveDataVO.setDriverParam(Constants.ZERO); List approveList = new ArrayList<>(); String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); for (Approve approve:approveGroupList) { if(StringUtils.isNotBlank(approve.getFaceImg())){ approve.setFaceImg(path + approve.getFaceImg()); } if(Constants.equalsInteger(approve.getType(),Constants.ONE)){ continue; } if(Constants.equalsInteger(approve.getChekorId(),memberId) &&Constants.equalsInteger(approve.getStatus(), Constants.ONE)){ approveDataVO.setCanBeApproved(Constants.ONE); approveDataVO.setDriverParam(approve.getDriverParam()); } if(notExsits(approveList,approve.getLevel())){ approveList.add(approve); } } if(CollectionUtils.isEmpty(approveList)){ // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批信息:级别数据异常"); } return approveList; } private boolean notExsits(List approveList, Integer level) { for (Approve approve:approveList) { if(Constants.equalsInteger(approve.getLevel(),level)){ return false; } } return true; } /** * 整理 审批数据 * @param businessId * @param businessType * @return */ // @Override public ApproveDataVO arrangeApprovedDataOld(Integer businessId, Integer businessType, Integer memberId){ ApproveDataVO approveDateVO = new ApproveDataVO(); approveDateVO.setCanBeApproved(Constants.ZERO); List approveGroupList = approveJoinMapper.selectJoinList(Approve.class, new MPJLambdaWrapper(). select(Approve::getLevel,Approve::getType,Approve::getTitle,Approve::getApproveType) .eq(Approve::getIsdeleted,Constants.ZERO) .eq(Approve::getObjId,businessId) .isNotNull(Approve::getLevel) .eq(Approve::getObjType,businessType) .groupBy(Approve::getLevel,Approve::getType,Approve::getTitle,Approve::getApproveType) ); if(CollectionUtils.isEmpty(approveGroupList)){ return approveDateVO; } //所有的审批记录 List approveAllList = approveJoinMapper.selectJoinList(Approve.class, new MPJLambdaWrapper() .selectAll(Approve.class) .selectAs(Member::getName,Approve::getMemberName) .selectAs(Member::getPhone,Approve::getMemberPhone) .selectAs(Member::getFaceImg,Approve::getFaceImg) .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) ); String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); for (Approve approve:approveAllList ) { if(StringUtils.isNotBlank(approve.getFaceImg())){ approve.setFaceImg(path + approve.getFaceImg()); } } if(CollectionUtils.isEmpty(approveAllList)){ return approveDateVO; } List approveList = approveAllList.stream().filter(i->Constants.equalsInteger(i.getType(),(Constants.ZERO))) .collect(Collectors.toList()); if(CollectionUtils.isEmpty(approveList)){ return approveDateVO; } approveDateVO.setCanBeApproved(this.canBeApproved(approveList,memberId)); approveDateVO.setDriverParam(this.canDriverParam(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 approveList,Integer memberId){ //获取所有待审批的数据 List 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 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; } public Integer canDriverParam(List approveList,Integer memberId){ //获取所有待审批的数据 List 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 nextApprovedList = waitApprovedList.stream().filter(i->i.getStatus().equals(Constants.ZERO)&&i.getLevel().equals(nextApprovedLevel)).collect(Collectors.toList()); //下个审批流程内 如果存在当前 用户的抓紧 则可以进行审批 List auditApproveList = nextApprovedList.stream().filter(i->i.getChekorId().equals(memberId)).collect(Collectors.toList()); if(auditApproveList.size() >0){ Approve auditApprove = auditApproveList.get(Constants.ZERO); return auditApprove.getDriverParam(); } } 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() .lambda() .eq(Approve::getObjId,approveDTO.getObjId()) .eq(Approve::getObjType,approveDTO.getObjType()) .eq(Approve::getChekorId,approveDTO.getLoginUserInfo().getMemberId()) .eq(Approve::getType,Constants.ZERO) .eq(Approve::getStatus,Constants.approveStatus.auditIng) .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(),"审批记录状态错误!"); } //根据审批记录查询 当前处理数据对应的 通知记录 Integer noticeType = Constants.approveTypeToNoticeType(approve.getObjType()); Notices notices = noticesJoinMapper.selectOne(new QueryWrapper().lambda() .eq(Notices::getObjId,approve.getObjId()) .eq(Notices::getObjType,noticeType) .eq(Notices::getUserId,approve.getChekorId()) .eq(Notices::getSendacopy,Constants.ZERO) .eq(Notices::getIsdeleted,Constants.ZERO) ); if(Objects.isNull(notices)){ log.info("未查询到通知记录"); return; } //处理审批信息 approve.setStatus(approveDTO.getStatus()); approve.setCheckInfo(approveDTO.getCheckInfo()); approve.setCheorId(approveDTO.getLoginUserInfo().getMemberId().toString()); approve.setCheckorName(approveDTO.getLoginUserInfo().getRealname()); approve.setCheckDate(new Date()); approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"已同意":approveDTO.getCheckInfo()); //本级所有 待审批记录 List approveList = approveJoinMapper.selectJoinList(Approve.class, new MPJLambdaWrapper() .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) .eq(Approve::getType,Constants.ZERO) .ne(Approve::getId,approve.getId()) ); //业务数据下配置的所有抄送记录 List approveCopyList = approveJoinMapper.selectJoinList(Approve.class, new MPJLambdaWrapper() .selectAll(Approve.class) .eq(Approve::getIsdeleted,Constants.ZERO) .eq(Approve::getObjId,approveDTO.getObjId()) .eq(Approve::getObjType,approveDTO.getObjType()) .eq(Approve::getType,Constants.ONE) ); //处理本次审批的业务数据 approveMapper.updateById(approve); //是否处理 业务数据 Boolean dealBusinessBean = false; //审批驳回情况 if(approveDTO.getStatus().equals(Constants.THREE)){ //修改其他所有待审批和审批中记录数据 approveJoinMapper.update(null,new UpdateWrapper() .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())); //处理所有Notice通知为已处理 if(approve.getApproveType().equals(Constants.ZERO)){ //修改自己的通知记录 noticesJoinMapper.update(null,new UpdateWrapper().lambda() .set(Notices::getEditDate,new Date()) .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId()) .set(Notices::getReaded,Constants.ONE) .set(Notices::getParam2,Constants.TWO) .set(Notices::getStatus,Constants.ONE) .eq(Notices::getId,notices.getId()) ); //修改 未处理的 通知数据 为抄送 if (!Constants.equalsInteger(approve.getApproveType(),Constants.TWO)){ noticesJoinMapper.update(null,new UpdateWrapper().lambda() .set(Notices::getEditDate,new Date()) .set(Notices::getSendacopy,Constants.ONE) .set(Notices::getStatus,Constants.ONE) .set(Notices::getParam2,Constants.TWO) .eq(Notices::getObjId,notices.getObjId()) .eq(Notices::getObjType,notices.getObjType()) .eq(Notices::getReaded,Constants.ZERO) .ne(Notices::getId,notices.getId()) ); } } return; }else{ //处理其他业务数据 if((Constants.equalsInteger(approve.getApproveType(),Constants.ZERO) || Constants.equalsInteger( approve.getApproveType(),Constants.TWO)) && Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){ //或签 / 单人审 且 终审 if(CollectionUtils.isNotEmpty(approveList)){ approveJoinMapper.update(null,new UpdateWrapper() .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.getApproveType().equals(Constants.TWO)) &&approve.getIsEndCheck()!=Constants.ONE){ //或签 / 单人审 非终审 则开启下一步业务流程 /**处理本级数据**/ if(CollectionUtils.isNotEmpty(approveList)){ approveJoinMapper.update(null,new UpdateWrapper() .lambda() .set(Approve::getStatus,Constants.approveStatus.otherDeal) .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList()))); } /**开启下一级别的数据为待审核**/ approveJoinMapper.update(null,new UpdateWrapper() .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)){ //会签 且终审 //无他人审批的情况 则修改数据状态 if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){ dealBusinessBean = true; } } this.passNextNotices(dealBusinessBean,notices,approve,approveList,approveCopyList,approveDTO); } //处理业务数据 if(dealBusinessBean){ this.dealBusinessData(approveDTO,approve); } } /** * 处理待办信息 * @param dealBusinessBean 是否需要进行更新业务数据状态 * @param approve 审批记录 * @param approveList 同级待审批数据 */ public void passNextNotices(Boolean dealBusinessBean,Notices notices,Approve approve,List approveList,List copyList,ApproveDTO approveDTO){ //1、修改自己的数据记录 noticesJoinMapper.update(null,new UpdateWrapper().lambda() .set(Notices::getEditDate,new Date()) .set(Notices::getReaded,Constants.ONE) .set(Notices::getStatus,Constants.ONE) .set(dealBusinessBean,Notices::getParam2,Constants.ONE) .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId()) .eq(Notices::getId,notices.getId()) ); if(Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)){ //或签 //2、更新他人的同级记录 为抄送 noticesJoinMapper.update(null,new UpdateWrapper().lambda() .set(Notices::getEditDate,new Date()) .set(Notices::getReaded,Constants.ONE) .set(Notices::getSendacopy,Constants.ONE) .set(Notices::getStatus,Constants.ONE) .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId()) .set(dealBusinessBean,Notices::getParam2,Constants.ONE) .eq(Notices::getObjId,notices.getObjId()) .eq(Notices::getObjType,notices.getObjType()) .ne(Notices::getId,notices.getId()) ); //3、如果不是终审生成下一级的数据记录 if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)&&!dealBusinessBean){ this.saveNextNotice(notices,approve); } }else if(Constants.equalsInteger(approve.getApproveType(),Constants.ONE)){ //会签 //2、如果是最后一位审批人 且不是终审开启下一级数据 if(Constants.equalsInteger(Constants.ZERO,approveList.size())){ if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){ this.saveNextNotice(notices,approve); } } }else{ //单人签 //2、 是否是终审 开启下一级数据 if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){ this.saveNextNotice(notices,approve); } } //终审业务 且 处理数据 进行抄送发送 if (Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE) && dealBusinessBean) { if(CollectionUtils.isNotEmpty(copyList)){ Notices copyNotices = new Notices(); for (Approve copyApprove:copyList) { if(Objects.isNull(copyNotices)){ BeanUtils.copyProperties(notices,copyNotices); notices.setId(null); notices.setCreateDate(new Date()); notices.setEditDate(new Date()); notices.setParam2("2"); notices.setParam3(""); notices.setUserId(copyApprove.getChekorId()); notices.setStatus(Constants.ZERO); notices.setSendacopy(Constants.ONE); notices.setReaded(Constants.ZERO); noticesJoinMapper.insert(notices); }else{ notices.setId(null); notices.setUserId(copyApprove.getChekorId()); noticesJoinMapper.insert(notices); } } } } } public void saveNextNotice(Notices notices,Approve approve){ List nextApproveList = approveJoinMapper.selectList(new QueryWrapper() .lambda() .eq(Approve::getObjId,approve.getObjId()) .eq(Approve::getObjType,approve.getObjType()) .eq(Approve::getType,Constants.ZERO) .eq(Approve::getLevel,(approve.getLevel() + Constants.ONE)) ); if(CollectionUtils.isNotEmpty(nextApproveList)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流数据异常"); } Notices newNotices = new Notices(); for (Approve nextDealApprove:nextApproveList) { if(Objects.isNull(newNotices)){ BeanUtils.copyProperties(notices,newNotices); notices.setId(null); notices.setCreateDate(new Date()); notices.setParam2("0"); notices.setParam3(""); notices.setEditDate(new Date()); notices.setUserId(nextDealApprove.getChekorId()); notices.setStatus(Constants.ZERO); notices.setSendacopy(Constants.ZERO); notices.setReaded(Constants.ZERO); noticesJoinMapper.insert(notices); }else{ notices.setId(null); notices.setUserId(nextDealApprove.getChekorId()); noticesJoinMapper.insert(notices); } } } public void dealBusinessData(ApproveDTO approveDTO,Approve approve){ if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit) ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit) ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){ // 访客 三类业务数据 Visits 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()); visitsMapper.updateById(visits); }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals( Constants.approveObjectType.unCityUseCar)){ // 市内外用车申请 CarUseBook 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&&Constants.equalsInteger(approve.getDriverParam(),Constants.ONE)){ CarDriver carDriver = carDriverMapper.selectById(approveDTO.getDriverId()); if(Objects.isNull(carDriver)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到司机信息"); } carUseBook.setDriverId(carDriver.getId()); } carUseBookMapper.updateById(carUseBook); }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){ //TODO 物流车预约 }else{ throw new BusinessException(ResponseStatus.BAD_REQUEST); } } }