123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- package com.doc.biz.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.doc.biz.domain.DocFavorite;
- import com.doc.biz.domain.DocInfo;
- import com.doc.biz.domain.DocumentFile;
- import com.doc.biz.domain.EsDocInfo;
- import com.doc.biz.mapper.DocInfoMapper;
- import com.doc.biz.service.*;
- import com.doc.biz.vo.DocumentVO;
- import com.doc.common.constant.Constants;
- import com.doc.common.utils.DateUtils;
- import com.doc.common.utils.SecurityUtils;
- import com.doc.common.utils.StringUtils;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- /**
- * 文件基本信息表Service业务层处理
- *
- * @author wukai
- * @date 2023-08-15
- */
- @Service
- public class DocInfoServiceImpl implements IDocInfoService {
- @Resource
- private DocInfoMapper docInfoMapper;
- @Resource
- private IElasticSearchService elasticSearchService;
- @Resource
- private IDocSpaceService spaceService;
- @Resource
- private IDocFavoriteService favoriteService;
- @Resource
- private IDocDirService dirService;
- @Resource
- private IMongoService mongoService;
- /**
- * 查询文件基本信息表
- *
- * @param docId 文件基本信息表主键
- * @return 文件基本信息表
- */
- @Override
- public DocInfo selectDocInfoByDocId(Long docId) {
- DocInfo info = docInfoMapper.selectDocInfoByDocId(docId);
- if (info != null) {
- String unloading = "l0400";
- //是否允许转存
- info.setUnloading(dirService.hasRole(info.getDirId(), unloading));
- }
- return info;
- }
- /**
- * 通过fileID查询文件基本信息
- *
- * @param fileId mongo文件ID
- */
- @Override
- public DocInfo selectDocInfoByFileId(String fileId) {
- return docInfoMapper.selectDocInfoByFileId(fileId);
- }
- /**
- * only office更新文件内容
- *
- * @param info 文件信息
- */
- @Override
- public void updateDocInfoByOnlyOffice(DocInfo info) {
- info.setUpdateTime(DateUtils.getNowDate());
- docInfoMapper.updateDocInfo(info);
- if (StringUtils.isNotEmpty(info.getFileId())) {
- elasticSearchService.save(info);
- }
- }
- /**
- * 文件上传之后的操作
- *
- * @param vo 上传对象
- * @param spaceId 空间ID
- * @param dirId 目录ID
- * @return 对象
- */
- @Override
- public DocInfo upload(DocumentVO vo, Long spaceId, Long dirId) {
- DocInfo docInfo = new DocInfo();
- docInfo.setSpaceId(spaceId);
- docInfo.setDirId(dirId);
- docInfo.setFileId(vo.getFileId());
- docInfo.setFileName(vo.getFileName());
- docInfo.setFileSize(vo.getFileSize());
- docInfo.setFileType(vo.getSuffix());
- docInfo.setCreateBy(SecurityUtils.getUsername());
- insertDocInfo(docInfo);
- return docInfo;
- }
- /**
- * 查询文件基本信息表列表
- *
- * @param docInfo 文件基本信息表
- * @return 文件基本信息表
- */
- @Override
- public List<DocInfo> selectDocInfoList(DocInfo docInfo) {
- List<DocInfo> list = docInfoMapper.selectDocInfoList(docInfo);
- List<Long> favorites = new ArrayList<>();
- DocFavorite favorite = new DocFavorite();
- favorite.setOwner(SecurityUtils.getUserId());
- favorite.setIsFolder("N");
- favoriteService.selectDocFavoriteList(favorite).forEach(f -> {
- favorites.add(f.getRelaId());
- });
- list.forEach(i -> {
- if (favorites.contains(i.getDocId())) {
- i.setIsFavorite("Y");
- } else {
- i.setIsFavorite("N");
- }
- });
- return list;
- }
- /**
- * 新增文件基本信息表
- *
- * @param docInfo 文件基本信息表
- * @return 结果
- */
- @Override
- public int insertDocInfo(DocInfo docInfo) {
- docInfo.setCreateTime(DateUtils.getNowDate());
- checkDuplicateNames(docInfo);
- int i = docInfoMapper.insertDocInfo(docInfo);
- String fileType = docInfo.getFileType().toLowerCase();
- if (docInfo.getFileSize() > 0 && Constants.ES_EXTENSION.contains(fileType)) {
- //文件不为空,且可以解析的文件后缀名
- String allowSearch = "l0300";
- if (dirService.hasRole(docInfo.getDirId(), allowSearch)) {
- //只有允许全文搜索的才会存入ES库,否则不存入
- elasticSearchService.save(docInfo);
- }
- }
- //改变空间容量
- spaceService.changeUsedCap(docInfo.getSpaceId(), docInfo.getFileSize());
- return i;
- }
- /**
- * 检查重名
- *
- * @param docInfo 文件信息
- */
- private void checkDuplicateNames(DocInfo docInfo) {
- DocInfo query = new DocInfo();
- query.setDirId(docInfo.getDirId());
- query.setFileName(docInfo.getFileName());
- List<DocInfo> list = selectDocInfoList(query);
- if (list.size() > 0 && !list.get(0).getDocId().equals(docInfo.getDocId())) {
- String fileName = docInfo.getFileName();
- fileName = fileName + "-" + DateUtils.dateTimeNow();
- docInfo.setFileName(fileName);
- }
- }
- /**
- * 修改文件基本信息表
- *
- * @param docInfo 文件基本信息表
- * @return 结果
- */
- @Override
- public int updateDocInfo(DocInfo docInfo) {
- checkDuplicateNames(docInfo);
- docInfo.setUpdateTime(DateUtils.getNowDate());
- return docInfoMapper.updateDocInfo(docInfo);
- }
- /**
- * 批量删除文件基本信息表
- *
- * @param docIds 需要删除的文件基本信息表主键
- * @return 结果
- */
- @Override
- public int deleteDocInfoByDocIds(Long[] docIds) {
- int i = 1;
- for (Long docId : docIds) {
- i = i & deleteDocInfoByDocId(docId);
- }
- return 1;
- }
- /**
- * 删除文件基本信息表信息
- *
- * @param docId 文件基本信息表主键
- * @return 结果
- */
- @Override
- public int deleteDocInfoByDocId(Long docId) {
- DocInfo docInfo = selectDocInfoByDocId(docId);
- int i = docInfoMapper.deleteDocInfoByDocId(docId);
- //改变空间容量
- spaceService.changeUsedCap(docInfo.getSpaceId(), 0 - docInfo.getFileSize());
- return i;
- }
- /**
- * 查询已失效的文件
- *
- * @return 失效文件列表
- */
- @Override
- public List<DocInfo> selectLoseList() {
- List<DocInfo> list = docInfoMapper.selectDocInfoList(new DocInfo());
- List<DocInfo> result = new ArrayList<>();
- list.forEach(info -> {
- Optional<DocumentFile> optional = mongoService.findByFileId(info.getFileId());
- if (!optional.isPresent()) {
- EsDocInfo esDocInfo = elasticSearchService.getEsDocInfo(info.getDocId());
- if (esDocInfo != null) {
- info.setRemark(esDocInfo.getContent());
- }
- result.add(info);
- }
- });
- return result;
- }
- /**
- * 根据目录ID查询文件数量
- *
- * @param dirId 目录ID
- * @return 文件数量
- */
- @Override
- public Long selectCountList(Long dirId) {
- QueryWrapper<DocInfo> wrapper = new QueryWrapper();
- wrapper.eq("dir_id", dirId);
- return docInfoMapper.selectCount(wrapper);
- }
- }
|