|
@@ -1,10 +1,28 @@
|
|
|
package org.jeecg.modules.wps.service.impl;
|
|
|
|
|
|
+import cn.com.ctop.common.module.utils.ResultMapUtils;
|
|
|
+import cn.com.ctop.common.module.utils.StatusCode;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import org.jeecg.modules.wps.dao.WpsFileMapper;
|
|
|
-import org.jeecg.modules.wps.entity.WpsFile;
|
|
|
-import org.jeecg.modules.wps.service.IWpsFileService;
|
|
|
+import com.github.pagehelper.PageHelper;
|
|
|
+import com.github.pagehelper.PageInfo;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jeecg.modules.wps.config.Context;
|
|
|
+import org.jeecg.modules.wps.dto.*;
|
|
|
+import org.jeecg.modules.wps.entity.*;
|
|
|
+import org.jeecg.modules.wps.mapper.WpsFileMapper;
|
|
|
+import org.jeecg.modules.wps.service.*;
|
|
|
+import org.jeecg.modules.wps.util.Token;
|
|
|
+import org.jeecg.modules.wps.util.WpsUtil;
|
|
|
+import org.jeecg.modules.wps.util.file.FileUtil;
|
|
|
+import org.jeecg.modules.wps.util.upload.ResFileDTO;
|
|
|
+import org.jeecg.modules.wps.util.upload.oss.WpsOSSUtil;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* wps文件
|
|
@@ -12,7 +30,363 @@ import org.springframework.stereotype.Service;
|
|
|
* @date 2020-06-01
|
|
|
* @version V1.0
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class WpsFileServiceImpl extends ServiceImpl<WpsFileMapper, WpsFile> implements IWpsFileService {
|
|
|
+ @Autowired
|
|
|
+ private IWpsUserAclService wpsUserAclService;
|
|
|
+ @Autowired
|
|
|
+ private IWpsFileWatermarkService wpsFileWatermarkService;
|
|
|
+ @Autowired
|
|
|
+ private IWpsFileVersionService wpsFileVersionService;
|
|
|
+ @Autowired
|
|
|
+ private IWpsUserService wpsUserService;
|
|
|
+ @Autowired
|
|
|
+ private WpsUtil wpsUtil;
|
|
|
+ @Override
|
|
|
+ public Token getViewUrl(String fileUrl, boolean checkToken){
|
|
|
+ Token t = new Token();
|
|
|
+
|
|
|
+ String fileType = FileUtil.getFileTypeByPath(fileUrl);
|
|
|
+ // fileId使用uuid保证出现同样的文件而是最新文件
|
|
|
+ UUID randomUUID = UUID.randomUUID();
|
|
|
+ String uuid = randomUUID.toString().replace("-","");
|
|
|
+
|
|
|
+ Map<String,String> values = new HashMap<String,String>(){
|
|
|
+ {
|
|
|
+ put("_w_appid", appid);
|
|
|
+ if (checkToken){
|
|
|
+ put("_w_tokentype","1");
|
|
|
+ }
|
|
|
+ put("_w_userid", "-1");
|
|
|
+ put("_w_filepath",fileUrl);
|
|
|
+ put("_w_filetype","web");
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ String wpsUrl = wpsUtil.getWpsUrl(values,fileType,uuid);
|
|
|
+
|
|
|
+ t.setToken(uuid);
|
|
|
+ t.setExpires_in(600);
|
|
|
+ t.setWpsUrl(wpsUrl);
|
|
|
+
|
|
|
+ return t;
|
|
|
+ }
|
|
|
+ @Value("wps.domain")
|
|
|
+ private String domain;
|
|
|
+ @Value("wps.appid")
|
|
|
+ private String appid;
|
|
|
+ @Value("wps.appsecret")
|
|
|
+ private String appsecret;
|
|
|
+ @Value("wps.download_host")
|
|
|
+ private String downloadHost;
|
|
|
+ @Value("wps.local_Dir")
|
|
|
+ private String localDir;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Token getViewUrl(String fileId,String userId,boolean checkToken){
|
|
|
+ WpsFile fileEntity = this.getById(fileId);
|
|
|
+ if (fileEntity != null){
|
|
|
+ Token t = new Token();
|
|
|
+ String fileName = fileEntity.getName();
|
|
|
+ String fileType = FileUtil.getFileTypeByName(fileName);
|
|
|
+
|
|
|
+ UUID randomUuid = UUID.randomUUID();
|
|
|
+ String uuid = randomUuid.toString().replace("-","");
|
|
|
+
|
|
|
+ Map<String,String> values = new HashMap<>();
|
|
|
+ values.put("_w_appid", appid);
|
|
|
+ if (checkToken){
|
|
|
+ values.put("_w_tokentype","1");
|
|
|
+ }
|
|
|
+ values.put("_w_filepath",fileName);
|
|
|
+ values.put("_w_userid", userId);
|
|
|
+ values.put("_w_filetype","db");
|
|
|
+
|
|
|
+ String wpsUrl = wpsUtil.getWpsUrl(values,fileType,fileEntity.getId());
|
|
|
+ t.setToken(uuid);
|
|
|
+ t.setExpires_in(600);
|
|
|
+ t.setWpsUrl(wpsUrl);
|
|
|
+
|
|
|
+ return t;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> getFileInfo(String userId, String filePath,String _w_filetype){
|
|
|
+ if ("web".equalsIgnoreCase(_w_filetype)){
|
|
|
+ return getWebFileInfo(filePath);
|
|
|
+ }else if ("db".equalsIgnoreCase(_w_filetype)){
|
|
|
+ return getDbFileInfo(userId);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,Object> getWebFileInfo(String filePath){
|
|
|
+ Map<String,Object>result = new HashMap<>();
|
|
|
+ log.info("_w_filepath:{}",filePath);
|
|
|
+ // 构建默认user信息
|
|
|
+ UserDTO wpsUser = new UserDTO(
|
|
|
+ "-1","我","read","https://zmfiletest.oss-cn-hangzhou.aliyuncs.com/user0.png"
|
|
|
+ );
|
|
|
+
|
|
|
+ // 构建文件
|
|
|
+ FileDTO file = new FileDTO(
|
|
|
+ Context.getFileId(), FileUtil.getFileName(filePath),
|
|
|
+ 1,2835,"-1",System.currentTimeMillis(), filePath,
|
|
|
+ // 默认设置为无水印,只读权限
|
|
|
+ new UserAclBO(),new WatermarkBO()
|
|
|
+ );
|
|
|
+ result.put("file",file);
|
|
|
+ result.put("user",wpsUser);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,Object> getDbFileInfo(String userId){
|
|
|
+ String fileId = Context.getFileId();
|
|
|
+ // 获取文件信息
|
|
|
+ WpsFile fileEntity = this.getById(fileId);
|
|
|
+
|
|
|
+ // 初始化文件读写权限为read
|
|
|
+ String permission = "read";
|
|
|
+
|
|
|
+ // 增加用户权限
|
|
|
+ WpsUserAcl userAclEntity = wpsUserAclService.findFirstByFileIdAndUserId(fileId,userId);
|
|
|
+ UserAclBO userAcl = new UserAclBO();
|
|
|
+ if (userAclEntity != null){
|
|
|
+ BeanUtils.copyProperties(userAclEntity,userAcl);
|
|
|
+ permission = userAclEntity.getPermission();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 增加水印
|
|
|
+ WpsFileWatermark watermarkEntity = wpsFileWatermarkService.findFirstByFileId(fileId);
|
|
|
+ WatermarkBO watermark = new WatermarkBO();
|
|
|
+ if (watermarkEntity != null){
|
|
|
+ BeanUtils.copyProperties(watermarkEntity,watermark);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取user
|
|
|
+ WpsUser wpsUser = wpsUserService.getById(userId);
|
|
|
+ UserDTO user = new UserDTO();
|
|
|
+ if (wpsUser != null){
|
|
|
+ BeanUtils.copyProperties(wpsUser,user);
|
|
|
+ user.setPermission(permission);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建fileInfo
|
|
|
+ FileDTO file = new FileDTO();
|
|
|
+ BeanUtils.copyProperties(fileEntity,file);
|
|
|
+ file.setUser_acl(userAcl);
|
|
|
+ file.setWatermark(watermark);
|
|
|
+
|
|
|
+ return new HashMap<String, Object>(){
|
|
|
+ {
|
|
|
+ put("file", file);
|
|
|
+ put("user", user);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void fileRename(String fileName, String userId){
|
|
|
+ String fileId = Context.getFileId();
|
|
|
+ WpsFile file = this.getById(fileId);
|
|
|
+ if (file != null){
|
|
|
+ file.setName(fileName);
|
|
|
+ file.setModifier(userId);
|
|
|
+ Date date = new Date();
|
|
|
+ file.setModifyTime(date.getTime());
|
|
|
+ this.updateById(file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> fileNew(MultipartFile file, String userId){
|
|
|
+ ResFileDTO resFileDTO = WpsOSSUtil.uploadMultipartFile(file);
|
|
|
+
|
|
|
+ String fileName = resFileDTO.getFileName();
|
|
|
+ String fileUrl = resFileDTO.getFileUrl();
|
|
|
+ int fileSize = (int) file.getSize();
|
|
|
+ Date date = new Date();
|
|
|
+ long dataTime = date.getTime();
|
|
|
+ // 保存文件
|
|
|
+ WpsFile f = new WpsFile(fileName,1,fileSize,userId,userId,dataTime,dataTime,fileUrl);
|
|
|
+ this.save(f);
|
|
|
+
|
|
|
+ // 处理权限
|
|
|
+ wpsUserAclService.saveUserFileAcl(userId,f.getId());
|
|
|
+
|
|
|
+ // 处理水印
|
|
|
+ wpsFileWatermarkService.saveWatermark(f.getId());
|
|
|
+
|
|
|
+ // 处理返回
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("redirect_url",this.getViewUrl(f.getId(),userId,false).getWpsUrl());
|
|
|
+ map.put("user_id",userId);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> fileHistory(FileReqDTO req){
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ List<FileHisDTO> result = new ArrayList<>(12);
|
|
|
+ if (req.getId() == null){
|
|
|
+ map.put("histories",result);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ // 目前先实现获取所有的历史记录
|
|
|
+ List<WpsFileVersion> versionList = wpsFileVersionService.findByFileIdOrderByVersionDesc(req.getId());
|
|
|
+ if (versionList == null || versionList.isEmpty()){
|
|
|
+ map.put("histories",result);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ Set<String> userIdSet = new HashSet<>();
|
|
|
+ for (WpsFileVersion fileVersion : versionList){
|
|
|
+ userIdSet.add(fileVersion.getModifier());
|
|
|
+ userIdSet.add(fileVersion.getCreator());
|
|
|
+ }
|
|
|
+ List<String> userIdList = new ArrayList<>(userIdSet);
|
|
|
+ // 获取所有关联的人
|
|
|
+ List<WpsUser> userList = wpsUserService.findByIdIn(userIdList);
|
|
|
+ if (userList == null || userList.isEmpty()){
|
|
|
+ map.put("histories",result);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ for (WpsFileVersion fileVersion : versionList){
|
|
|
+ FileHisDTO fileHis = new FileHisDTO();
|
|
|
+ BeanUtils.copyProperties(fileVersion,fileHis);
|
|
|
+ fileHis.setId(fileVersion.getFileId());
|
|
|
+ UserDTO creator = new UserDTO();
|
|
|
+ UserDTO modifier = new UserDTO();
|
|
|
+ for (WpsUser user : userList){
|
|
|
+ if (user.getId().equals(fileVersion.getCreator())){
|
|
|
+ BeanUtils.copyProperties(user,creator);
|
|
|
+ }
|
|
|
+ if (user.getId().equals(fileVersion.getModifier())){
|
|
|
+ BeanUtils.copyProperties(user,modifier);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fileHis.setModifier(modifier);
|
|
|
+ fileHis.setCreator(creator);
|
|
|
+ result.add(fileHis);
|
|
|
+ }
|
|
|
+ map.put("histories",result);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> fileSave(MultipartFile mFile,String userId){
|
|
|
+ Date date = new Date();
|
|
|
+ // 上传
|
|
|
+ ResFileDTO resFileDTO = WpsOSSUtil.uploadMultipartFile(mFile);
|
|
|
+ int size = (int) resFileDTO.getFileSize();
|
|
|
+
|
|
|
+ String fileId = Context.getFileId();
|
|
|
+ WpsFile file = this.getById(fileId);
|
|
|
+ FileDTO fileInfo = new FileDTO();
|
|
|
+
|
|
|
+ String oldFileUrl = file.getDownloadUrl();
|
|
|
+
|
|
|
+ // 更新当前版本
|
|
|
+ file.setVersion(file.getVersion() + 1);
|
|
|
+ file.setDownloadUrl(resFileDTO.getFileUrl());
|
|
|
+ file.setModifier(userId);
|
|
|
+ file.setModifyTime(date.getTime());
|
|
|
+ file.setSize(size);
|
|
|
+ this.updateById(file);
|
|
|
+
|
|
|
+ // 保存历史版本
|
|
|
+ WpsFileVersion fileVersion = new WpsFileVersion();
|
|
|
+ BeanUtils.copyProperties(file,fileVersion);
|
|
|
+ fileVersion.setFileId(fileId);
|
|
|
+ fileVersion.setVersion(file.getVersion() - 1);
|
|
|
+ fileVersion.setDownloadUrl(oldFileUrl);
|
|
|
+ fileVersion.setSize(size);
|
|
|
+ wpsFileVersionService.save(fileVersion);
|
|
|
+
|
|
|
+ // 返回当前版本信息
|
|
|
+ BeanUtils.copyProperties(file,fileInfo);
|
|
|
+
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("file",fileInfo);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> fileVersion(Integer version){
|
|
|
+ FileDTO fileInfo = new FileDTO();
|
|
|
+ String fileId = Context.getFileId();
|
|
|
+ WpsFileVersion fileVersion =
|
|
|
+ wpsFileVersionService.findByFileIdAndVersion(fileId,version);
|
|
|
+ if (fileVersion != null){
|
|
|
+ BeanUtils.copyProperties(fileVersion,fileInfo);
|
|
|
+ fileInfo.setId(fileVersion.getFileId());
|
|
|
+ }
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("file",fileInfo);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ @Autowired
|
|
|
+ private WpsFileMapper wpsFileMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<FileListDTO> getFileList(){
|
|
|
+ return wpsFileMapper.findAllFile();
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> getFileListByPage(int pageNum, int pageSize){
|
|
|
+ Map<String,Object>result = new HashMap<>();
|
|
|
+ PageHelper.startPage(pageNum,pageSize);
|
|
|
+ List<FileListDTO> fileListDTOS = wpsFileMapper.getAllFileByPage();
|
|
|
+ PageInfo<FileListDTO> pageInfo = new PageInfo<>(fileListDTOS);
|
|
|
+ result.put("data",pageInfo);
|
|
|
+ ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int delFile(String id){
|
|
|
+ WpsFile file = this.getById(id);
|
|
|
+ if (file != null){
|
|
|
+ if ("Y".equalsIgnoreCase(file.getCanDelete())){
|
|
|
+ // del
|
|
|
+ this.removeById(id);
|
|
|
+ return 1;
|
|
|
+ }else {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void uploadFile(MultipartFile file){
|
|
|
+ String uploadUserId = "3";
|
|
|
+ ResFileDTO resFileDTO = WpsOSSUtil.uploadMultipartFile(file);
|
|
|
+ // 上传成功后,处理数据库记录值
|
|
|
+ Date date = new Date();
|
|
|
+ long dataTime = date.getTime();
|
|
|
+ // 保存文件
|
|
|
+ WpsFile f = new WpsFile(resFileDTO.getFileName(),1,((int) resFileDTO.getFileSize()),
|
|
|
+ uploadUserId,uploadUserId,dataTime,dataTime, resFileDTO.getFileUrl());
|
|
|
+ this.save(f);
|
|
|
+
|
|
|
+ // 处理权限
|
|
|
+ wpsUserAclService.saveUserFileAcl(uploadUserId,f.getId());
|
|
|
+
|
|
|
+ // 处理水印
|
|
|
+ wpsFileWatermarkService.saveWatermark(f.getId());
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public String createTemplateFile(String template){
|
|
|
+ boolean typeTrue = FileUtil.checkCode(template);
|
|
|
+ if (typeTrue){
|
|
|
+ return wpsUtil.getTemplateWpsUrl(template,"3");
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
}
|