123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- 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;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author 吴涛涛
- * @since 2019-07-30
- */
- @Service
- public class ProjectFileServiceImpl extends ServiceImpl<ProjectFileMapper, ProjectFile> 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<User>().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<User>().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<User>().eq("head_imgurl", userVO.getToken()));
- List<ProjectFile> list = projectFileMapper.selectList(new QueryWrapper<ProjectFile>().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<User>().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<User>().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<ProjectApprove>().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;
- }
- }
|