k94314517
2024-06-03 e89b44aed4f73cb67fb7c94a2f41eb706d488044
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1,6 +1,7 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.api.R;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -30,8 +31,10 @@
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;
@@ -45,6 +48,7 @@
 * @date 2023/12/28 14:09
 */
@Service
@Slf4j
public class ApproveServiceImpl implements ApproveService {
    @Autowired
@@ -580,7 +584,6 @@
            waitModel.setApproveList(copyList);
            approveDateVO.getApproveList().add(waitModel);
        }
        return approveDateVO;
    }
@@ -874,7 +877,19 @@
        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<Notices>().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());
@@ -882,9 +897,6 @@
        approve.setCheckorName(approveDTO.getLoginUserInfo().getRealname());
        approve.setCheckDate(new Date());
        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>()
@@ -894,7 +906,17 @@
                        .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<Approve> approveCopyList = 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::getType,Constants.ONE)
        );
        //处理本次审批的业务数据
        approveMapper.updateById(approve);
@@ -910,17 +932,39 @@
                    .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<Notices>().lambda()
                        .set(Notices::getEditDate,new Date())
                        .set(Notices::getReaded,Constants.ONE)
                        .set(Notices::getParam2,approve.getStatus())
                        .eq(Notices::getId,notices.getId())
                );
                //修改 未处理的 通知数据 为抄送
                if (!Constants.equalsInteger(approve.getApproveType(),Constants.TWO)){
                    noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                            .set(Notices::getEditDate,new Date())
                            .set(Notices::getSendacopy,Constants.ONE)
                            .set(Notices::getParam2,approve.getStatus())
                            .eq(Notices::getObjId,notices.getObjId())
                            .eq(Notices::getObjType,notices.getObjType())
                            .eq(Notices::getReaded,Constants.ZERO)
                            .ne(Notices::getId,notices.getId())
                    );
                }
            }
            return;
        }else{
            //处理其他业务数据
            if((approve.getApproveType().equals(Constants.ZERO)
                    || approve.getApproveType().equals(Constants.TWO)) &&approve.getIsEndCheck()==Constants.ONE){
            if((Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)
                    || Constants.equalsInteger( approve.getApproveType(),Constants.TWO)) && Constants.equalsInteger(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.getApproveType().equals(Constants.TWO)) &&approve.getIsEndCheck()!=Constants.ONE){
                //或签 / 单人审 非终审 则开启下一步业务流程
@@ -938,122 +982,144 @@
                        .eq(Approve::getObjType,approve.getObjType())
                        .eq(Approve::getLevel,(approve.getLevel()+1))
                );
                //TODO 更新消息数据  发送下一级数据消息
            }else if(approve.getApproveType().equals(Constants.ONE)&&approve.getIsEndCheck()==Constants.ONE){
            //会签 且终审
                if(approveList.size()==Constants.ZERO){
            }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);
        }
        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)){
            // 市内外用车申请
            if(dealBusinessBean){
                //TODO 发送审批通过消息
                carUseBookMapper.updateById(carUseBook);
            }else if(approveDTO.getStatus().equals(Constants.THREE)){
                //TODO 审批未通过通知
            }
        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
            //TODO  物流车预约
        //处理业务数据
        if(dealBusinessBean){
            this.dealBusinessData(approveDTO,approve);
        }
    }
    public void passNextNotices(Boolean dealBusinessBean,Approve approve){
        //根据审批记录查询 通知记录
        Integer noticeType = Constants.approveTypeToNoticeType(approve.getObjType());
        Notices  notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>().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)
    /**
     * 处理待办信息
     * @param dealBusinessBean  是否需要进行更新业务数据状态
     * @param approve  审批记录
     * @param approveList  同级待审批数据
     */
    public void passNextNotices(Boolean dealBusinessBean,Notices notices,Approve approve,List<Approve> approveList,List<Approve> copyList){
        //1、修改自己的数据记录
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getEditDate,new Date())
                .set(Notices::getReaded,Constants.ONE)
                .set(dealBusinessBean,Notices::getParam2,approve.getStatus())
                .eq(Notices::getId,notices.getId())
        );
        if(Objects.isNull(notices)){
            return;
        }
        if(Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)){
            //或签
            //1、修改自己的数据记录
            //2、更新他人的同级记录 为抄送
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getEditDate,new Date())
                    .set(Notices::getReaded,Constants.ONE)
                    .set(Notices::getSendacopy,Constants.ONE)
                    .set(dealBusinessBean,Notices::getParam2,approve.getStatus())
                    .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)){
            //会签
            //1、修改自己的数据记录
            //2、根据是否为最后一位审批人   如果不是 则结束
            //3、 如果是最后一位审批人 且不是终审开启下一级数据
            //2、如果是最后一位审批人 且不是终审开启下一级数据
            if(Constants.equalsInteger(Constants.ZERO,approveList.size())){
                if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
                    this.saveNextNotice(notices,approve);
                }
            }
        }else{
            //单人签
            //1、修改自己的数据记录
            //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.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);
                    }
                }
            }
        }
        //业务通过 修改审批对应消息记录
        if(Constants.equalsInteger(approve.getStatus(),Constants.approveStatus.pass)){
        }
        //
        //终审业务 发送抄送
        if (Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)) {
        }
    }
    public void dealBusinessData(ApproveDTO approveDTO,Approve approve,Visits visits,CarUseBook carUseBook){
    public void saveNextNotice(Notices notices,Approve approve){
        List<Approve> nextApproveList = approveJoinMapper.selectList(new QueryWrapper<Approve>()
                .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.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 = visitsMapper.selectById(approveDTO.getObjId());
            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 = carUseBookMapper.selectById(approveDTO.getObjId());
            CarUseBook carUseBook = carUseBookMapper.selectById(approveDTO.getObjId());
            if(Objects.isNull(carUseBook)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到用车记录");
            }
@@ -1068,7 +1134,7 @@
                }
                carUseBook.setDriverId(carDriver.getId());
            }
            carUseBookMapper.updateById(carUseBook);
        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
            //TODO  物流车预约