k94314517
2024-05-23 de00fe811ce5f1c1e8592869d218e7c201e1748f
代码初始化
已添加2个文件
已修改15个文件
468 ■■■■ 文件已修改
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CarUseBookController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveCloudController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -426,12 +426,26 @@
}
public interface  approveObjectType{
    int unConstructionVisit = 0;//非施工人员访客申请
    int constructionVisit = 1;//工人员访客申请
    int visitReporting = 2;//访客报备
    int cityUseCar = 3;//市内用车
    int unCityUseCar = 4;//市外用车
    int logisticsCarUse = 5;//物流车预约
}
public interface  approveStatus{
    int wait = 0;//待审批
    int auditIng = 1;//审批中
    int pass = 2;//审批通过
    int unPass = 3;//审批未通过
    int otherDeal = 4;//他人已处理
    int cancel = 5;//已取消
    int otherUnPass = 6;//他人拒绝
}
    /**
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CarUseBookController.java
@@ -73,10 +73,10 @@
        ExcelExporter.build(CarUseBook.class).export(carUseBookService.findPage(pageWrap).getRecords(), "车辆_用车申请信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:carusebook:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(carUseBookService.findById(id));
    }
//    @ApiOperation("根据ID查询")
//    @GetMapping("/{id}")
//    @RequiresPermissions("business:carusebook:query")
//    public ApiResponse findById(@PathVariable Integer id) {
//        return ApiResponse.success(carUseBookService.findById(id));
//    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveCloudController.java
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.ApproveDTO;
import com.doumee.dao.business.model.Approve;
import com.doumee.service.business.ApproveService;
import io.swagger.annotations.Api;
@@ -88,4 +89,14 @@
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(approveService.findById(id));
    }
    @ApiOperation("审批信息提交")
    @PostMapping("/approved")
    @CloudRequiredPermission("business:approve:create")
    public ApiResponse approved (@RequestBody ApproveDTO approveDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        approveDTO.setLoginUserInfo(getLoginUser(token));
        approveService.approved(approveDTO);
        return ApiResponse.success("操作成功");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -85,7 +85,7 @@
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:carusebook:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(carUseBookService.findById(id));
        return ApiResponse.success(carUseBookService.findById(id,getLoginUser(token).getMemberId()));
    }
    @ApiOperation("查询车辆预约记录")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
@@ -75,15 +75,15 @@
        return ApiResponse.success(visitsService.taskCenter(pageWrap));
    }
    @ApiOperation("访客记录详情")
    @GetMapping("/visitDetail")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "记录主键", required = true)
    })
    public ApiResponse<VisitDetailVO> visitDetail (@RequestParam Integer id) {
        return ApiResponse.success(visitsService.getVisitDetail(id));
    }
//    @ApiOperation("访客记录详情")
//    @GetMapping("/visitDetail")
//    @ApiImplicitParams({
//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
//            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "记录主键", required = true)
//    })
//    public ApiResponse<VisitDetailVO> visitDetail (@RequestParam Integer id) {
//        return ApiResponse.success(visitsService.getVisitDetail(id));
//    }
    @ApiOperation(value = "人员分页",notes = "可拜访内部人员")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -76,8 +76,8 @@
    @ApiOperation(value = "访客记录详情", notes = "访客记录详情")
    @GetMapping("/detail")
    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id) {
        return ApiResponse.success("查询成功", visitsService.getVisitDetail(id));
    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success("查询成功", visitsService.getVisitDetail(id,getLoginUser(token).getMemberId()));
    }
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.doumee.dao.business.dto;
import com.doumee.core.model.LoginUserInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/20 14:54
 */
@Data
@ApiModel("审批请求类")
public class ApproveDTO {
    @ApiModelProperty(value = "关联业务主键")
    private Integer objId;
    @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约")
    private Integer objType;
    @ApiModelProperty(value = "2审批通过 3审批未通过")
    private Integer status;
    @ApiModelProperty(value = "审批备注")
    private String checkInfo;
    @ApiModelProperty(value = "司机信息 å…³è”car_driver")
    private Integer driverId;
    @ApiModelProperty(value = "操作人",hidden = true)
    private LoginUserInfo loginUserInfo;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -11,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * å®¡æ‰¹ä¿¡æ¯è®°å½•表
@@ -69,8 +70,8 @@
    @ExcelColumn(name="ERP审批编码")
    private String erpId;
    @ApiModelProperty(value = "审批状态 0待自己审批审批 1待自己审批 2审批通过 3审批未通过 4他人已处理 ", example = "1")
    @ExcelColumn(name="审批状态 0待自己审批审批 1待自己审批 2审批通过 3审批未通过 4他人已处理")
    @ApiModelProperty(value = "审批状态 0待审批 1审批中 2审批通过 3审批未通过 4已取消 5他人或签 6他人拒绝", example = "1")
    @ExcelColumn(name="审批状态 0待审批 1审批中 2审批通过 3审批未通过 4已取消 5他人或签 6他人拒绝")
    private Integer status;
    @ApiModelProperty(value = "状态信息")
@@ -141,4 +142,9 @@
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "待审批记录", example = "1")
    @TableField(exist = false)
    private List<Approve> approveList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.business.vo.ApproveDataVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -170,7 +171,7 @@
    @ApiModelProperty(value = "申请人电话")
    @TableField(exist = false)
    private String memberMobile;
    @ApiModelProperty(value = "审批记录")
    @ApiModelProperty(value = "审批信息数据")
    @TableField(exist = false)
    private List<Approve> approveList;
    private ApproveDataVO approveDateVO;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.doumee.dao.business.vo;
import com.doumee.dao.business.model.Approve;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class ApproveDataVO {
    @ApiModelProperty(value = "审批记录")
    private List<Approve> approveList;
    @ApiModelProperty(value = "是否可以审批 0=不可以;1=可以")
    private Integer canBeApproved;
    @ApiModelProperty(value = "抄送记录")
    private List<Approve> copyList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
@@ -1,7 +1,9 @@
package com.doumee.dao.web.response;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.business.vo.ApproveDataVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -65,6 +67,9 @@
    @ApiModelProperty(value = "访客二维码")
    private String qrcode;
    @ApiModelProperty(value = "审批信息数据")
    @TableField(exist = false)
    private ApproveDataVO approveDateVO;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -2,7 +2,9 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.ApproveDTO;
import com.doumee.dao.business.model.Approve;
import com.doumee.dao.business.vo.ApproveDataVO;
import com.doumee.dao.web.response.InternalHomeVO;
import java.util.List;
@@ -106,4 +108,8 @@
    InternalHomeVO getHomeData(Integer memberId);
    void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
    ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId);
    void approved(ApproveDTO approveDTO);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -62,9 +62,10 @@
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param id ä¸»é”®
     * @param memberId
     * @return CarUseBook
     */
    CarUseBook findById(Integer id);
    CarUseBook findById(Integer id,Integer memberId);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -120,7 +120,7 @@
     * @param id
     * @return
     */
    VisitDetailVO getVisitDetail(Integer id);
    VisitDetailVO getVisitDetail(Integer id,Integer memberId);
    /**
     * å†…部人员 ä»»åŠ¡ä¸­å¿ƒ
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -9,8 +9,10 @@
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.system.SystemUserMapper;
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;
@@ -18,11 +20,13 @@
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 org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@@ -37,6 +41,9 @@
    @Autowired
    private ApproveMapper approveMapper;
    @Autowired
    private ApproveJoinMapper approveJoinMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -58,6 +65,9 @@
    @Autowired
    private CarDriverMapper carDriverMapper;
    @Autowired
    private VisitsMapper visitsMapper;
    @Override
    public Integer create(Approve approve) {
@@ -258,12 +268,12 @@
        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(approveList)){
        if(CollectionUtils.isEmpty(approveList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误");
        }
        //处理抄送数据
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(approveCopyList)){
        if(CollectionUtils.isNotEmpty(approveCopyList)){
            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
        }
        approveMapper.insertBatchSomeColumn(approveList);
@@ -290,8 +300,8 @@
                approve.setIsdeleted(Constants.ZERO);
                approve.setTemplatId(approveTempl.getId());
                approve.setChekorId(memberId);
                approve.setStatus(Constants.ZERO);
                approve.setStatusInfo("待审批");
                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);
@@ -315,7 +325,7 @@
                    .eq(Member::getWorkStatus,Constants.ZERO)
                    .in(Member::getId,approveParam.getObjIds().split(",")));
            List<Integer> userIds = new ArrayList<>();
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
            if(CollectionUtils.isNotEmpty(memberList)){
                userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
            }
            //公务用车 é»˜è®¤åŠ å…¥ å¸æœºæŠ„送
@@ -331,7 +341,7 @@
                userIds.add(carDriver.getMemberId());
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userIds)){
            if(CollectionUtils.isNotEmpty(userIds)){
                for (Integer memberId:userIds) {
                    Approve approve = new Approve();
                    approve.setCreateDate(new Date());
@@ -425,4 +435,253 @@
    }
    /**
     * æ•´ç† å®¡æ‰¹æ•°æ®
     * @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);
        }
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -18,6 +18,7 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.DateIntervalVO;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.ApproveService;
import com.doumee.service.business.CarUseBookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -151,8 +152,14 @@
        }
    }
    /**
     *
     * @param id ä¸»é”®
     * @param memberId
     * @return
     */
    @Override
    public CarUseBook findById(Integer id) {
    public CarUseBook findById(Integer id,Integer memberId) {
        MPJLambdaWrapper<CarUseBook>  queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(CarUseBook.class);
        queryWrapper.select("t1.name",CarUseBook::getMemberName);
@@ -166,21 +173,11 @@
                .eq(CarUseBook::getId,id)
                .last("limit 1"  );
        CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
        //审批记录
       List<Approve> approveList = 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)
                        .eq(Approve::getIsdeleted,Constants.ZERO)
                        .eq(Approve::getObjType,Constants.ONE)
                        .eq(Approve::getObjId,id)
                        .orderByAsc(Approve::getLevel)
        model.setApproveDateVO(
               approveService.arrangeApprovedData(id,
                       model.getType().equals(Constants.ZERO)?3:4,
                       memberId)
        );
       model.setApproveList(approveList);
        return  model;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -1213,7 +1213,7 @@
    @Override
    public VisitDetailVO getVisitDetail(Integer id){
    public VisitDetailVO getVisitDetail(Integer id,Integer memberId){
        Visits visits = visitsMapper.selectById(id);
        if(Objects.isNull(visits)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -1257,6 +1257,15 @@
                visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
                .select(Visits::getName,Visits::getPhone,Visits::getQrcode,Visits::getFaceImg,Visits::getImgurl,Visits::getIdcardDecode,Visits::getStatus)
                .eq(Visits::getParentId,id)));
        if(Objects.nonNull(memberId)){
            visitDetailVO.setApproveDateVO(
                    approveService.arrangeApprovedData(id,
                            visits.getType(),
                            memberId)
            );
        }
        return visitDetailVO;
    }