Browse Source

feat: read file

Blizzard 1 year ago
parent
commit
d3777e5773

+ 7 - 0
blade-service-api/wt-okr-api/pom.xml

@@ -13,4 +13,11 @@
 
     <name>wt-okr-api</name>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-user-api</artifactId>
+            <version>2.9.1.RELEASE</version>
+        </dependency>
+    </dependencies>
 </project>

+ 27 - 0
blade-service-api/wt-okr-api/src/main/java/com/wtkj/entity/FileRead.java

@@ -0,0 +1,27 @@
+package com.wtkj.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * @author Blizzard
+ * @create at 2023-09-15 11:09
+ * @describe
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("blade_file_read")
+public class FileRead extends BaseEntity {
+
+	@TableField("file_id")
+	@ApiModelProperty(value = "文件主键id")
+	private Long fileId;
+
+	@TableField("user_id")
+	@ApiModelProperty(value = "用户id")
+	private Long userId;
+}

+ 5 - 0
blade-service-api/wt-okr-api/src/main/java/com/wtkj/vo/FileAndFolderVO.java

@@ -4,6 +4,9 @@ import com.wtkj.entity.FileAndFolder;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.system.user.entity.User;
+
+import java.util.Set;
 
 /**
  * @author Blizzard
@@ -28,4 +31,6 @@ public class FileAndFolderVO extends FileAndFolder {
 	private String volume;
 
 	private String url;
+
+	private Set<User> readUsers;
 }

+ 0 - 5
blade-service/wt-okr/pom.xml

@@ -30,11 +30,6 @@
             <artifactId>wt-okr-api</artifactId>
             <version>1.0.RELEASE</version>
         </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-user-api</artifactId>
-            <version>2.9.1.RELEASE</version>
-        </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-system-api</artifactId>

+ 25 - 0
blade-service/wt-okr/src/main/java/com/wtkj/controller/FileAndFolderController.java

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.wtkj.dto.UploadFileDTO;
 import com.wtkj.entity.FileAndFolder;
+import com.wtkj.entity.FileRead;
 import com.wtkj.service.ICommonService;
 import com.wtkj.service.IFileAndFolderService;
+import com.wtkj.service.IFileReadService;
 import com.wtkj.vo.FileAndFolderVO;
 import com.wtkj.wrapper.FileAndFolderWrapper;
 import io.swagger.annotations.Api;
@@ -42,6 +44,8 @@ public class FileAndFolderController {
 
 	private final ICommonService commonService;
 
+	private final IFileReadService fileReadService;
+
 
 	/**
 	 * 新建文件夹
@@ -149,5 +153,26 @@ public class FileAndFolderController {
 		return R.status(commonService.move(ids, stageId, parentId));
 	}
 
+	/**
+	 * 文件详情
+	 */
+	@GetMapping("/file-detail")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "阅读文件", notes = "")
+	public R<FileAndFolderVO> detail(@RequestParam Long id) {
+		FileAndFolder byId = fileAndFolderService.getById(id);
+		return R.data(FileAndFolderWrapper.build().entityVO(byId));
+	}
+
+	/**
+	 * 阅读文件
+	 */
+	@PostMapping("/read-file")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "阅读文件", notes = "")
+	public R<Boolean> readFile(@RequestBody FileRead read) {
+		return R.status(fileReadService.readFile(read));
+	}
+
 
 }

+ 15 - 0
blade-service/wt-okr/src/main/java/com/wtkj/mapper/FileReadMapper.java

@@ -0,0 +1,15 @@
+package com.wtkj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.wtkj.entity.FileRead;
+
+import java.util.List;
+
+/**
+ * @author Blizzard
+ * @create at 2023-09-15 11:13
+ * @describe
+ */
+public interface FileReadMapper extends BaseMapper<FileRead> {
+	List<Long> getReadUser(Long fileId);
+}

+ 8 - 0
blade-service/wt-okr/src/main/java/com/wtkj/mapper/FileReadMapper.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.wtkj.mapper.FileReadMapper">
+
+    <select id="getReadUser" resultType="java.lang.Long">
+        select user_id from blade_file_read where is_deleted = 0 and file_id = #{param}
+    </select>
+</mapper>

+ 17 - 0
blade-service/wt-okr/src/main/java/com/wtkj/service/IFileReadService.java

@@ -0,0 +1,17 @@
+package com.wtkj.service;
+
+import com.wtkj.entity.FileRead;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * @author Blizzard
+ * @create at 2023-09-15 11:14
+ * @describe
+ */
+public interface IFileReadService extends BaseService<FileRead> {
+	boolean readFile(FileRead read);
+
+	List<Long> getReadUser(Long fileId);
+}

+ 29 - 0
blade-service/wt-okr/src/main/java/com/wtkj/service/impl/FileReadServiceImpl.java

@@ -0,0 +1,29 @@
+package com.wtkj.service.impl;
+
+import com.wtkj.entity.FileRead;
+import com.wtkj.mapper.FileReadMapper;
+import com.wtkj.service.IFileReadService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author Blizzard
+ * @create at 2023-09-15 11:15
+ * @describe
+ */
+@Service
+@AllArgsConstructor
+public class FileReadServiceImpl extends BaseServiceImpl<FileReadMapper, FileRead> implements IFileReadService {
+	@Override
+	public boolean readFile(FileRead read) {
+		return save(read);
+	}
+
+	@Override
+	public List<Long> getReadUser(Long fileId) {
+		return baseMapper.getReadUser(fileId);
+	}
+}

+ 14 - 0
blade-service/wt-okr/src/main/java/com/wtkj/wrapper/FileAndFolderWrapper.java

@@ -2,6 +2,7 @@ package com.wtkj.wrapper;
 
 import com.wtkj.entity.FileAndFolder;
 import com.wtkj.service.IFileAndFolderService;
+import com.wtkj.service.IFileReadService;
 import com.wtkj.vo.FileAndFolderVO;
 import com.wutong.file.feign.IFileClient;
 import com.wutong.file.vo.FileVO;
@@ -14,8 +15,12 @@ import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.util.CollectionUtils;
 
+import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import static com.wtkj.config.MagicValue.ONE;
 import static com.wtkj.config.MagicValue.TWO;
@@ -32,11 +37,14 @@ public class FileAndFolderWrapper extends BaseEntityWrapper<FileAndFolder, FileA
 	private static IFileAndFolderService fileAndFolderService;
 	private static IFileClient fileClient;
 
+	private static IFileReadService fileReadService;
+
 	public static FileAndFolderWrapper build() {
 		userClient = SpringUtil.getBean(IUserClient.class);
 		sysClient = SpringUtil.getBean(ISysClient.class);
 		fileAndFolderService = SpringUtil.getBean(IFileAndFolderService.class);
 		fileClient = SpringUtil.getBean(IFileClient.class);
+		fileReadService = SpringUtil.getBean(IFileReadService.class);
 		return new FileAndFolderWrapper();
 	}
 
@@ -65,6 +73,12 @@ public class FileAndFolderWrapper extends BaseEntityWrapper<FileAndFolder, FileA
 				vo.setVolume(rpc.getData().getVolume());
 				vo.setUrl(rpc.getData().getFilePath());
 			}
+			//文件阅读人
+			List<Long> userIds = fileReadService.getReadUser(vo.getId());
+			if (!CollectionUtils.isEmpty(userIds)) {
+				Set<User> users = userIds.stream().map(m -> userClient.userInfoById(m)).filter(userR1 -> userR1.isSuccess()).map(R::getData).collect(Collectors.toSet());
+				vo.setReadUsers(users);
+			}
 		}
 		//权限
 		Integer isPrivate = vo.getIsPrivate();