package com.doc.biz.service.impl; import com.doc.biz.domain.DocFavorite; import com.doc.biz.domain.DocInfo; import com.doc.biz.mapper.DocInfoMapper; import com.doc.biz.service.IDocFavoriteService; import com.doc.biz.service.IDocInfoService; import com.doc.biz.service.IDocSpaceService; import com.doc.biz.service.IElasticSearchService; 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; /** * 文件基本信息表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; /** * 查询文件基本信息表 * * @param docId 文件基本信息表主键 * @return 文件基本信息表 */ @Override public DocInfo selectDocInfoByDocId(Long docId) { return docInfoMapper.selectDocInfoByDocId(docId); } /** * 通过fileID查询文件基本信息 * * @param fileId mongo文件ID */ @Override public DocInfo selectDocInfoByFileId(String fileId) { return docInfoMapper.selectDocInfoByFileId(fileId); } /** * 查询文件基本信息表列表 * * @param docInfo 文件基本信息表 * @return 文件基本信息表 */ @Override public List selectDocInfoList(DocInfo docInfo) { List list = docInfoMapper.selectDocInfoList(docInfo); List 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); elasticSearchService.save(docInfo); //改变空间容量 spaceService.updateUsedCap(docInfo.getSpaceId()); return i; } /** * 检查重名 * * @param docInfo 文件信息 */ private void checkDuplicateNames(DocInfo docInfo) { DocInfo query = new DocInfo(); query.setDirId(docInfo.getDirId()); query.setFileName(docInfo.getFileName()); List list = selectDocInfoList(query); if (list.size() > 0) { 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()); int i = docInfoMapper.updateDocInfo(docInfo); if (StringUtils.isNotEmpty(docInfo.getFileId())) { elasticSearchService.save(docInfo); } //改变空间容量 spaceService.updateUsedCap(docInfo.getSpaceId()); return i; } /** * 批量删除文件基本信息表 * * @param docIds 需要删除的文件基本信息表主键 * @return 结果 */ @Override public int deleteDocInfoByDocIds(Long[] docIds) { List spaceIds = new ArrayList<>(); for (Long docId : docIds) { DocInfo docInfo = selectDocInfoByDocId(docId); spaceIds.add(docInfo.getSpaceId()); } int i = docInfoMapper.deleteDocInfoByDocIds(docIds); //改变空间容量 for (Long spaceId : spaceIds) { spaceService.updateUsedCap(spaceId); } return i; } /** * 删除文件基本信息表信息 * * @param docId 文件基本信息表主键 * @return 结果 */ @Override public int deleteDocInfoByDocId(Long docId) { DocInfo docInfo = selectDocInfoByDocId(docId); int i = docInfoMapper.deleteDocInfoByDocId(docId); //改变空间容量 spaceService.updateUsedCap(docInfo.getSpaceId()); return i; } }