DocInfoServiceImpl.java 7.3 KB

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