Browse Source

处理文件分享

wukai 2 years ago
parent
commit
e5750af391

+ 20 - 1
doc-biz/src/main/java/com/doc/biz/controller/DocDirController.java

@@ -43,6 +43,25 @@ public class DocDirController extends BaseController {
     private IDocDirUserService dirUserService;
 
     /**
+     * 获取顶层目录
+     */
+    @ApiOperation("获取顶层目录")
+    @GetMapping(value = "/top-dir/{type}")
+    public DocDir topDir(@ApiParam(value = "目录类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type) {
+        DocSpace space = spaceService.selectDocSpaceByType(type);
+
+        DocDir dir = new DocDir();
+        dir.setSpaceId(space.getSpaceId());
+        dir.setParentId(0L);
+        List<DocDir> dirList = docDirService.selectDocDirList(dir);
+        if (dirList.size() > 0) {
+            return dirList.get(0);
+        } else {
+            return null;
+        }
+    }
+
+    /**
      * 获取目录树
      */
     @ApiOperation("目录树")
@@ -68,7 +87,7 @@ public class DocDirController extends BaseController {
      * @return
      */
     private TreeVO tree(String type, boolean fileTree) {
-        DocSpace space = spaceService.selectDocSpaceList(type);
+        DocSpace space = spaceService.selectDocSpaceByType(type);
         DocDir docDir = new DocDir();
         docDir.setSpaceId(space.getSpaceId());
         docDir.setParentId(0L);

+ 40 - 1
doc-biz/src/main/java/com/doc/biz/controller/DocInfoController.java

@@ -1,11 +1,14 @@
 package com.doc.biz.controller;
 
 import com.doc.biz.domain.DocInfo;
+import com.doc.biz.domain.DocShare;
 import com.doc.biz.domain.EsDocInfo;
 import com.doc.biz.service.IDocInfoService;
+import com.doc.biz.service.IDocShareService;
 import com.doc.biz.service.IEsDocInfoService;
 import com.doc.biz.service.IMongoService;
 import com.doc.biz.vo.DocumentVO;
+import com.doc.chat.domain.ChatMsg;
 import com.doc.common.annotation.Log;
 import com.doc.common.config.EsConfig;
 import com.doc.common.core.controller.BaseController;
@@ -15,6 +18,7 @@ import com.doc.common.enums.BusinessType;
 import com.doc.common.utils.FileContentUtils;
 import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.poi.ExcelUtil;
+import com.doc.system.service.ISysConfigService;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.elasticsearch.NoSuchIndexException;
@@ -52,6 +56,10 @@ public class DocInfoController extends BaseController {
     private IEsDocInfoService esDocInfoService;
     @Resource
     private EsConfig esConfig;
+    @Resource
+    private IDocShareService shareService;
+    @Resource
+    private ISysConfigService configService;
 
     /**
      * 文件上传
@@ -193,13 +201,44 @@ public class DocInfoController extends BaseController {
         info.setDocId(null);
         info.setSpaceId(spaceId);
         info.setDirId(dirId);
-
         docInfoService.insertDocInfo(info);
 
         return success();
     }
 
     /**
+     * 文件分享
+     */
+    @ApiOperation("文件分享获取详情")
+    @GetMapping("/share/{docId}")
+    public List<DocShare> shareInfo(@ApiParam(value = "文件ID", required = true) @PathVariable(name = "docId") Long docId) {
+        return shareService.selectDocShareListByDocId(docId);
+    }
+
+    /**
+     * 文件分享
+     */
+    @ApiOperation("文件分享添加人员")
+    @PostMapping("/share/{docId}")
+    public AjaxResult share(@ApiParam(value = "文件ID", required = true) @PathVariable(name = "docId") Long docId, @ApiParam(value = "分享人员", required = true) @RequestBody List<DocShare> shares) {
+        DocInfo info = docInfoService.selectDocInfoByDocId(docId);
+        shareService.deleteDocShareByDocId(docId);
+
+        String content = configService.selectConfigByKey("msg.share.content");
+        String finalContent = content.replace("{from}", SecurityUtils.getLoginUser().getUser().getNickName()).replace("{file}", info.getFileName());
+        shares.forEach(s -> {
+            s.setDocId(docId);
+            ChatMsg msg = new ChatMsg();
+            msg.setToId(s.getUserId());
+            msg.setContent(finalContent);
+            msg.setFromId(SecurityUtils.getUserId());
+            shareService.insertDocShare(s);
+        });
+
+        return success();
+    }
+
+    /**
      * 复制文件
      */
     @ApiOperation("文件重命名")

+ 3 - 4
doc-biz/src/main/java/com/doc/biz/controller/DocSpaceController.java

@@ -7,7 +7,6 @@ import com.doc.common.core.controller.BaseController;
 import com.doc.common.core.domain.AjaxResult;
 import com.doc.common.core.page.TableDataInfo;
 import com.doc.common.enums.BusinessType;
-import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.poi.ExcelUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,7 +38,7 @@ public class DocSpaceController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo list(DocSpace docSpace) {
         startPage();
-        List<DocSpace> list = docSpaceService.selectDocSpaceList(docSpace);
+        List<DocSpace> list = docSpaceService.selectDocSpaceByType(docSpace);
         return getDataTable(list);
     }
 
@@ -51,7 +50,7 @@ public class DocSpaceController extends BaseController {
     @Log(title = "文档空间管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, DocSpace docSpace) {
-        List<DocSpace> list = docSpaceService.selectDocSpaceList(docSpace);
+        List<DocSpace> list = docSpaceService.selectDocSpaceByType(docSpace);
         ExcelUtil<DocSpace> util = new ExcelUtil<DocSpace>(DocSpace.class);
         util.exportExcel(response, list, "文档空间管理数据");
     }
@@ -72,7 +71,7 @@ public class DocSpaceController extends BaseController {
     @ApiOperation("获取空间信息")
     @GetMapping(value = "/info/{type}")
     public AjaxResult spaceType(@ApiParam(value = "空间类型(1.公共 2.部门 3.个人)", required = true) @PathVariable("type") String type) {
-        return success(docSpaceService.selectDocSpaceList(type));
+        return success(docSpaceService.selectDocSpaceByType(type));
     }
 
     /**

+ 1 - 1
doc-biz/src/main/java/com/doc/biz/controller/ElasticSearchController.java

@@ -66,7 +66,7 @@ public class ElasticSearchController {
         } else if (type.equals(SpaceType.PERSONAL.getValue())) {
             space.setOwner(SecurityUtils.getUserId());
         }
-        List<DocSpace> list = docSpaceService.selectDocSpaceList(space);
+        List<DocSpace> list = docSpaceService.selectDocSpaceByType(space);
         if (list.size() > 0) {
             String indexName = "docs_" + list.get(0).getSpaceId();
             esConfig.setIndexName(indexName);

+ 15 - 0
doc-biz/src/main/java/com/doc/biz/service/IDocShareService.java

@@ -58,4 +58,19 @@ public interface IDocShareService {
      * @return 结果
      */
     public int deleteDocShareByShareId(Long shareId);
+
+    /**
+     * 根据docId查询分享信息列表
+     *
+     * @param docId docId
+     * @return 结果
+     */
+    List<DocShare> selectDocShareListByDocId(Long docId);
+
+    /**
+     * 根据docId删除
+     *
+     * @param docId docId
+     */
+    void deleteDocShareByDocId(Long docId);
 }

+ 2 - 2
doc-biz/src/main/java/com/doc/biz/service/IDocSpaceService.java

@@ -27,7 +27,7 @@ public interface IDocSpaceService {
      * @param docSpace 文档空间管理
      * @return 文档空间管理集合
      */
-    public List<DocSpace> selectDocSpaceList(DocSpace docSpace);
+    public List<DocSpace> selectDocSpaceByType(DocSpace docSpace);
 
     /**
      * 根据空间类型查询目录
@@ -35,7 +35,7 @@ public interface IDocSpaceService {
      * @param type 空间类型
      * @return 文档空间管理集合
      */
-    DocSpace selectDocSpaceList(String type);
+    DocSpace selectDocSpaceByType(String type);
 
     /**
      * 新增文档空间管理

+ 25 - 0
doc-biz/src/main/java/com/doc/biz/service/impl/DocShareServiceImpl.java

@@ -1,5 +1,6 @@
 package com.doc.biz.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.doc.biz.domain.DocShare;
 import com.doc.biz.mapper.DocShareMapper;
 import com.doc.biz.service.IDocShareService;
@@ -87,4 +88,28 @@ public class DocShareServiceImpl implements IDocShareService {
     public int deleteDocShareByShareId(Long shareId) {
         return docShareMapper.deleteDocShareByShareId(shareId);
     }
+
+    /**
+     * 根据docId查询分享信息列表
+     *
+     * @param docId docId
+     */
+    @Override
+    public List<DocShare> selectDocShareListByDocId(Long docId) {
+        DocShare share = new DocShare();
+        share.setDocId(docId);
+        return docShareMapper.selectDocShareList(share);
+    }
+
+    /**
+     * 根据docId删除
+     *
+     * @param docId docId
+     */
+    @Override
+    public void deleteDocShareByDocId(Long docId) {
+        QueryWrapper<DocShare> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("doc_id", docId);
+        docShareMapper.delete(queryWrapper);
+    }
 }

+ 4 - 5
doc-biz/src/main/java/com/doc/biz/service/impl/DocSpaceServiceImpl.java

@@ -1,6 +1,5 @@
 package com.doc.biz.service.impl;
 
-import com.doc.biz.domain.DocDir;
 import com.doc.biz.domain.DocSpace;
 import com.doc.biz.mapper.DocSpaceMapper;
 import com.doc.biz.service.IDocDirService;
@@ -50,7 +49,7 @@ public class DocSpaceServiceImpl implements IDocSpaceService {
      * @return 文档空间管理
      */
     @Override
-    public List<DocSpace> selectDocSpaceList(DocSpace docSpace) {
+    public List<DocSpace> selectDocSpaceByType(DocSpace docSpace) {
         return docSpaceMapper.selectDocSpaceList(docSpace);
     }
 
@@ -61,7 +60,7 @@ public class DocSpaceServiceImpl implements IDocSpaceService {
      * @return 文档空间管理集合
      */
     @Override
-    public DocSpace selectDocSpaceList(String type) {
+    public DocSpace selectDocSpaceByType(String type) {
         DocSpace search = new DocSpace();
         search.setSpaceType(type);
         switch (type) {
@@ -75,7 +74,7 @@ public class DocSpaceServiceImpl implements IDocSpaceService {
                 break;
             default:
         }
-        List<DocSpace> space = selectDocSpaceList(search);
+        List<DocSpace> space = selectDocSpaceByType(search);
         if (space.size() == 1) {
             return space.get(0);
         } else {
@@ -169,7 +168,7 @@ public class DocSpaceServiceImpl implements IDocSpaceService {
         space.setSpaceType(spaceType.getValue());
         space.setOwner(owner);
 
-        List<DocSpace> list = selectDocSpaceList(space);
+        List<DocSpace> list = selectDocSpaceByType(space);
         space.setSpaceName(spaceName);
         if (list.size() > 0) {
             //如果有记录,则更新空间名称

+ 1 - 10
doc-biz/src/main/java/com/doc/chat/controller/ChatMsgController.java

@@ -33,8 +33,6 @@ import java.util.List;
 public class ChatMsgController extends BaseController {
     @Resource
     private IChatMsgService chatMsgService;
-    @Resource
-    private StringRedisTemplate stringRedisTemplate;
 
     /**
      * 发送消息
@@ -45,14 +43,7 @@ public class ChatMsgController extends BaseController {
     @ApiOperation("发送消息")
     @PostMapping("/send")
     public AjaxResult send(@RequestBody ChatMsg msg) {
-        msg.setFromId(SecurityUtils.getUserId());
-        if (msg.getFromId().equals(msg.getToId())) {
-            return error("不允许给自己发送消息");
-        }
-        msg.setCreateTime(new Date());
-        stringRedisTemplate.convertAndSend(CacheConstants.CHANNEL, JSON.toJSONString(msg));
-        chatMsgService.insertChatMsg(msg);
-        return success();
+        return toAjax(chatMsgService.send(msg));
     }
 
     /**

+ 8 - 0
doc-biz/src/main/java/com/doc/chat/service/IChatMsgService.java

@@ -75,4 +75,12 @@ public interface IChatMsgService {
      * @return
      */
     List<ChatMsg> selectFriendList(Long userId);
+
+    /**
+     * 发送消息
+     *
+     * @param msg 消息对象
+     * @return 结果
+     */
+    int send(ChatMsg msg);
 }

+ 32 - 5
doc-biz/src/main/java/com/doc/chat/service/impl/ChatMsgServiceImpl.java

@@ -1,14 +1,19 @@
 package com.doc.chat.service.impl;
 
+import com.alibaba.fastjson2.JSON;
 import com.doc.chat.domain.ChatMsg;
 import com.doc.chat.mapper.ChatMsgMapper;
 import com.doc.chat.service.IChatMsgService;
+import com.doc.common.constant.CacheConstants;
 import com.doc.common.core.domain.entity.SysUser;
 import com.doc.common.utils.DateUtils;
+import com.doc.common.utils.SecurityUtils;
 import com.doc.system.service.ISysUserService;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -24,6 +29,9 @@ public class ChatMsgServiceImpl implements IChatMsgService {
     private ChatMsgMapper chatMsgMapper;
     @Resource
     private ISysUserService userService;
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
 
     /**
      * 查询聊天消息管理
@@ -130,6 +138,22 @@ public class ChatMsgServiceImpl implements IChatMsgService {
     }
 
     /**
+     * 发送消息
+     *
+     * @param msg 消息对象
+     */
+    @Override
+    public int send(ChatMsg msg) {
+        msg.setFromId(SecurityUtils.getUserId());
+        if (msg.getFromId().equals(msg.getToId())) {
+            return 0;
+        }
+        msg.setCreateTime(new Date());
+        stringRedisTemplate.convertAndSend(CacheConstants.CHANNEL, JSON.toJSONString(msg));
+        return insertChatMsg(msg);
+    }
+
+    /**
      * 设置用户信息
      *
      * @param msgList 消息列表
@@ -139,11 +163,14 @@ public class ChatMsgServiceImpl implements IChatMsgService {
         for (ChatMsg msg : msgList) {
             SysUser fromUser = userMap.get(msg.getFromId());
             SysUser toUser = userMap.get(msg.getToId());
-            msg.setFromName(fromUser.getNickName());
-            msg.setFromAvatar(fromUser.getAvatar());
-
-            msg.setToName(toUser.getNickName());
-            msg.setToAvatar(toUser.getAvatar());
+            if (fromUser != null) {
+                msg.setFromName(fromUser.getNickName());
+                msg.setFromAvatar(fromUser.getAvatar());
+            }
+            if (toUser != null) {
+                msg.setToName(toUser.getNickName());
+                msg.setToAvatar(toUser.getAvatar());
+            }
         }
     }
 

+ 35 - 21
doc-biz/src/main/resources/mapper/biz/DocShareMapper.xml

@@ -1,37 +1,49 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.doc.biz.mapper.DocShareMapper">
-    
+
     <resultMap type="DocShare" id="DocShareResult">
-        <result property="shareId"    column="SHARE_ID"    />
-        <result property="docId"    column="DOC_ID"    />
-        <result property="userId"    column="USER_ID"    />
-        <result property="userName"    column="USER_NAME"    />
-        <result property="createBy"    column="CREATE_BY"    />
-        <result property="createTime"    column="CREATE_TIME"    />
-        <result property="updateBy"    column="UPDATE_BY"    />
-        <result property="updateTime"    column="UPDATE_TIME"    />
-        <result property="remark"    column="REMARK"    />
+        <result property="shareId" column="SHARE_ID"/>
+        <result property="docId" column="DOC_ID"/>
+        <result property="userId" column="USER_ID"/>
+        <result property="userName" column="USER_NAME"/>
+        <result property="createBy" column="CREATE_BY"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="updateBy" column="UPDATE_BY"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+        <result property="remark" column="REMARK"/>
     </resultMap>
 
     <sql id="selectDocShareVo">
-        select SHARE_ID, DOC_ID, USER_ID, USER_NAME, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, REMARK from doc_share
+        select *
+        from (select a.SHARE_ID,
+                     a.DOC_ID,
+                     a.USER_ID,
+                     a.CREATE_BY,
+                     b.NICK_NAME USER_NAME,
+                     a.CREATE_TIME,
+                     a.UPDATE_BY,
+                     a.UPDATE_TIME,
+                     a.REMARK
+              from doc_share a,
+                   sys_user b
+              where a.user_id = b.user_id) t
     </sql>
 
     <select id="selectDocShareList" parameterType="DocShare" resultMap="DocShareResult">
         <include refid="selectDocShareVo"/>
-        <where>  
-            <if test="userName != null  and userName != ''"> and USER_NAME like concat('%', #{userName}, '%')</if>
+        <where>
+            <if test="userName != null  and userName != ''">and USER_NAME like concat('%', #{userName}, '%')</if>
         </where>
     </select>
-    
+
     <select id="selectDocShareByShareId" parameterType="Long" resultMap="DocShareResult">
         <include refid="selectDocShareVo"/>
         where SHARE_ID = #{shareId}
     </select>
-        
+
     <insert id="insertDocShare" parameterType="DocShare" useGeneratedKeys="true" keyProperty="shareId">
         insert into doc_share
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -43,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateBy != null">UPDATE_BY,</if>
             <if test="updateTime != null">UPDATE_TIME,</if>
             <if test="remark != null">REMARK,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="docId != null">#{docId},</if>
             <if test="userId != null">#{userId},</if>
@@ -53,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateDocShare" parameterType="DocShare">
@@ -72,11 +84,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteDocShareByShareId" parameterType="Long">
-        delete from doc_share where SHARE_ID = #{shareId}
+        delete
+        from doc_share
+        where SHARE_ID = #{shareId}
     </delete>
 
     <delete id="deleteDocShareByShareIds" parameterType="String">
-        delete from doc_share where SHARE_ID in 
+        delete from doc_share where SHARE_ID in
         <foreach item="shareId" collection="array" open="(" separator="," close=")">
             #{shareId}
         </foreach>