package com.hssx.cloudmodel.service.impl; import java.io.RandomAccessFile; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hssx.cloudmodel.constant.Constant; import com.hssx.cloudmodel.entity.*; import com.hssx.cloudmodel.entity.vo.UserVO; import com.hssx.cloudmodel.mapper.*; import com.hssx.cloudmodel.service.ProjectFileService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hssx.cloudmodel.service.ProjectOperationDynamicsService; import com.hssx.cloudmodel.util.FileUtil; import com.hssx.cloudmodel.util.HttpRespMsg; import com.hssx.cloudmodel.util.OpenOfficeService; import com.hssx.cloudmodel.util.QcloudUntil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Base64Utils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.List; import java.util.UUID; /** *

* 服务实现类 *

* * @author 吴涛涛 * @since 2019-07-30 */ @Service public class ProjectFileServiceImpl extends ServiceImpl implements ProjectFileService { @Resource UserMapper userMapper; @Resource ProjectFileMapper projectFileMapper; @Resource ProjectOperationDynamicsMapper projectOperationDynamicsMapper; @Resource ProjectMapper projectMapper; @Resource PdfFileMapper pdfFileMapper; @Resource ProjectApproveMapper projectApproveMapper; @Resource NewsNoticeMapper newsNoticeMapper; @Resource NewsNoticeUserMapper newsNoticeUserMapper; @Override public HttpRespMsg addFile(UserVO userVO, MultipartFile file, String path) { HttpRespMsg msg = new HttpRespMsg(); User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken())); if (user != null) { if (file != null) { ProjectFile projectFile = new ProjectFile(); projectFile.setUploaderId(user.getId()); projectFile.setUploader(user.getUsername()); projectFile.setProjectId(userVO.getProjectId()); File dir = null; dir = new File(path); // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可 if (!dir.exists()) { dir.mkdirs(); } String fileName = ""; if (file != null) { fileName = file.getOriginalFilename(); projectFile.setFileName(fileName); projectFile.setFileSize(FileUtil.getReadableFileSize(file.getSize())); System.out.println("上传文件名称" + file.getName() + ", dir = " + dir.getAbsolutePath()); int pos = fileName.lastIndexOf("."); String rand = UUID.randomUUID().toString().replaceAll("-", ""); String sufix = fileName.substring(pos); fileName = rand + sufix; projectFile.setFileType(sufix);//文件后缀 projectFile.setUrl("/upload/" + fileName); File saveFile = new File(dir, fileName); projectFileMapper.insert(projectFile); try { saveFile.createNewFile(); file.transferTo(saveFile); //将文件传到腾讯云 final String qFileName = fileName; new Thread(){ public void run() { QcloudUntil.upload(path + qFileName,qFileName); QcloudUntil.close(); } }.start(); if (OpenOfficeService.canTransferToPdf(projectFile.getFileType())) { //上传完,需要生成pdf OpenOfficeService openOfficeService = new OpenOfficeService(); String dFile1 = path+UUID.randomUUID().toString().replaceAll("-", "")+".pdf"; openOfficeService.start(); File newFile = new File(dFile1); if(!newFile .exists()){ openOfficeService.office2PDF(path + fileName,dFile1); PdfFile pdfFile = new PdfFile(); pdfFile.setPdfUrl("/upload/"+dFile1.substring(path.length())); pdfFile.setFileId(projectFile.getId()); pdfFile.setType(1); pdfFile.setRafId(projectFile.getProjectId()); pdfFile.setSourceFileUrl(projectFile.getUrl()); pdfFileMapper.insert(pdfFile); } openOfficeService.shutdown(); } } catch (IOException e) { e.printStackTrace(); projectFile = null; } catch (Exception e) { e.printStackTrace(); projectFile = null; } //添加上传记录 ProjectOperationDynamics dynamics = new ProjectOperationDynamics(); dynamics.setContent(Constant.UPLOAD); dynamics.setFileName(file.getOriginalFilename()); dynamics.setOperatorId(user.getId()); dynamics.setOperator(user.getUsername()); dynamics.setProjectId(userVO.getProjectId()); projectOperationDynamicsMapper.insert(dynamics); } msg.data = projectFile; } } else { msg.setError("当前用户不存在或者未登录"); } return msg; } @Override public HttpRespMsg dowloadFile(ProjectFile projectFile, String token, String downLoadpath, HttpServletResponse response, String path) throws FileNotFoundException, UnsupportedEncodingException { HttpRespMsg msg = new HttpRespMsg(); User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token)); //添加上传记录 ProjectOperationDynamics dynamics = new ProjectOperationDynamics(); dynamics.setContent(Constant.DOWNLOAD); ProjectFile file = projectFileMapper.selectById(projectFile.getId()); dynamics.setFileName(file.getFileName()); dynamics.setOperatorId(user.getId()); dynamics.setOperator(user.getUsername()); dynamics.setProjectId(file.getProjectId()); projectOperationDynamicsMapper.insert(dynamics); downloadLocal(response, downLoadpath, file, path); return msg; } public void downloadLocal(HttpServletResponse response, String downLoadpath, ProjectFile file, String path) throws FileNotFoundException, UnsupportedEncodingException { // // 下载本地文件 // String fileName = file.getFileName().toString(); // 文件的默认保存名 // // 读到流中 // File dir = null; // dir = new File(downLoadpath); // // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可 // if (!dir.exists()) { // dir.mkdirs(); // } // InputStream inStream = new FileInputStream(path.substring(0, path.length() - "/upload/".length())+file.getUrl());// 文件的存放路径 // // 设置输出的格式 // response.reset(); // response.setContentType("bin"); // response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // // 循环取出流中的数据 // byte[] b = new byte[100]; // int len; // try { // while ((len = inStream.read(b)) > 0) // response.getOutputStream().write(b, 0, len); // inStream.close(); // } catch (IOException e) { // e.printStackTrace(); // } /*文件下载*/ // public static void downloadFile (HttpServletResponse response, String fileName, String path){ //下载本地文件 String fileName = file.getFileName().toString(); // 文件的默认保存名 // 读到流中 File dir = null; dir = new File(downLoadpath); // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可 if (!dir.exists()) { dir.mkdirs(); } if (fileName != null) { //设置文件路径 File file1 = new File(path.substring(0, path.length() - "/upload/".length()) + file.getUrl()); if (file1.exists()) { response.setHeader("content-type", "application/octet-stream"); response.setContentType("application/octet-stream"); try { response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file1); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } @Override public HttpRespMsg getFileList(UserVO userVO, String path) { HttpRespMsg msg = new HttpRespMsg(); User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken())); List list = projectFileMapper.selectList(new QueryWrapper().eq("project_id", userVO.getProjectId()).orderByDesc("id")); // for (ProjectFile projectFile : list) { // projectFile.setUrl(path+projectFile.getUrl().substring("/upload/".length())); // } msg.data = list; return msg; } @Override public HttpRespMsg delFile(ProjectFile projectFile, String token, Integer isPass) { HttpRespMsg msg = new HttpRespMsg(); User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token));//当前审批人 //查询项目 // Project project = projectMapper.selectById(projectFile.getProjectId()); if (user == null) { msg.setError("当前用户不存在或者未登录"); return msg; } else { if(user != null){ projectFile = projectFileMapper.selectById(projectFile.getId()); ProjectOperationDynamics dynamics = new ProjectOperationDynamics(); dynamics.setProjectId(projectFile.getProjectId()); dynamics.setOperatorId(user.getId()); dynamics.setOperator(user.getUsername()); dynamics.setFileName(projectFile.getFileName()); if (isPass == 1) { //同意 dynamics.setContent("已同意申请,自动删除该文件"); msg.data = projectFileMapper.deleteById(projectFile.getId()); } else { //不同意 dynamics.setContent("拒绝了删除申请"); //更新文件状态 projectFile.setStatus(0); projectFileMapper.updateById(projectFile); } projectOperationDynamicsMapper.insert(dynamics); }else{ msg.setError("当前用户不存在或者未登录"); return msg; } } return msg; } @Override public HttpRespMsg delFileApplication(ProjectFile projectFile, String token, String reason) { HttpRespMsg msg = new HttpRespMsg(); User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token)); Project project = projectMapper.selectById(projectFileMapper.selectById(projectFile.getId()).getProjectId()); if (user == null) { msg.setError("当前用户不存在或者未登录"); return msg; } else { if((Constant.SYS_ID.equals(user.getParentId()) && user.getSubordinateType()==0)||project.getManagerId().equals(user.getId())){ //修改状态, 发送消息通知资方审批人 projectFile.setStatus(1);//删除待审批 projectFileMapper.updateById(projectFile); projectFile = projectFileMapper.selectById(projectFile.getId()); ProjectOperationDynamics dynamic = new ProjectOperationDynamics(); ProjectApprove approve = projectApproveMapper.selectOne(new QueryWrapper().eq("project_id", project.getId()).eq("subordinate_type", 0)); dynamic.setContent("申请删除文件"+(StringUtils.isNotEmpty(reason)?("(原因:"+reason+")"):"")+",待"+approve.getApproverName()+"审批"); dynamic.setFileName(projectFile.getFileName()); dynamic.setOperator(user.getUsername()); dynamic.setOperatorId(user.getId()); dynamic.setProjectId(project.getId()); projectOperationDynamicsMapper.insert(dynamic); NewsNotice notice = new NewsNotice(); notice.setContent("申请删除文件"+(StringUtils.isNotEmpty(reason)?("(原因:"+reason+")"):"")+",请审批"); notice.setNoticeType(0);//待审批 notice.setRefId(projectFile.getId());//附带项目文件id notice.setProjectName(project.getProjectName()); notice.setProjectId(project.getId()); notice.setBelongType(6);//项目文档类型 newsNoticeMapper.insert(notice); //发送给审批人 NewsNoticeUser newsNoticeUser = new NewsNoticeUser(); newsNoticeUser.setNewsId(notice.getId()); newsNoticeUser.setUserId(approve.getApproverId()); newsNoticeUser.setIsRead(0); newsNoticeUserMapper.insert(newsNoticeUser); msg.data = approve.getApproverName();//返回审批人姓名 }else{ msg.setError("当前用户不存在或者未登录"); return msg; } } return msg; } }