DocInfoServiceImpl.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package com.doc.biz.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.doc.biz.domain.DocFavorite;
  4. import com.doc.biz.domain.DocInfo;
  5. import com.doc.biz.domain.DocumentFile;
  6. import com.doc.biz.domain.EsDocInfo;
  7. import com.doc.biz.mapper.DocInfoMapper;
  8. import com.doc.biz.service.*;
  9. import com.doc.biz.vo.DocumentVO;
  10. import com.doc.common.constant.Constants;
  11. import com.doc.common.utils.DateUtils;
  12. import com.doc.common.utils.SecurityUtils;
  13. import com.doc.common.utils.StringUtils;
  14. import org.springframework.stereotype.Service;
  15. import javax.annotation.Resource;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Optional;
  19. /**
  20. * 文件基本信息表Service业务层处理
  21. *
  22. * @author wukai
  23. * @date 2023-08-15
  24. */
  25. @Service
  26. public class DocInfoServiceImpl implements IDocInfoService {
  27. @Resource
  28. private DocInfoMapper docInfoMapper;
  29. @Resource
  30. private IElasticSearchService elasticSearchService;
  31. @Resource
  32. private IDocSpaceService spaceService;
  33. @Resource
  34. private IDocFavoriteService favoriteService;
  35. @Resource
  36. private IDocDirService dirService;
  37. @Resource
  38. private IMongoService mongoService;
  39. /**
  40. * 查询文件基本信息表
  41. *
  42. * @param docId 文件基本信息表主键
  43. * @return 文件基本信息表
  44. */
  45. @Override
  46. public DocInfo selectDocInfoByDocId(Long docId) {
  47. DocInfo info = docInfoMapper.selectDocInfoByDocId(docId);
  48. if (info != null) {
  49. String unloading = "l0400";
  50. //是否允许转存
  51. info.setUnloading(dirService.hasRole(info.getDirId(), unloading));
  52. }
  53. return info;
  54. }
  55. /**
  56. * 通过fileID查询文件基本信息
  57. *
  58. * @param fileId mongo文件ID
  59. */
  60. @Override
  61. public DocInfo selectDocInfoByFileId(String fileId) {
  62. return docInfoMapper.selectDocInfoByFileId(fileId);
  63. }
  64. /**
  65. * only office更新文件内容
  66. *
  67. * @param info 文件信息
  68. */
  69. @Override
  70. public void updateDocInfoByOnlyOffice(DocInfo info) {
  71. info.setUpdateTime(DateUtils.getNowDate());
  72. docInfoMapper.updateDocInfo(info);
  73. if (StringUtils.isNotEmpty(info.getFileId())) {
  74. elasticSearchService.save(info);
  75. }
  76. }
  77. /**
  78. * 文件上传之后的操作
  79. *
  80. * @param vo 上传对象
  81. * @param spaceId 空间ID
  82. * @param dirId 目录ID
  83. * @return 对象
  84. */
  85. @Override
  86. public DocInfo upload(DocumentVO vo, Long spaceId, Long dirId) {
  87. DocInfo docInfo = new DocInfo();
  88. docInfo.setSpaceId(spaceId);
  89. docInfo.setDirId(dirId);
  90. docInfo.setFileId(vo.getFileId());
  91. docInfo.setFileName(vo.getFileName());
  92. docInfo.setFileSize(vo.getFileSize());
  93. docInfo.setFileType(vo.getSuffix());
  94. docInfo.setCreateBy(SecurityUtils.getUsername());
  95. insertDocInfo(docInfo);
  96. return docInfo;
  97. }
  98. /**
  99. * 查询文件基本信息表列表
  100. *
  101. * @param docInfo 文件基本信息表
  102. * @return 文件基本信息表
  103. */
  104. @Override
  105. public List<DocInfo> selectDocInfoList(DocInfo docInfo) {
  106. List<DocInfo> list = docInfoMapper.selectDocInfoList(docInfo);
  107. List<Long> favorites = new ArrayList<>();
  108. DocFavorite favorite = new DocFavorite();
  109. favorite.setOwner(SecurityUtils.getUserId());
  110. favorite.setIsFolder("N");
  111. favoriteService.selectDocFavoriteList(favorite).forEach(f -> {
  112. favorites.add(f.getRelaId());
  113. });
  114. list.forEach(i -> {
  115. if (favorites.contains(i.getDocId())) {
  116. i.setIsFavorite("Y");
  117. } else {
  118. i.setIsFavorite("N");
  119. }
  120. });
  121. return list;
  122. }
  123. /**
  124. * 新增文件基本信息表
  125. *
  126. * @param docInfo 文件基本信息表
  127. * @return 结果
  128. */
  129. @Override
  130. public int insertDocInfo(DocInfo docInfo) {
  131. docInfo.setCreateTime(DateUtils.getNowDate());
  132. checkDuplicateNames(docInfo);
  133. int i = docInfoMapper.insertDocInfo(docInfo);
  134. String fileType = docInfo.getFileType().toLowerCase();
  135. if (docInfo.getFileSize() > 0 && Constants.ES_EXTENSION.contains(fileType)) {
  136. //文件不为空,且可以解析的文件后缀名
  137. String allowSearch = "l0300";
  138. if (dirService.hasRole(docInfo.getDirId(), allowSearch)) {
  139. //只有允许全文搜索的才会存入ES库,否则不存入
  140. elasticSearchService.save(docInfo);
  141. }
  142. }
  143. //改变空间容量
  144. spaceService.changeUsedCap(docInfo.getSpaceId(), docInfo.getFileSize());
  145. return i;
  146. }
  147. /**
  148. * 检查重名
  149. *
  150. * @param docInfo 文件信息
  151. */
  152. private void checkDuplicateNames(DocInfo docInfo) {
  153. DocInfo query = new DocInfo();
  154. query.setDirId(docInfo.getDirId());
  155. query.setFileName(docInfo.getFileName());
  156. List<DocInfo> list = selectDocInfoList(query);
  157. if (list.size() > 0 && !list.get(0).getDocId().equals(docInfo.getDocId())) {
  158. String fileName = docInfo.getFileName();
  159. fileName = fileName + "-" + DateUtils.dateTimeNow();
  160. docInfo.setFileName(fileName);
  161. }
  162. }
  163. /**
  164. * 修改文件基本信息表
  165. *
  166. * @param docInfo 文件基本信息表
  167. * @return 结果
  168. */
  169. @Override
  170. public int updateDocInfo(DocInfo docInfo) {
  171. checkDuplicateNames(docInfo);
  172. docInfo.setUpdateTime(DateUtils.getNowDate());
  173. return docInfoMapper.updateDocInfo(docInfo);
  174. }
  175. /**
  176. * 批量删除文件基本信息表
  177. *
  178. * @param docIds 需要删除的文件基本信息表主键
  179. * @return 结果
  180. */
  181. @Override
  182. public int deleteDocInfoByDocIds(Long[] docIds) {
  183. int i = 1;
  184. for (Long docId : docIds) {
  185. i = i & deleteDocInfoByDocId(docId);
  186. }
  187. return 1;
  188. }
  189. /**
  190. * 删除文件基本信息表信息
  191. *
  192. * @param docId 文件基本信息表主键
  193. * @return 结果
  194. */
  195. @Override
  196. public int deleteDocInfoByDocId(Long docId) {
  197. DocInfo docInfo = selectDocInfoByDocId(docId);
  198. int i = docInfoMapper.deleteDocInfoByDocId(docId);
  199. //改变空间容量
  200. spaceService.changeUsedCap(docInfo.getSpaceId(), 0 - docInfo.getFileSize());
  201. return i;
  202. }
  203. /**
  204. * 查询已失效的文件
  205. *
  206. * @return 失效文件列表
  207. */
  208. @Override
  209. public List<DocInfo> selectLoseList() {
  210. List<DocInfo> list = docInfoMapper.selectDocInfoList(new DocInfo());
  211. List<DocInfo> result = new ArrayList<>();
  212. list.forEach(info -> {
  213. Optional<DocumentFile> optional = mongoService.findByFileId(info.getFileId());
  214. if (!optional.isPresent()) {
  215. EsDocInfo esDocInfo = elasticSearchService.getEsDocInfo(info.getDocId());
  216. if (esDocInfo != null) {
  217. info.setRemark(esDocInfo.getContent());
  218. }
  219. result.add(info);
  220. }
  221. });
  222. return result;
  223. }
  224. /**
  225. * 根据目录ID查询文件数量
  226. *
  227. * @param dirId 目录ID
  228. * @return 文件数量
  229. */
  230. @Override
  231. public Long selectCountList(Long dirId) {
  232. QueryWrapper<DocInfo> wrapper = new QueryWrapper();
  233. wrapper.eq("dir_id", dirId);
  234. return docInfoMapper.selectCount(wrapper);
  235. }
  236. }