lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -1,7 +1,7 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -12,20 +12,23 @@
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.FileUploadResult;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.dnc.entity.*;
import org.jeecg.modules.dnc.exception.ExceptionCast;
import org.jeecg.modules.dnc.mapper.DocInfoMapper;
import org.jeecg.modules.dnc.service.*;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
import org.jeecg.modules.dnc.request.DocInfoUploadRequest;
import org.jeecg.modules.dnc.utils.file.FileUtilS;
import org.jeecg.modules.dnc.entity.*;
import org.jeecg.modules.dnc.response.*;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.dnc.service.*;
import org.jeecg.modules.dnc.utils.CamelToSnakeRegex;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.jeecg.modules.dnc.utils.file.FileUtilS;
import org.jeecg.modules.dncFlow.entity.DispatchFile;
import org.jeecg.modules.dncFlow.service.IDispatchFileService;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.system.entity.SysParams;
import org.jeecg.modules.system.service.ISysParamsService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@@ -37,7 +40,9 @@
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class DocInfoServiceImpl extends ServiceImpl<DocInfoMapper, DocInfo> implements IDocInfoService {
@@ -56,7 +61,12 @@
    @Autowired
    private IDeviceGroupService deviceGroupService;
    @Autowired
    private INcLogInfoService iNcLogInfoService;
    private IDispatchFileService dispatchFileService;
    @Autowired
    private ISysParamsService sysParamsService;
    @Autowired
    @Lazy
    private IComponentInfoService componentInfoService;
    /*备份处理*/
    @Override
@@ -93,6 +103,19 @@
        docRelative.setAttributionType(uploadRequest.getAttributionType());
        docRelative.setClassificationId(docClass.getClassificationId());
        boolean b = docRelativeService.save(docRelative);
        if (uploadRequest.getAttributionType()==2){
            //查询借用的部件
            List<ComponentInfo> borrowComponentInfoList=componentInfoService.list(new QueryWrapper<ComponentInfo>().eq("borrow_id", uploadRequest.getAttributionId()));
            if (!borrowComponentInfoList.isEmpty()) {
                borrowComponentInfoList.forEach(item->{
                    DocRelative borrowDocRelative = new DocRelative();
                    BeanUtil.copyProperties(docRelative,borrowDocRelative);
                    borrowDocRelative.setAttributionId(item.getComponentId());
                    borrowDocRelative.setId(null);
                    docRelativeService.save(borrowDocRelative);
                });
            }
        }
        if(!b)
            ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR);
        DocFile docFile = new DocFile();
@@ -134,20 +157,27 @@
                }
            }
        }
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("导入"+docClass.getClassificationName()+",文档名称:"+(docFile.getFileName()+"."+docFile.getFileSuffix()));
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        boolean saveBool = super.save(docInfo);
        SysParams sysParams=sysParamsService.getSysPramBySettingKey("nc_dispatch_file");
        if (sysParams ==null){
            throw new JeecgBootException("未配置导入NC与电子图版是否触发审签流程,请联系管理员");
        }else {
            if (saveBool&&sysParams.getSettingValue().equals("1")){
                //触发审签
                DispatchFile dispatchFile = new DispatchFile();
                dispatchFile.setDocId(docInfo.getDocId());
                dispatchFile.setFileId(docFile.getFileId());
                dispatchFile.setAttributionId(uploadRequest.getAttributionId());
                dispatchFile.setAttributionType(String.valueOf(uploadRequest.getAttributionType()));
                dispatchFile.setDocClassCode(uploadRequest.getDocClassCode());
                dispatchFileService.saveDispatchFile(dispatchFile);
            }
        }
        return saveBool;
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
@@ -167,7 +197,7 @@
        }
        String  recF =  pathFile.substring(0,recNum);//将返回def}ab
        Integer equipmentId = recF.lastIndexOf("\\");
        String deviceNo = recF.substring(equipmentId+1,recF.length());
        String deviceNo = recF.substring(equipmentId+1);
        if (StringUtils.isEmpty(deviceNo)) {
            return false;
        }
@@ -300,23 +330,12 @@
        docInfo.setClassificationId(null);
        docInfo.setPublishFileId(null);
        docInfo.setPublishVersion(null);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(3);
        //日志内容
        ncLogInfo.setLogContent("文档名称:"+docInfo.getDocName());
        //修改保存备注
        ncLogInfo.setRemark(JSONObject.toJSONString(en));
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return super.updateById(docInfo);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteDocInfo(String id) {
    public boolean deleteDocInfo(String id,String attrType,String attrId) {
        if(!ValidateUtil.validateString(id))
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        DocInfo en = super.getById(id);
@@ -324,6 +343,20 @@
            ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
        if(en.getDocStatus() != 1)
            ExceptionCast.cast(DocumentCode.DOC_DEL_ERROR);
        //查询对应的关系
        if ("2".equals(attrType)) {
            //判断部件引用
            ComponentInfo componentInfo=componentInfoService.getById(attrId);
            if(componentInfo!=null&&componentInfo.getBorrowId()!=null){
                //借用的部件,只删除自己的关系
                DocRelative docRelative=docRelativeService.getOne(new QueryWrapper<DocRelative>()
                        .eq("attribution_id", attrId).eq("attribution_type", 2).eq("doc_id",id));
                if(docRelative!=null){
                    docRelativeService.removeById(docRelative.getId());
                    return true;
                }
            }
        }
        FileOperate operate = fileOperateService.getByDocId(id);
        if(operate != null)
            ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING);
@@ -333,15 +366,6 @@
        b = docRelativeService.deleteByDocId(id);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("产品结构树");
        //类型
        ncLogInfo.setOperateType(4);
        //日志内容
        ncLogInfo.setLogContent("文档名称:"+en.getDocName());
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return super.removeById(id);
    }
@@ -359,7 +383,7 @@
        DocInfo en = super.getById(id);
        if(en == null)
            ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
        List<DeviceInfo> deviceList = docRelativeService.findDeviceByDocId(en.getDocId());
        List<MdcEquipment> deviceList = docRelativeService.findDeviceByDocId(en.getDocId());
        if(deviceList != null && !deviceList.isEmpty())
            ExceptionCast.cast(DocumentCode.DOC_DEVICE_EXIST);
        String suffix = FileUtilS.getFileSuffix(file.getOriginalFilename());
@@ -380,16 +404,6 @@
        docFile.setFilePath(fileUploadResult.getFilePath());
        docFile.setFileSize(fileUploadResult.getFileSize());
        docFile.setFileSuffix(fileUploadResult.getFileSuffix());
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("入库"+docFile.getFileSuffix()+"格式文档,文档名称:"+docFile.getFileName());
        ncLogInfo.setRemark(JSONObject.toJSONString(en));
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        boolean b = fileOperateService.deleteByDocId(id);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
@@ -448,15 +462,6 @@
        DocFile old = docFileService.getDocFileNearest(en.getDocId());
        if(old == null)
            ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NONE);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("发布"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName());
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        if(old.getDocVersion().contains(".")) {
            DocFile docFile = new DocFile();
            BeanUtils.copyProperties(pubFile, docFile);
@@ -483,15 +488,6 @@
            ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
        if(en.getDocStatus() != 2)
            ExceptionCast.cast(DocumentCode.DOC_REPUBLISH_ERROR);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("重新发布"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName());
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 1).update();
    }
@@ -508,15 +504,6 @@
        FileOperate operate = fileOperateService.getByDocId(id);
        if(operate != null)
            ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("归档"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName());
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 3).update();
    }
@@ -534,15 +521,6 @@
        DocInfo en = super.getById(id);
        if(en == null)
            ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("取消出库"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName());
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return fileOperateService.deleteByDocId(id);
    }
@@ -578,11 +556,42 @@
                queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]);
            }
        }
        queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime());
        queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime());
        queryWrapper.orderByDesc("u.create_time");
        getDocQuery(docQuery, queryWrapper);
        IPage<DocInfo> docInfoIPage = super.getBaseMapper().findDocExtList(pageData, queryWrapper);
        return Result.ok(docInfoIPage);
    }
    private void getDocQuery(DocInfoQueryRequest docQuery, QueryWrapper<DocInfo> queryWrapper) {
        if (docQuery.getDocStatus() != null && docQuery.getDocStatus().contains(",")) {
            String[] docStatusArray = docQuery.getDocStatus().split(",");
            List<Integer> docStatusList = Arrays.stream(docStatusArray).map(Integer::parseInt).collect(Collectors.toList());
            queryWrapper.in("u.doc_status",docStatusList);
        }else {
            queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocStatus()),"u.doc_status",docQuery.getDocStatus());
        }
        if (docQuery.getDocDispatchStatus() != null && docQuery.getDocDispatchStatus().contains(",")) {
            String[] docDispatchStatusArray = docQuery.getDocDispatchStatus().split(",");
            List<Integer> docDispatchStatusList = Arrays.stream(docDispatchStatusArray).map(Integer::parseInt).collect(Collectors.toList());
            queryWrapper.in("u.doc_dispatch_status",docDispatchStatusList);
        }else {
            queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocDispatchStatus()),"u.doc_dispatch_status",docQuery.getDocDispatchStatus());
        }
        if (StrUtil.isNotEmpty(docQuery.getPullStatus())){
            if (("1").equals(docQuery.getPullStatus())){
                queryWrapper.isNull("o.doc_id");
            }else if (("2").equals(docQuery.getPullStatus())){
                queryWrapper.isNotNull("o.doc_id");
            }
        }
        queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"u.create_time",docQuery.getStartTime()+" 00:00:00");
        queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"u.create_time",docQuery.getEndTime()+" 23:59:59");
        if (StrUtil.isNotEmpty(docQuery.getColumn())){
            if (("desc").equals(docQuery.getOrder())){
                queryWrapper.orderByDesc("u."+ CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
            }else {
                queryWrapper.orderByAsc("u."+CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
            }
        }
    }
    @Override
@@ -673,7 +682,7 @@
    public boolean deleteByProcessId(String processId) {
        if(!ValidateUtil.validateString(processId))
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        Integer attrType = 4;
        Integer attrType = 5;
        boolean b = docFileService.deleteByDocAttr(attrType, processId);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
@@ -684,14 +693,32 @@
        return docRelativeService.deleteByDocAttr(attrType, processId);
    }
    /**
     * 删除工步下的所有文档
     * @param stepId
     * @return
     */
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteByStepId(String stepId){
        if(!ValidateUtil.validateString(stepId))
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        Integer attrType = 6;
        boolean b = docFileService.deleteByDocAttr(attrType, stepId);
        if(!b)
            ExceptionCast.cast(CommonCode.FAIL);
        b = deleteByDocAttr(attrType, stepId);
        if(!b) {
            ExceptionCast.cast(CommonCode.FAIL);
        }
        return docRelativeService.deleteByDocAttr(attrType, stepId);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteByDocAttr(Integer attrType, String attrId) {
        int i = super.getBaseMapper().deleteByDocAttr(attrType, attrId);
        if(i >= 0) {
            return true;
        }
        return false;
        return i >= 0;
    }
    @Override
@@ -710,15 +737,6 @@
        String filePath = docFile.getFilePath();
        String fileEncodeName = docFile.getFileEncodeName();
        FileUtilS.downLoadFile(response, fileEncodeName, filePath, fileName);
        //添加日志
        NcLogInfo ncLogInfo = new NcLogInfo();
        //模块
        ncLogInfo.setModuleInfo("设备结构树");
        //类型
        ncLogInfo.setOperateType(7);
        //日志内容
        ncLogInfo.setLogContent("出库"+docFile.getFileSuffix()+"格式文档,文档名称:"+fileName);
        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
        return null;
    }
@@ -777,9 +795,41 @@
                queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]);
            }
        }
        queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime());
        queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime());
        queryWrapper.orderByDesc("u.create_time");
        if (docQuery.getDocStatus() != null && docQuery.getDocStatus().contains(",")) {
            String[] docStatusArray = docQuery.getDocStatus().split(",");
            List<Integer> docStatusList = Arrays.stream(docStatusArray).map(Integer::parseInt).collect(Collectors.toList());
            queryWrapper.in("u.doc_status",docStatusList);
        }else {
            queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocStatus()),"u.doc_status",docQuery.getDocStatus());
        }
        if (docQuery.getDocDispatchStatus() != null && docQuery.getDocDispatchStatus().contains(",")) {
            String[] docDispatchStatusArray = docQuery.getDocDispatchStatus().split(",");
            List<Integer> docDispatchStatusList = Arrays.stream(docDispatchStatusArray).map(Integer::parseInt).collect(Collectors.toList());
            queryWrapper.in("u.doc_dispatch_status",docDispatchStatusList);
        }else {
            queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocDispatchStatus()),"u.doc_dispatch_status",docQuery.getDocDispatchStatus());
        }
        if (StrUtil.isNotEmpty(docQuery.getPullStatus())){
            if (("1").equals(docQuery.getPullStatus())){
                queryWrapper.isNull("o.doc_id");
            }else if (("2").equals(docQuery.getPullStatus())){
                queryWrapper.isNotNull("o.doc_id");
            }
        }
        if (docQuery.getSyncStatus()!=null){
            if (docQuery.getSyncStatus()==1){
                queryWrapper.isNotNull("t.sync_flag");
            }else if (docQuery.getSyncStatus()==2){
                queryWrapper.isNull("t.sync_flag");
            }
        }
        queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"u.create_time",docQuery.getStartTime()+" 00:00:00");
        queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"u.create_time",docQuery.getEndTime()+" 23:59:59");
        if (("desc").equals(docQuery.getOrder())){
            queryWrapper.orderByDesc("u."+ CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
        }else {
            queryWrapper.orderByAsc("u."+CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
        }
        IPage<DocInfo> docInfoIPage = super.getBaseMapper().findDeviceDocExtList(pageData, queryWrapper);
        if (docInfoIPage != null && docInfoIPage.getRecords() != null && !docInfoIPage.getRecords().isEmpty()) {
            for (DocInfo d : docInfoIPage.getRecords()) {
@@ -790,7 +840,7 @@
    }
    @Override
    public Result<?> findList(DocInfoQueryRequest docQuery) {
    public List<DocInfo> findList(DocInfoQueryRequest docQuery) {
        if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionId())
                || !ValidateUtil.validateInteger(docQuery.getAttributionType()) ||
                !ValidateUtil.validateString(docQuery.getDocClassCode())) {
@@ -802,6 +852,7 @@
        }
        QueryWrapper<DocInfo> queryWrapper = Wrappers.query();
        queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocId()),"u.doc_id",docQuery.getDocId());
        queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()).eq("r.attribution_id", docQuery.getAttributionId())
                .eq("r.classification_id", docClassification.getClassificationId());
        if (StringUtils.isNotEmpty(docQuery.getDocName())) {
@@ -814,11 +865,48 @@
                queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]);
            }
        }
        queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime());
        queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime());
        List<DocInfo> docInfoIPage = super.getBaseMapper().findDocExtList(queryWrapper);
        return Result.ok(docInfoIPage);
        getDocQuery(docQuery, queryWrapper);
        return super.getBaseMapper().findDocExtList(queryWrapper);
    }
    /**
     * 通过一组attributionId,docClassCode,attributionType查询可指派的文档信息列表
     * @param docQuery
     * @return
     */
    @Override
    public List<DocInfo> findListByDocQuery(DocInfoQueryRequest docQuery){
        if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionIds())
                || !ValidateUtil.validateInteger(docQuery.getAttributionType()) ||
                !ValidateUtil.validateString(docQuery.getDocClassCode())) {
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        }
        DocClassification docClassification = docClassificationService.getByCode(docQuery.getDocClassCode());
        if(docClassification == null) {
            ExceptionCast.cast(CommonCode.INVALID_PAGE);
        }
        List<String> attributionIds = Arrays.asList(docQuery.getAttributionIds().split(","));
        QueryWrapper<DocInfo> queryWrapper = Wrappers.query();
        queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocId()),"u.doc_id",docQuery.getDocId());
        queryWrapper.eq("r.attribution_type", docQuery.getAttributionType())
                .in("r.attribution_id", attributionIds)
                .eq("r.classification_id", docClassification.getClassificationId());
        if (StringUtils.isNotEmpty(docQuery.getDocName())) {
            int dotIndex = docQuery.getDocName().lastIndexOf(".");
            if (dotIndex == -1) {
                queryWrapper.like("u.doc_name", docQuery.getDocName());
            } else {
                String[] docNameArr = docQuery.getDocName().split("\\.");
                queryWrapper.like(StrUtil.isNotEmpty(docNameArr[0]), "u.doc_name", docNameArr[0]);
                queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]);
            }
        }
        getDocQuery(docQuery, queryWrapper);
        return super.getBaseMapper().findDocExtList(queryWrapper);
    }
    @Override
    public List<DocInfo> getByProcessIds(List<ProcessStream> streams) {
@@ -839,11 +927,11 @@
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean batchRemoveDocInfo(String[] docIds) {
    public boolean batchRemoveDocInfo(String[] docIds,String attrType,String attrId) {
        if(docIds == null || docIds.length < 1)
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        for(String docId : docIds) {
            this.deleteDocInfo(docId);
            this.deleteDocInfo(docId,attrType,attrId);
        }
        return true;
    }