123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- package com.hssx.cloudmodel.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.hssx.cloudmodel.constant.Constant;
- import com.hssx.cloudmodel.entity.*;
- import com.hssx.cloudmodel.entity.vo.MouldFileVO;
- import com.hssx.cloudmodel.entity.vo.UserVO;
- import com.hssx.cloudmodel.mapper.*;
- import com.hssx.cloudmodel.service.MouldFileService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.hssx.cloudmodel.util.FileUtil;
- import com.hssx.cloudmodel.util.HttpRespMsg;
- import com.hssx.cloudmodel.util.ListUtil;
- import com.hssx.cloudmodel.util.PageUtil;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.multipart.MultipartFile;
- import javax.annotation.Resource;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.*;
- import java.net.URLEncoder;
- import java.util.*;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipOutputStream;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author 吴涛涛
- * @since 2019-08-07
- */
- @Service
- public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile> implements MouldFileService {
- @Resource
- UserMapper userMapper;
- @Resource
- MouldFileMapper mouldFileMapper;
- @Resource
- MouldOperationDynamicsMapper mouldOperationDynamicsMapper;
- @Resource
- ProjectMapper projectMapper;
- @Resource
- MouldMapper mouldMapper;
- @Resource
- ProjectUserMapper projectUserMapper;
- @Resource
- ProjectApproveMapper projectApproveMapper;
- @Resource
- PartMapper partMapper;
- @Override
- public HttpRespMsg addFile(UserVO userVO, Integer blongType, MultipartFile file, MultipartFile file2, String path) {
- HttpRespMsg msg = new HttpRespMsg();
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
- if (user != null) {
- if (file != null && !file.isEmpty()) {
- MouldFile projectFile = new MouldFile();
- projectFile.setUplodtorId(user.getId());
- projectFile.setUploadtor(user.getUsername());
- projectFile.setModelId(userVO.getMouldId());
- File dir = null;
- dir = new File(path);
- // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
- if (!dir.exists()) {
- dir.mkdirs();
- }
- String fileName = "";
- if (file != null && !file.isEmpty()) {
- 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.setFileUrl("/upload/" + fileName);
- projectFile.setBlongType(blongType);
- if (user.getSubordinateType() == 0) {
- //上传人为资产方,自动审核通过
- projectFile.setState(1);
- } else if (user.getSubordinateType() == 1) {
- //上传人为生产方,自动审核通过
- projectFile.setState(2);
- } else {
- projectFile.setState(0);
- }
- File saveFile = new File(dir, fileName);
- try {
- saveFile.createNewFile();
- file.transferTo(saveFile);
- } catch (IOException e) {
- e.printStackTrace();
- projectFile = null;
- } catch (Exception e) {
- e.printStackTrace();
- projectFile = null;
- }
- //模具报废情况下,设置files2
- if (blongType == 5 && file2 != null && !file2.isEmpty()) {
- String fileName2 = file2.getOriginalFilename();
- projectFile.setFileName2(fileName2);
- projectFile.setFileSize2(FileUtil.getReadableFileSize(file2.getSize()));
- System.out.println("上传文件2名称" + file2.getName() + ", dir = " + dir.getAbsolutePath());
- pos = fileName2.lastIndexOf(".");
- rand = UUID.randomUUID().toString().replaceAll("-", "");
- sufix = fileName2.substring(pos);
- fileName2 = rand + sufix;
- projectFile.setFileType2(sufix);//文件后缀
- projectFile.setFileUrl2("/upload/" + fileName2);
- File saveFile2 = new File(dir, fileName2);
- try {
- saveFile2.createNewFile();
- file2.transferTo(saveFile2);
- } catch (IOException e) {
- e.printStackTrace();
- projectFile = null;
- } catch (Exception e) {
- e.printStackTrace();
- projectFile = null;
- }
- }
- //零件文档时存上零件id
- if (blongType == 1 && null != userVO.getPartId()) {
- projectFile.setPartId(userVO.getPartId());
- }
- //上传零件文档和上传模具文档的时候需要区分是否为2D或者3D
- if (userVO.getDwgType() != null) {
- projectFile.setDwgType(userVO.getDwgType());
- }
- mouldFileMapper.insert(projectFile);
- //添加上传记录
- MouldOperationDynamics dynamics = new MouldOperationDynamics();
- dynamics.setContent(Constant.UPLOAD);
- dynamics.setFileName(file.getOriginalFilename());
- dynamics.setOperatorId(user.getId());
- dynamics.setFileId(projectFile.getId());
- dynamics.setOperatorName(user.getUsername());
- dynamics.setMouldId(userVO.getMouldId());
- dynamics.setBelongType(blongType);
- mouldOperationDynamicsMapper.insert(dynamics);
- }
- msg.data = projectFile;
- }
- } else {
- msg.setError("当前用户不存在或者未登录");
- }
- return msg;
- }
- @Override
- public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO) {
- HttpRespMsg msg = new HttpRespMsg();
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
- MouldFile mf = new MouldFile();
- mf.setId(mouldFileId);
- MouldFile oldData = mouldFileMapper.selectById(mouldFileId);
- if (user != null) {
- if (user.getSubordinateType() == 0) {
- //资产方
- if (isPass == 1) {
- if (oldData.getState() == 2) {//生产方也审核通过了
- mf.setState(3);
- } else {
- mf.setState(1);
- }
- } else {
- mf.setState(-1);
- }
- mouldFileMapper.updateById(mf);
- } else if (user.getSubordinateType() == 1) {
- //生产方
- if (isPass == 1) {
- if (oldData.getState() == 1) {//资产方也审核通过了
- mf.setState(3);
- } else {
- mf.setState(2);
- }
- } else {
- mf.setState(-2);
- }
- mouldFileMapper.updateById(mf);
- } else {
- msg.setError("只有生产方和资产方才能审核, subordinteType = " + user.getSubordinateType() + ", 无效!");
- }
- }
- return msg;
- }
- @Override
- public HttpRespMsg dowloadFile(MouldFile projectFile, String token) {
- HttpRespMsg msg = new HttpRespMsg();
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
- //添加上传记录
- MouldFile file = mouldFileMapper.selectById(projectFile.getId());
- MouldOperationDynamics dynamics = new MouldOperationDynamics();
- dynamics.setContent(Constant.DOWNLOAD);
- dynamics.setFileName(file.getFileName());
- dynamics.setOperatorId(user.getId());
- dynamics.setOperatorName(user.getUsername());
- dynamics.setMouldId(file.getModelId());
- dynamics.setFileId(file.getId());
- dynamics.setBelongType(file.getBlongType());
- mouldOperationDynamicsMapper.insert(dynamics);
- return msg;
- }
- @Override
- public HttpRespMsg getAllFileList(int mouldId, UserVO userVO) {
- List<HashMap> dataList = new ArrayList<HashMap>();
- int maxBlongType = 5;
- for (int i = 0; i <= maxBlongType; i++) {
- HashMap<String, Object> data = new HashMap<>();
- data.put("blongType", i);
- List<MouldFile> list = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", mouldId).eq("blong_type", i).orderByDesc("id"));
- data.put("list", list);
- dataList.add(data);
- }
- HttpRespMsg msg = new HttpRespMsg();
- msg.data = dataList;
- return msg;
- }
- @Override
- public HttpRespMsg getFileList(int mouldId, Integer blongType, UserVO userVO) {
- HttpRespMsg msg = new HttpRespMsg();
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
- List<MouldFile> list = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", mouldId).eq("blong_type", blongType).orderByDesc("id"));
- msg.data = list;
- return msg;
- }
- @Override
- public HttpRespMsg delFile(MouldFile mouldFile) {
- HttpRespMsg msg = new HttpRespMsg();
- msg.data = mouldFileMapper.deleteById(mouldFile.getId());
- return msg;
- }
- @Override
- public HttpRespMsg getListByUserAndProjectId(UserVO userVO, PageUtil page) {
- HttpRespMsg msg = new HttpRespMsg();
- List<Integer> proIds = new ArrayList<>();
- proIds.add(-1);
- List<MouldFileVO> list = new ArrayList<>();
- User currentUser = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
- PageHelper.startPage(page.getPageNum(), page.getPageSize());
- if (currentUser != null) {
- if (Constant.SYS_ID == currentUser.getParentId()) {
- //此时是admin,查询他所创建的项目
- QueryWrapper<Project> qw = new QueryWrapper<>();
- List<Project> projects = projectMapper.selectList(qw.eq("creator_id", currentUser.getId()));
- for (Project pro : projects) {
- proIds.add(pro.getId());
- }
- list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
- } else if (Constant.SYS_PARENT_ID == currentUser.getParentId()) {
- //系统管理员
- List<Project> projects = projectMapper.selectList(new QueryWrapper<Project>());
- for (Project pro : projects) {
- proIds.add(pro.getId());
- }
- list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
- } else {
- QueryWrapper<Project> qw = new QueryWrapper<>();
- qw.eq("manager_id", userVO.getId());
- List<Project> projects = projectMapper.selectList(qw);
- if (projects.size() > 0) {
- for (Project project : projects) {
- proIds.add(project.getId());
- }
- }
- // //充当普通人员参与的项目
- List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
- if (projectUsers.size() > 0) {
- for (ProjectUser projectUser : projectUsers) {
- proIds.add(projectUser.getProjectId());
- }
- }
- //充当审批人员参与的项目
- List<ProjectApprove> projectss = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
- if (projectss.size() > 0) {
- for (ProjectApprove projectUser : projectss) {
- proIds.add(projectUser.getProjectId());
- }
- }
- list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
- }
- PageInfo<MouldFileVO> pageInfos = new PageInfo<>(list);
- msg.data = pageInfos;
- } else {
- msg.setError("用户不存在或者未登录");
- }
- return msg;
- }
- @Override
- public HttpRespMsg dowloadFileList(UserVO userVO, HttpServletRequest request, HttpServletResponse response, String downloadPath) throws IOException {
- HttpRespMsg msg = new HttpRespMsg();
- if (null != userVO.getIds()) {
- List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(userVO.getIds());
- for (Integer id : ids) {
- Mould mould = mouldMapper.selectById(id);
- List<MouldFile> mouldFiles = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", id).eq("state", 3));
- feedBackDirectMultiDownload(request, response, downloadPath, mould, mouldFiles);
- }
- }
- return msg;
- }
- @Override
- public HttpRespMsg addPartFile(UserVO userVO, String path, MultipartFile[] files) {
- HttpRespMsg msg = new HttpRespMsg();
- // User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
- // if (user != null) {
- // List<Part> partLists = partMapper.selectList(new QueryWrapper<Part>().eq("mould_id", userVO.getMouldId()));
- // if (files.length > 0) {
- // for (MultipartFile file : files) {
- // MouldFile partFile = new MouldFile();
- // partFile.setModelId(userVO.getMouldId());
- // partFile.setBlongType(1);
- // partFile.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 && !file.isEmpty()) {
- // fileName = file.getOriginalFilename();
- // String fileNamePrex = fileName.substring(0,fileName.lastIndexOf("."));
- // String[] split = fileNamePrex.split("\\+");
- // for (Part part : partLists) {
- // if(split[0] == part.getPartNo()) {
- // partFile.setPartId(part.getId());
- // }
- // }
- // 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);
- // } 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("上传文件不可为空");
- // }
- // } else {
- // msg.setError("用户不存在或者未登录");
- // }
- return null;
- }
- public Map<String, Object> feedBackDirectMultiDownload(HttpServletRequest request, HttpServletResponse response, String downloadPath, Mould vo, List<MouldFile> mouldFiles) throws IOException {
- //压缩文件初始设置
- String path = downloadPath;
- String base_name = vo.getModelNo() + vo.getModelName();
- String fileZip = base_name + ".zip"; // 拼接zip文件
- String filePath = path + "\\" + fileZip;//之后用来生成zip文件
- //mouldFiles为根据前台传过来的信息,通过数据库查询所得出的pdf文件路径集合(具体到后缀),此处省略
- File[] files = new File[mouldFiles.size()];//
- for (int i = 0; i < mouldFiles.size(); i++) {
- files[i] = new File(mouldFiles.get(i).getFileUrl());//获取所有需要下载的pdf
- }
- // 创建临时压缩文件
- try {
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
- ZipOutputStream zos = new ZipOutputStream(bos);
- ZipEntry ze = null;
- for (int i = 0; i < files.length; i++) {//将所有需要下载的pdf文件都写入临时zip文件
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(files[i]));
- ze = new ZipEntry(files[i].getName());
- zos.putNextEntry(ze);
- int s = -1;
- while ((s = bis.read()) != -1) {
- zos.write(s);
- }
- bis.close();
- }
- zos.flush();
- zos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- //以上,临时压缩文件创建完成
- //进行浏览器下载
- //获得浏览器代理信息
- final String userAgent = request.getHeader("USER-AGENT");
- //判断浏览器代理并分别设置响应给浏览器的编码格式
- String finalFileName = null;
- if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {//IE浏览器
- finalFileName = URLEncoder.encode(fileZip, "UTF8");
- System.out.println("IE浏览器");
- } else if (StringUtils.contains(userAgent, "Mozilla")) {//google,火狐浏览器
- finalFileName = new String(fileZip.getBytes(), "ISO8859-1");
- } else {
- finalFileName = URLEncoder.encode(fileZip, "UTF8");//其他浏览器
- }
- response.setContentType("application/x-download");//告知浏览器下载文件,而不是直接打开,浏览器默认为打开
- response.setHeader("Content-Disposition", "attachment;filename=\"" + finalFileName + "\"");//下载文件的名称
- ServletOutputStream servletOutputStream = response.getOutputStream();
- DataOutputStream temps = new DataOutputStream(
- servletOutputStream);
- DataInputStream in = new DataInputStream(new FileInputStream(filePath));//浏览器下载文件的路径
- byte[] b = new byte[2048];
- File reportZip = new File(filePath);//之后用来删除临时压缩文件
- try {
- while ((in.read(b)) != -1) {
- temps.write(b);
- }
- temps.flush();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (temps != null) temps.close();
- if (in != null) in.close();
- if (reportZip != null) reportZip.delete();//删除服务器本地产生的临时压缩文件
- servletOutputStream.close();
- }
- return null;
- }
- }
|