k94314517
2024-07-05 e992f6c13602feadd60f9df16c65ffccc1cdcb6a
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -375,10 +375,9 @@
        //处理抄送数据
        if(CollectionUtils.isNotEmpty(approveCopyList)){
            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
            this.organizeApproveCopyData(approveTempl,approveCopyList,businessId,approveList);
        }
        approveJoinMapper.insert(approveList);
//        approveJoinMapper.insert(approveList);
    }
@@ -414,15 +413,21 @@
        createUserApprove.setType(Constants.ZERO);
        approveList.add(createUserApprove);
        //查询所有待处理人
        //审批业务数据
        for (int i = 0; i < approveParamList.size(); i++) {
            ApproveParam approveParam = approveParamList.get(i);
            List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().in(Member::getId,ids));
            List<String> memberNameList =memberList.stream().map(m->m.getName()).collect(Collectors.toList());
            String memberNames = String.join(",",memberNameList);
            Integer noticeType = Constants.approveTypeToNoticeType(approveTempl.getType());
            String title = "【访客申请】申请人 - ";
            Map<String,Object> jsonMap = new HashMap<>();
            for (int j = 0; j < ids.size(); j++) {
                Integer memberId = ids.get(j);
            for (int j = 0; j < memberList.size(); j++) {
                Member member = memberList.get(j);
                Integer memberId = member.getId();
                //生成待办 notices 表数据
                if(i==0){
                    if(jsonMap.isEmpty()){
@@ -446,6 +451,9 @@
                        notices.setInfo("处理中");
                        noticesJoinMapper.insert(notices);
                    }
                    if(CollectionUtils.isEmpty(memberList)){
                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到审批人信息");
                    }
                    Notices notices = new Notices();
                    notices.setCreateDate(new Date());
                    notices.setIsdeleted(Constants.ZERO);
@@ -461,7 +469,13 @@
                    notices.setSendacopy(Constants.ZERO);
                    notices.setParam2("0");
                    notices.setParam3("");
                    notices.setInfo("待处理");
                    notices.setParam5(memberNames);
                    notices.setRemark(member.getName());
                    if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
                        notices.setInfo("待"+memberNameList.get(0)+"处理中");
                    }else{
                        notices.setInfo("待"+memberNameList.get(0)+"等"+memberList.size()+"人处理中");
                    }
                    noticesJoinMapper.insert(notices);
                }
                Approve approve = new Approve();
@@ -575,6 +589,7 @@
                    approve.setIsdeleted(Constants.ZERO);
                    approve.setTemplatId(approveTempl.getId());
                    approve.setChekorId(memberId);
                    approve.setObjType(approveTempl.getType());
                    approve.setObjId(businessId);
                    approve.setType(Constants.ONE);
                    approveList.add(approve);
@@ -608,7 +623,7 @@
            if(Objects.isNull(memberCompany)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]");
            }
            Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel());
            Company auditCompany = this.getAuditCompanyHead(memberCompany.getId(),approveParam.getObjLevel());
            if(Objects.isNull(auditCompany)){
                //审批部门为空 自动流转下一级审批配置
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]");
@@ -617,7 +632,7 @@
                Member headMember = memberMapper.selectById(auditCompany.getHeadId());
                if(Objects.isNull(headMember)){
                    //未查询到部门负责人  根据配置处理   由上级主管代替审核/直接结束流程
                    if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){
                    if(Constants.equalsInteger(approveParam.getNoleaderOpt(),Constants.ONE)&&Objects.nonNull(auditCompany.getParentId())){
                        auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId()));
                        //无父级 直接流传下一级审批
                        if(Objects.isNull(auditCompany)){
@@ -632,9 +647,11 @@
                            userIds.add(headMember.getId());
                        }
                    }else{
                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门主管未查询到]");
                    }
                }else{
                        //添加审批人
                        userIds.add(headMember.getId());
                    }
                }
            }
        }
@@ -649,9 +666,9 @@
     * @param objLevel  查询级别
     */
    public Company getAuditCompanyHead(Integer companyId, Integer objLevel){
        Integer queryLevel = Constants.ZERO;
        Company auditCompany =  companyMapper.selectById(companyId);
        while(queryLevel.equals(objLevel)){
        Integer queryLevel = Constants.ONE;
        while(queryLevel<objLevel){
            auditCompany = companyMapper.selectById(auditCompany.getParentId());
            if(Objects.isNull(auditCompany)){
                return null;
@@ -680,6 +697,8 @@
                        .eq(Approve::getObjId,businessId)
                        .eq(Approve::getObjType,businessType)
                        .orderByAsc(Approve::getLevel)
                        .orderByAsc(Approve::getStatus)
        );
        //查找全部levelList
@@ -697,6 +716,7 @@
        if (CollectionUtils.isNotEmpty(copyList)) {
            Approve waitModel = new Approve();
            waitModel.setApproveType(Constants.ONE);
            waitModel.setCheckDate(copyList.get(Constants.ZERO).getCheckDate());
            waitModel.setTitle("抄送人");
            waitModel.setStatus(copyList.get(Constants.ZERO).getStatus());
            waitModel.setType(Constants.ONE);
@@ -1006,6 +1026,7 @@
                .eq(Notices::getUserId,approve.getChekorId())
                .eq(Notices::getSendacopy,Constants.ZERO)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getStatus,Constants.ZERO)
                .last(" limit 1 ")
        );
        if(Objects.isNull(notices)){
@@ -1057,11 +1078,11 @@
                    .eq(Approve::getObjType,approve.getObjType())
                    .ne(Approve::getId,approve.getId()));
            //处理所有Notice通知为已处理
            if(approve.getApproveType().equals(Constants.ZERO)){
                //修改自己的通知记录
                noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                        .set(Notices::getEditDate,new Date())
                        .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId())
                    .set(Notices::getInfo,"审批未通过")
                        .set(Notices::getReaded,Constants.ONE)
                        .set(Notices::getParam2,Constants.TWO)
                        .set(Notices::getStatus,Constants.ONE)
@@ -1074,12 +1095,12 @@
                            .set(Notices::getSendacopy,Constants.ONE)
                            .set(Notices::getStatus,Constants.ONE)
                            .set(Notices::getParam2,Constants.TWO)
                        .set(Notices::getInfo,"审批未通过")
                            .eq(Notices::getObjId,notices.getObjId())
                            .eq(Notices::getObjType,notices.getObjType())
                            .eq(Notices::getReaded,Constants.ZERO)
                            .ne(Notices::getId,notices.getId())
                    );
                }
            }
        }else{
            //处理其他业务数据
@@ -1116,7 +1137,20 @@
                        .eq(Approve::getObjType,approve.getObjType())
                        .eq(Approve::getLevel,(approve.getLevel()+1))
                );
                if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit)
                        ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit)
                        ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)) {
                    Visits visits = visitsMapper.selectById(approve.getObjId());
                    if(Objects.nonNull(visits)){
                        if(Constants.equalsInteger(visits.getStatus(),Constants.ZERO)){
                             visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.ONE).eq(Visits::getId,visits.getId()));
                        }else{
                            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到业务数据对象!请刷新重试");
                        }
                    }
                }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                        Constants.approveObjectType.unCityUseCar)){
                    this.updDriver(approveDTO,approve,false);
                }
@@ -1125,6 +1159,24 @@
                //无他人审批的情况 则修改数据状态
                if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){
                    dealBusinessBean = true;
                }else{
                    if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
                        /**开启下一级别的数据为待审核**/
                        approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                                .lambda()
                                .set(Approve::getStatus,Constants.approveStatus.auditIng)
                                .set(Approve::getTitle,"审批人")
                                .set(Approve::getCheckDate,new Date())
                                .eq(Approve::getStatus,Constants.approveStatus.wait)
                                .eq(Approve::getObjId,approve.getObjId())
                                .eq(Approve::getObjType,approve.getObjType())
                                .eq(Approve::getLevel,(approve.getLevel()+1))
                        );
                    }
                    if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                            Constants.approveObjectType.unCityUseCar)){
                        this.updDriver(approveDTO,approve,false);
                    }
                }
            }
            this.passNextNotices(dealBusinessBean,notices,approve,approveList,approveCopyList,approveDTO);
@@ -1142,6 +1194,14 @@
     * @param approveList  同级待审批数据
     */
    public void passNextNotices(Boolean dealBusinessBean,Notices notices,Approve approve,List<Approve> approveList,List<Approve> copyList,ApproveDTO approveDTO){
        //未开启下一级时,操作后的待审批人
        String memberNames =notices.getParam5()
                .replaceAll(","+notices.getRemark(),"")
                .replaceAll(notices.getRemark()+",","")
                .replaceAll(notices.getRemark(),"");
        //1、修改自己的数据记录
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getEditDate,new Date())
@@ -1153,70 +1213,82 @@
        );
        if(Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)){
            //或签
            //2、更新他人的同级记录 为抄送
            //2、更新他人的同级记录 为抄送  并更新 info 信息
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getEditDate,new Date())
                    .set(Notices::getReaded,Constants.ONE)
                    .set(Notices::getReaded,Constants.ZERO)
                    .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::getStatus,Constants.ZERO)
                    .eq(Notices::getObjType,notices.getObjType())
                    .ne(Notices::getId,notices.getId())
            );
            //3、如果不是终审生成下一级的数据记录
            if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)&&!dealBusinessBean){
              this.saveNextNotice(notices,approve);
                memberNames = 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);
                    memberNames = this.saveNextNotice(notices,approve);
                }
            }
        }else{
            //单人签
            //2、 是否是终审 开启下一级数据
            if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
                this.saveNextNotice(notices,approve);
                memberNames = this.saveNextNotice(notices,approve);
            }
        }
        String info = "";
        List<String> memberNameList = Arrays.asList(memberNames.split(","));
        if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
            info = "待 "+memberNameList.get(0)+" 处理中";
        }else{
            info = "待 "+memberNameList.get(0)+" 等"+memberNameList.size()+"人处理中";
        }
        //更新该业务数据的所有记录信息
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                        .set(!dealBusinessBean,Notices::getInfo,info)
                        .set(dealBusinessBean,Notices::getInfo,"审批通过")
                        .set(Notices::getParam5,memberNames)
                        .eq(Notices::getObjId,notices.getObjId())
                        .eq(Notices::getObjType,notices.getObjType()));
        //终审业务 且 处理数据  进行抄送发送
        if (Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE) && dealBusinessBean) {
            if(CollectionUtils.isNotEmpty(copyList)){
                Notices copyNotices = new Notices();
                for (Approve copyApprove:copyList) {
                    if(Objects.isNull(copyNotices)){
                    Notices copyNotices = new Notices();
                        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);
                    copyNotices.setId(null);
                    copyNotices.setCreateDate(new Date());
                    copyNotices.setEditDate(new Date());
                    copyNotices.setParam2("2");
                    copyNotices.setParam3("");
                    copyNotices.setInfo("审批通过");
                    copyNotices.setUserId(copyApprove.getChekorId());
                    copyNotices.setStatus(Constants.ZERO);
                    copyNotices.setSendacopy(Constants.ONE);
                    copyNotices.setReaded(Constants.ZERO);
                    noticesJoinMapper.insert(copyNotices);
                }
                    }
                }
            }
        }
    }
    public void saveNextNotice(Notices notices,Approve approve){
        List<Approve> nextApproveList = approveJoinMapper.selectList(new QueryWrapper<Approve>()
                .lambda()
    public String saveNextNotice(Notices notices,Approve approve){
        List<Approve> nextApproveList = approveJoinMapper.selectJoinList(Approve.class,new MPJLambdaWrapper<Approve>()
                .selectAll(Approve.class)
                .selectAs(Member::getName,Approve::getMemberName)
                .leftJoin(Member.class,Member::getId,Approve::getChekorId)
                .eq(Approve::getObjId,approve.getObjId())
                .eq(Approve::getObjType,approve.getObjType())
                .eq(Approve::getType,Constants.ZERO)
@@ -1225,26 +1297,30 @@
        if(CollectionUtils.isEmpty(nextApproveList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流数据异常");
        }
        Notices newNotices = new Notices();
        List<String> memberNameList =nextApproveList.stream().map(m->m.getMemberName()).collect(Collectors.toList());
        String memberNames = String.join(",",memberNameList);
        for (Approve nextDealApprove:nextApproveList) {
            if(Objects.isNull(newNotices)){
            Notices newNotices = new Notices();
                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);
            newNotices.setId(null);
            newNotices.setCreateDate(new Date());
            newNotices.setParam2("0");
            newNotices.setParam3("");
            newNotices.setEditDate(new Date());
            newNotices.setUserId(nextDealApprove.getChekorId());
            newNotices.setStatus(Constants.ZERO);
            newNotices.setSendacopy(Constants.ZERO);
            newNotices.setReaded(Constants.ZERO);
            notices.setParam5(memberNames);
            notices.setRemark(nextDealApprove.getMemberName());
            if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
                notices.setInfo("待 "+memberNameList.get(0)+" 处理中");
            }else{
                notices.setId(null);
                notices.setUserId(nextDealApprove.getChekorId());
                noticesJoinMapper.insert(notices);
                notices.setInfo("待 "+memberNameList.get(0)+" 等"+memberNameList.size()+"人处理中");
            }
            noticesJoinMapper.insert(newNotices);
        }
        return memberNames;
    }
    public void dealBusinessData(ApproveDTO approveDTO,Approve approve){
@@ -1269,6 +1345,15 @@
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)){
            //处理通过 显示所有的抄送记录
            approveMapper.update(null,new UpdateWrapper<Approve>().lambda().set(Approve::getStatus,Constants.TWO)
                    .set(Approve::getCheckDate,new Date())
                    .eq(Approve::getObjId,approve.getObjId())
                    .eq(Approve::getObjType,approve.getObjType())
                    .eq(Approve::getType,Constants.ONE)
            );
        }
    }