MouldFileServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. package com.hssx.cloudmodel.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.github.pagehelper.PageHelper;
  4. import com.github.pagehelper.PageInfo;
  5. import com.hssx.cloudmodel.constant.Constant;
  6. import com.hssx.cloudmodel.entity.*;
  7. import com.hssx.cloudmodel.entity.vo.MouldFileVO;
  8. import com.hssx.cloudmodel.entity.vo.UserVO;
  9. import com.hssx.cloudmodel.mapper.*;
  10. import com.hssx.cloudmodel.service.MouldFileService;
  11. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  12. import com.hssx.cloudmodel.util.FileUtil;
  13. import com.hssx.cloudmodel.util.HttpRespMsg;
  14. import com.hssx.cloudmodel.util.ListUtil;
  15. import com.hssx.cloudmodel.util.PageUtil;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.web.bind.annotation.RequestParam;
  19. import org.springframework.web.multipart.MultipartFile;
  20. import javax.annotation.Resource;
  21. import javax.servlet.ServletOutputStream;
  22. import javax.servlet.http.HttpServletRequest;
  23. import javax.servlet.http.HttpServletResponse;
  24. import java.io.*;
  25. import java.net.URLEncoder;
  26. import java.util.*;
  27. import java.util.zip.ZipEntry;
  28. import java.util.zip.ZipOutputStream;
  29. /**
  30. * <p>
  31. * 服务实现类
  32. * </p>
  33. *
  34. * @author 吴涛涛
  35. * @since 2019-08-07
  36. */
  37. @Service
  38. public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile> implements MouldFileService {
  39. @Resource
  40. UserMapper userMapper;
  41. @Resource
  42. MouldFileMapper mouldFileMapper;
  43. @Resource
  44. MouldOperationDynamicsMapper mouldOperationDynamicsMapper;
  45. @Resource
  46. ProjectMapper projectMapper;
  47. @Resource
  48. MouldMapper mouldMapper;
  49. @Resource
  50. ProjectUserMapper projectUserMapper;
  51. @Resource
  52. ProjectApproveMapper projectApproveMapper;
  53. @Resource
  54. PartMapper partMapper;
  55. @Override
  56. public HttpRespMsg addFile(UserVO userVO, Integer blongType, MultipartFile file, MultipartFile file2, String path) {
  57. HttpRespMsg msg = new HttpRespMsg();
  58. User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
  59. if (user != null) {
  60. if (file != null && !file.isEmpty()) {
  61. MouldFile projectFile = new MouldFile();
  62. projectFile.setUplodtorId(user.getId());
  63. projectFile.setUploadtor(user.getUsername());
  64. projectFile.setModelId(userVO.getMouldId());
  65. File dir = null;
  66. dir = new File(path);
  67. // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
  68. if (!dir.exists()) {
  69. dir.mkdirs();
  70. }
  71. String fileName = "";
  72. if (file != null && !file.isEmpty()) {
  73. fileName = file.getOriginalFilename();
  74. projectFile.setFileName(fileName);
  75. projectFile.setFileSize(FileUtil.getReadableFileSize(file.getSize()));
  76. System.out.println("上传文件名称" + file.getName() + ", dir = " + dir.getAbsolutePath());
  77. int pos = fileName.lastIndexOf(".");
  78. String rand = UUID.randomUUID().toString().replaceAll("-", "");
  79. String sufix = fileName.substring(pos);
  80. fileName = rand + sufix;
  81. projectFile.setFileType(sufix);//文件后缀
  82. projectFile.setFileUrl("/upload/" + fileName);
  83. projectFile.setBlongType(blongType);
  84. if (user.getSubordinateType() == 0) {
  85. //上传人为资产方,自动审核通过
  86. projectFile.setState(1);
  87. } else if (user.getSubordinateType() == 1) {
  88. //上传人为生产方,自动审核通过
  89. projectFile.setState(2);
  90. } else {
  91. projectFile.setState(0);
  92. }
  93. File saveFile = new File(dir, fileName);
  94. try {
  95. saveFile.createNewFile();
  96. file.transferTo(saveFile);
  97. } catch (IOException e) {
  98. e.printStackTrace();
  99. projectFile = null;
  100. } catch (Exception e) {
  101. e.printStackTrace();
  102. projectFile = null;
  103. }
  104. //模具报废情况下,设置files2
  105. if (blongType == 5 && file2 != null && !file2.isEmpty()) {
  106. String fileName2 = file2.getOriginalFilename();
  107. projectFile.setFileName2(fileName2);
  108. projectFile.setFileSize2(FileUtil.getReadableFileSize(file2.getSize()));
  109. System.out.println("上传文件2名称" + file2.getName() + ", dir = " + dir.getAbsolutePath());
  110. pos = fileName2.lastIndexOf(".");
  111. rand = UUID.randomUUID().toString().replaceAll("-", "");
  112. sufix = fileName2.substring(pos);
  113. fileName2 = rand + sufix;
  114. projectFile.setFileType2(sufix);//文件后缀
  115. projectFile.setFileUrl2("/upload/" + fileName2);
  116. File saveFile2 = new File(dir, fileName2);
  117. try {
  118. saveFile2.createNewFile();
  119. file2.transferTo(saveFile2);
  120. } catch (IOException e) {
  121. e.printStackTrace();
  122. projectFile = null;
  123. } catch (Exception e) {
  124. e.printStackTrace();
  125. projectFile = null;
  126. }
  127. }
  128. //零件文档时存上零件id
  129. if (blongType == 1 && null != userVO.getPartId()) {
  130. projectFile.setPartId(userVO.getPartId());
  131. }
  132. //上传零件文档和上传模具文档的时候需要区分是否为2D或者3D
  133. if (userVO.getDwgType() != null) {
  134. projectFile.setDwgType(userVO.getDwgType());
  135. }
  136. mouldFileMapper.insert(projectFile);
  137. //添加上传记录
  138. MouldOperationDynamics dynamics = new MouldOperationDynamics();
  139. dynamics.setContent(Constant.UPLOAD);
  140. dynamics.setFileName(file.getOriginalFilename());
  141. dynamics.setOperatorId(user.getId());
  142. dynamics.setFileId(projectFile.getId());
  143. dynamics.setOperatorName(user.getUsername());
  144. dynamics.setMouldId(userVO.getMouldId());
  145. dynamics.setBelongType(blongType);
  146. mouldOperationDynamicsMapper.insert(dynamics);
  147. }
  148. msg.data = projectFile;
  149. }
  150. } else {
  151. msg.setError("当前用户不存在或者未登录");
  152. }
  153. return msg;
  154. }
  155. @Override
  156. public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO) {
  157. HttpRespMsg msg = new HttpRespMsg();
  158. User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
  159. MouldFile mf = new MouldFile();
  160. mf.setId(mouldFileId);
  161. MouldFile oldData = mouldFileMapper.selectById(mouldFileId);
  162. if (user != null) {
  163. if (user.getSubordinateType() == 0) {
  164. //资产方
  165. if (isPass == 1) {
  166. if (oldData.getState() == 2) {//生产方也审核通过了
  167. mf.setState(3);
  168. } else {
  169. mf.setState(1);
  170. }
  171. } else {
  172. mf.setState(-1);
  173. }
  174. mouldFileMapper.updateById(mf);
  175. } else if (user.getSubordinateType() == 1) {
  176. //生产方
  177. if (isPass == 1) {
  178. if (oldData.getState() == 1) {//资产方也审核通过了
  179. mf.setState(3);
  180. } else {
  181. mf.setState(2);
  182. }
  183. } else {
  184. mf.setState(-2);
  185. }
  186. mouldFileMapper.updateById(mf);
  187. } else {
  188. msg.setError("只有生产方和资产方才能审核, subordinteType = " + user.getSubordinateType() + ", 无效!");
  189. }
  190. }
  191. return msg;
  192. }
  193. @Override
  194. public HttpRespMsg dowloadFile(MouldFile projectFile, String token) {
  195. HttpRespMsg msg = new HttpRespMsg();
  196. User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
  197. //添加上传记录
  198. MouldFile file = mouldFileMapper.selectById(projectFile.getId());
  199. MouldOperationDynamics dynamics = new MouldOperationDynamics();
  200. dynamics.setContent(Constant.DOWNLOAD);
  201. dynamics.setFileName(file.getFileName());
  202. dynamics.setOperatorId(user.getId());
  203. dynamics.setOperatorName(user.getUsername());
  204. dynamics.setMouldId(file.getModelId());
  205. dynamics.setFileId(file.getId());
  206. dynamics.setBelongType(file.getBlongType());
  207. mouldOperationDynamicsMapper.insert(dynamics);
  208. return msg;
  209. }
  210. @Override
  211. public HttpRespMsg getAllFileList(int mouldId, UserVO userVO) {
  212. List<HashMap> dataList = new ArrayList<HashMap>();
  213. int maxBlongType = 5;
  214. for (int i = 0; i <= maxBlongType; i++) {
  215. HashMap<String, Object> data = new HashMap<>();
  216. data.put("blongType", i);
  217. List<MouldFile> list = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", mouldId).eq("blong_type", i).orderByDesc("id"));
  218. data.put("list", list);
  219. dataList.add(data);
  220. }
  221. HttpRespMsg msg = new HttpRespMsg();
  222. msg.data = dataList;
  223. return msg;
  224. }
  225. @Override
  226. public HttpRespMsg getFileList(int mouldId, Integer blongType, UserVO userVO) {
  227. HttpRespMsg msg = new HttpRespMsg();
  228. User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
  229. List<MouldFile> list = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", mouldId).eq("blong_type", blongType).orderByDesc("id"));
  230. msg.data = list;
  231. return msg;
  232. }
  233. @Override
  234. public HttpRespMsg delFile(MouldFile mouldFile) {
  235. HttpRespMsg msg = new HttpRespMsg();
  236. msg.data = mouldFileMapper.deleteById(mouldFile.getId());
  237. return msg;
  238. }
  239. @Override
  240. public HttpRespMsg getListByUserAndProjectId(UserVO userVO, PageUtil page) {
  241. HttpRespMsg msg = new HttpRespMsg();
  242. List<Integer> proIds = new ArrayList<>();
  243. proIds.add(-1);
  244. List<MouldFileVO> list = new ArrayList<>();
  245. User currentUser = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
  246. PageHelper.startPage(page.getPageNum(), page.getPageSize());
  247. if (currentUser != null) {
  248. if (Constant.SYS_ID == currentUser.getParentId()) {
  249. //此时是admin,查询他所创建的项目
  250. QueryWrapper<Project> qw = new QueryWrapper<>();
  251. List<Project> projects = projectMapper.selectList(qw.eq("creator_id", currentUser.getId()));
  252. for (Project pro : projects) {
  253. proIds.add(pro.getId());
  254. }
  255. list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
  256. } else if (Constant.SYS_PARENT_ID == currentUser.getParentId()) {
  257. //系统管理员
  258. List<Project> projects = projectMapper.selectList(new QueryWrapper<Project>());
  259. for (Project pro : projects) {
  260. proIds.add(pro.getId());
  261. }
  262. list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
  263. } else {
  264. QueryWrapper<Project> qw = new QueryWrapper<>();
  265. qw.eq("manager_id", userVO.getId());
  266. List<Project> projects = projectMapper.selectList(qw);
  267. if (projects.size() > 0) {
  268. for (Project project : projects) {
  269. proIds.add(project.getId());
  270. }
  271. }
  272. // //充当普通人员参与的项目
  273. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  274. if (projectUsers.size() > 0) {
  275. for (ProjectUser projectUser : projectUsers) {
  276. proIds.add(projectUser.getProjectId());
  277. }
  278. }
  279. //充当审批人员参与的项目
  280. List<ProjectApprove> projectss = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  281. if (projectss.size() > 0) {
  282. for (ProjectApprove projectUser : projectss) {
  283. proIds.add(projectUser.getProjectId());
  284. }
  285. }
  286. list = mouldFileMapper.getFileListByProjectId(userVO, proIds);
  287. }
  288. PageInfo<MouldFileVO> pageInfos = new PageInfo<>(list);
  289. msg.data = pageInfos;
  290. } else {
  291. msg.setError("用户不存在或者未登录");
  292. }
  293. return msg;
  294. }
  295. @Override
  296. public HttpRespMsg dowloadFileList(UserVO userVO, HttpServletRequest request, HttpServletResponse response, String downloadPath) throws IOException {
  297. HttpRespMsg msg = new HttpRespMsg();
  298. if (null != userVO.getIds()) {
  299. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(userVO.getIds());
  300. for (Integer id : ids) {
  301. Mould mould = mouldMapper.selectById(id);
  302. List<MouldFile> mouldFiles = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", id).eq("state", 3));
  303. feedBackDirectMultiDownload(request, response, downloadPath, mould, mouldFiles);
  304. }
  305. }
  306. return msg;
  307. }
  308. @Override
  309. public HttpRespMsg addPartFile(UserVO userVO, String path, MultipartFile[] files) {
  310. HttpRespMsg msg = new HttpRespMsg();
  311. // User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
  312. // if (user != null) {
  313. // List<Part> partLists = partMapper.selectList(new QueryWrapper<Part>().eq("mould_id", userVO.getMouldId()));
  314. // if (files.length > 0) {
  315. // for (MultipartFile file : files) {
  316. // MouldFile partFile = new MouldFile();
  317. // partFile.setModelId(userVO.getMouldId());
  318. // partFile.setBlongType(1);
  319. // partFile.setUploaderId(user.getId());
  320. // projectFile.setUploader(user.getUsername());
  321. // projectFile.setProjectId(userVO.getProjectId());
  322. // File dir = null;
  323. // dir = new File(path);
  324. // // D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
  325. // if (!dir.exists()) {
  326. // dir.mkdirs();
  327. // }
  328. // String fileName = "";
  329. // if (file != null && !file.isEmpty()) {
  330. // fileName = file.getOriginalFilename();
  331. // String fileNamePrex = fileName.substring(0,fileName.lastIndexOf("."));
  332. // String[] split = fileNamePrex.split("\\+");
  333. // for (Part part : partLists) {
  334. // if(split[0] == part.getPartNo()) {
  335. // partFile.setPartId(part.getId());
  336. // }
  337. // }
  338. // projectFile.setFileName(fileName);
  339. // projectFile.setFileSize(FileUtil.getReadableFileSize(file.getSize()));
  340. // System.out.println("上传文件名称" + file.getName() + ", dir = " + dir.getAbsolutePath());
  341. // int pos = fileName.lastIndexOf(".");
  342. // String rand = UUID.randomUUID().toString().replaceAll("-", "");
  343. // String sufix = fileName.substring(pos);
  344. // fileName = rand + sufix;
  345. // projectFile.setFileType(sufix);//文件后缀
  346. // projectFile.setUrl("/upload/"+fileName);
  347. // File saveFile = new File(dir, fileName);
  348. // projectFileMapper.insert(projectFile);
  349. // try {
  350. // saveFile.createNewFile();
  351. // file.transferTo(saveFile);
  352. // } catch (IOException e) {
  353. // e.printStackTrace();
  354. // projectFile = null;
  355. // } catch (Exception e) {
  356. // e.printStackTrace();
  357. // projectFile = null;
  358. // }
  359. // //添加上传记录
  360. // ProjectOperationDynamics dynamics = new ProjectOperationDynamics();
  361. // dynamics.setContent(Constant.UPLOAD);
  362. // dynamics.setFileName(file.getOriginalFilename());
  363. // dynamics.setOperatorId(user.getId());
  364. // dynamics.setOperator(user.getUsername());
  365. // dynamics.setProjectId(userVO.getProjectId());
  366. // projectOperationDynamicsMapper.insert(dynamics);
  367. // }
  368. // msg.data = projectFile;
  369. // }
  370. // }
  371. // } else {
  372. // msg.setError("上传文件不可为空");
  373. // }
  374. // } else {
  375. // msg.setError("用户不存在或者未登录");
  376. // }
  377. return null;
  378. }
  379. public Map<String, Object> feedBackDirectMultiDownload(HttpServletRequest request, HttpServletResponse response, String downloadPath, Mould vo, List<MouldFile> mouldFiles) throws IOException {
  380. //压缩文件初始设置
  381. String path = downloadPath;
  382. String base_name = vo.getModelNo() + vo.getModelName();
  383. String fileZip = base_name + ".zip"; // 拼接zip文件
  384. String filePath = path + "\\" + fileZip;//之后用来生成zip文件
  385. //mouldFiles为根据前台传过来的信息,通过数据库查询所得出的pdf文件路径集合(具体到后缀),此处省略
  386. File[] files = new File[mouldFiles.size()];//
  387. for (int i = 0; i < mouldFiles.size(); i++) {
  388. files[i] = new File(mouldFiles.get(i).getFileUrl());//获取所有需要下载的pdf
  389. }
  390. // 创建临时压缩文件
  391. try {
  392. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
  393. ZipOutputStream zos = new ZipOutputStream(bos);
  394. ZipEntry ze = null;
  395. for (int i = 0; i < files.length; i++) {//将所有需要下载的pdf文件都写入临时zip文件
  396. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(files[i]));
  397. ze = new ZipEntry(files[i].getName());
  398. zos.putNextEntry(ze);
  399. int s = -1;
  400. while ((s = bis.read()) != -1) {
  401. zos.write(s);
  402. }
  403. bis.close();
  404. }
  405. zos.flush();
  406. zos.close();
  407. } catch (IOException e) {
  408. e.printStackTrace();
  409. }
  410. //以上,临时压缩文件创建完成
  411. //进行浏览器下载
  412. //获得浏览器代理信息
  413. final String userAgent = request.getHeader("USER-AGENT");
  414. //判断浏览器代理并分别设置响应给浏览器的编码格式
  415. String finalFileName = null;
  416. if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {//IE浏览器
  417. finalFileName = URLEncoder.encode(fileZip, "UTF8");
  418. System.out.println("IE浏览器");
  419. } else if (StringUtils.contains(userAgent, "Mozilla")) {//google,火狐浏览器
  420. finalFileName = new String(fileZip.getBytes(), "ISO8859-1");
  421. } else {
  422. finalFileName = URLEncoder.encode(fileZip, "UTF8");//其他浏览器
  423. }
  424. response.setContentType("application/x-download");//告知浏览器下载文件,而不是直接打开,浏览器默认为打开
  425. response.setHeader("Content-Disposition", "attachment;filename=\"" + finalFileName + "\"");//下载文件的名称
  426. ServletOutputStream servletOutputStream = response.getOutputStream();
  427. DataOutputStream temps = new DataOutputStream(
  428. servletOutputStream);
  429. DataInputStream in = new DataInputStream(new FileInputStream(filePath));//浏览器下载文件的路径
  430. byte[] b = new byte[2048];
  431. File reportZip = new File(filePath);//之后用来删除临时压缩文件
  432. try {
  433. while ((in.read(b)) != -1) {
  434. temps.write(b);
  435. }
  436. temps.flush();
  437. } catch (Exception e) {
  438. e.printStackTrace();
  439. } finally {
  440. if (temps != null) temps.close();
  441. if (in != null) in.close();
  442. if (reportZip != null) reportZip.delete();//删除服务器本地产生的临时压缩文件
  443. servletOutputStream.close();
  444. }
  445. return null;
  446. }
  447. }