SystemFileController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. package com.steerinfo.dil.controller;
  2. import com.google.common.collect.Iterators;
  3. import com.steerinfo.dil.mapper.SystemFileMapper;
  4. import com.steerinfo.dil.util.FtpFileUtil;
  5. import com.steerinfo.dil.util.IDutils;
  6. import com.steerinfo.framework.controller.BaseRESTfulController;
  7. import com.steerinfo.framework.controller.RESTfulResult;
  8. import com.steerinfo.framework.service.pagehelper.PageList;
  9. import com.steerinfo.framework.utils.collection.ListUtils;
  10. import com.steerinfo.dil.model.SystemFile;
  11. import com.steerinfo.dil.service.ISystemFileService;
  12. import io.swagger.annotations.ApiImplicitParam;
  13. import io.swagger.annotations.ApiImplicitParams;
  14. import io.swagger.annotations.ApiOperation;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.apache.shiro.authz.annotation.RequiresPermissions;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.util.MultiValueMap;
  19. import org.springframework.web.bind.annotation.*;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import org.springframework.web.multipart.MultipartRequest;
  22. import javax.annotation.Resource;
  23. import javax.imageio.ImageIO;
  24. import java.awt.*;
  25. import java.awt.image.BufferedImage;
  26. import java.io.ByteArrayInputStream;
  27. import java.io.ByteArrayOutputStream;
  28. import java.io.IOException;
  29. import java.io.InputStream;
  30. import java.text.SimpleDateFormat;
  31. import java.util.*;
  32. import java.math.BigDecimal;
  33. import java.util.List;
  34. /**
  35. * SystemFile RESTful接口:
  36. *
  37. * @author generator
  38. * @version 1.0-SNAPSHORT 2023-10-30 09:19
  39. * 类描述
  40. * 修订历史:
  41. * 日期:2023-10-30
  42. * 作者:generator
  43. * 参考:
  44. * 描述:SystemFile RESTful接口
  45. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  46. * @see null
  47. */
  48. @RestController
  49. @RequestMapping("/${api.version}/systemfiles")
  50. public class SystemFileController extends BaseRESTfulController {
  51. @Autowired
  52. ISystemFileService systemFileService;
  53. @Resource
  54. SystemFileMapper systemFileMapper;
  55. @Autowired
  56. private FtpFileUtil ftpFileUtil;
  57. //同一个信息包含多个上传文件信息
  58. @PostMapping("/insertFile")
  59. public RESTfulResult insertFile(String fileuuid, @ModelAttribute MultipartFile[] file) {
  60. String filenames = "";
  61. for (int i = 0; i < file.length; i++) {
  62. filenames += file[i].getOriginalFilename() + ";";
  63. }
  64. String filesid = "";
  65. if (file != null) {
  66. for (int i = 0; i < file.length; i++) {
  67. try {
  68. //获取系统时间
  69. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
  70. //获取文件名
  71. String oldName = file[i].getOriginalFilename();
  72. //取当前时间的长整形值包含毫秒
  73. String newName = IDutils.getImageName();
  74. //重新命名文件
  75. newName = newName + oldName.substring(oldName.lastIndexOf("."));
  76. String filePath = simpleDateFormat.format(new Date());
  77. //获取输入流
  78. InputStream inputStream = file[i].getInputStream();
  79. boolean result = ftpFileUtil.uploadToFtp(inputStream, filePath, newName, false);
  80. inputStream.close();
  81. if (result) {
  82. SystemFile uploadFile = new SystemFile();
  83. uploadFile.setFilename(oldName);
  84. uploadFile.setFilepath(filePath + "/" + newName);
  85. uploadFile.setId(fileuuid);
  86. SystemFile modela = systemFileService.add(uploadFile);
  87. if (modela != null) {
  88. filesid += "," + modela.getId();
  89. }
  90. } else {
  91. return failed(null, "上传文件失败");
  92. }
  93. } catch (Exception e) {
  94. e.getMessage();
  95. }
  96. }
  97. return success(filesid);
  98. } else {
  99. return failed();
  100. }
  101. }
  102. @PostMapping("/insertFiles2")
  103. public RESTfulResult insertFiles2(@RequestParam String fileuuid, @ModelAttribute MultipartFile[] file) {
  104. String filenames = "";
  105. for (int i = 0; i < file.length; i++) {
  106. filenames += file[i].getOriginalFilename() + ";";
  107. }
  108. String filesid = "";
  109. String[] fileuuids = fileuuid.split(",");
  110. if (file != null) {
  111. for (int i = 0; i < file.length; i++) {
  112. try {
  113. //获取系统时间
  114. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
  115. //获取文件名
  116. String oldName = file[i].getOriginalFilename();
  117. //取当前时间的长整形值包含毫秒
  118. String newName = IDutils.getImageName();
  119. //重新命名文件
  120. newName = newName + oldName.substring(oldName.lastIndexOf("."));
  121. String filePath = simpleDateFormat.format(new Date());
  122. //获取输入流
  123. InputStream inputStream = file[i].getInputStream();
  124. boolean result = ftpFileUtil.uploadToFtp(inputStream, filePath, newName, false);
  125. inputStream.close();
  126. if (result) {
  127. SystemFile uploadFile = new SystemFile();
  128. uploadFile.setFilename(oldName);
  129. uploadFile.setFilepath(filePath + "/" + newName);
  130. uploadFile.setId(fileuuids[i]);
  131. SystemFile modela = systemFileService.add(uploadFile);
  132. if (modela != null) {
  133. filesid += "," + modela.getId();
  134. }
  135. } else {
  136. return failed(null, "上传文件失败");
  137. }
  138. } catch (Exception e) {
  139. e.getMessage();
  140. }
  141. }
  142. return success(filesid);
  143. } else {
  144. return failed();
  145. }
  146. }
  147. @PostMapping("/insertFiles")
  148. public RESTfulResult insertFiles(String[] fileUuids, String[] fileNames, String[] fileTypes, Map<Object, MultipartFile> FileList, MultipartRequest request) throws Exception {
  149. List<MultipartFile> files = new ArrayList<>();
  150. int index = -1;
  151. for (int j = 0; j < fileTypes.length; j++) {
  152. for (int i = 0; i < 21; i++) {
  153. MultipartFile file = request.getFile("file" + j + "" + i);
  154. if (file != null) {
  155. files.add(file);
  156. if (index < 0) {
  157. index = i;
  158. }
  159. }
  160. }
  161. }
  162. if (files.size() == 0) {
  163. return failed("传输失败");
  164. }
  165. for (int i = 0; i < fileUuids.length; i++) {
  166. //获取系统时间
  167. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
  168. //获取文件名
  169. String oldName = fileNames[i].toString();
  170. //取当前时间的长整形值包含毫秒
  171. String newName = IDutils.getImageName();
  172. //重新命名文件
  173. String filePath = simpleDateFormat.format(new Date()) + "/" + fileTypes[i].toString();
  174. //获取输入流
  175. String fileTypeName = files.get(i).getOriginalFilename();
  176. fileTypeName = fileTypeName.substring(fileTypeName.lastIndexOf("."));
  177. newName = oldName + "(" + newName + ")" + fileTypeName;
  178. InputStream inputStream = files.get(i).getInputStream();
  179. boolean result = ftpFileUtil.uploadToFtp(inputStream, filePath, newName, false);
  180. inputStream.close();
  181. if (result) {
  182. SystemFile uploadFile = new SystemFile();
  183. uploadFile.setFilename(oldName);
  184. uploadFile.setFilepath(filePath + "/" + newName);
  185. uploadFile.setId(fileUuids[i]);
  186. SystemFile modela = systemFileService.add(uploadFile);
  187. if (modela != null) {
  188. fileUuids[i] += "," + modela.getId();
  189. }
  190. } else {
  191. return failed(null, "上传文件失败");
  192. }
  193. }
  194. return success();
  195. }
  196. @PostMapping("/previewfile")
  197. public RESTfulResult previewfile(@RequestBody HashMap parmas) {
  198. String filename = parmas.get("filename").toString();
  199. String filepath = parmas.get("filepath").toString();
  200. if (filename == null || filename.isEmpty()) {
  201. return failed("该图片不存在!");
  202. }
  203. if (filepath == null || filepath.isEmpty()) {
  204. return failed("该图片地址不存在!");
  205. }
  206. try {
  207. String result = ftpFileUtil.downloadFile(filename, filepath);
  208. return success(result);
  209. } catch (IOException e) {
  210. e.getMessage();
  211. return failed();
  212. }
  213. }
  214. @PostMapping("/previewfile2")
  215. public RESTfulResult previewfile2(@RequestBody HashMap parmas) {
  216. try {
  217. if (parmas.get("id")==null) {
  218. return failed(1,"当前详单没有图片");
  219. }
  220. SystemFile value = systemFileMapper.selectByPrimaryKey(parmas.get("id").toString());
  221. if (value==null){
  222. return failed(1,"该文件不存在!请查验文件是否被清除或已损坏!");
  223. }
  224. String fileName = value.getFilename();
  225. String filepath = value.getFilepath();
  226. if (fileName == null || fileName.isEmpty()) {
  227. return failed(1,"该文件不存在!");
  228. }
  229. if (filepath == null || filepath.isEmpty()) {
  230. return failed(1,"该文件地址不存在!");
  231. }
  232. String result = ftpFileUtil.downloadFile(fileName, filepath);
  233. return success(result);
  234. } catch (IOException e) {
  235. e.getMessage();
  236. return failed();
  237. }
  238. }
  239. @PostMapping("/updateFile")
  240. public RESTfulResult updateFile(String alternateFields1, @ModelAttribute MultipartFile[] file) {
  241. systemFileService.delete(alternateFields1);
  242. String filenames = "";
  243. for (int i = 0; i < file.length; i++) {
  244. filenames += file[i].getOriginalFilename() + ";";
  245. }
  246. String filesid = "";
  247. if (file != null) {
  248. for (int i = 0; i < file.length; i++) {
  249. try {
  250. //获取系统时间
  251. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
  252. //获取文件名
  253. String oldName = file[i].getOriginalFilename();
  254. //取当前时间的长整形值包含毫秒
  255. String newName = IDutils.getImageName();
  256. //重新命名文件
  257. newName = newName + oldName.substring(oldName.lastIndexOf("."));
  258. String filePath = simpleDateFormat.format(new Date());
  259. //获取输入流
  260. InputStream inputStream = file[i].getInputStream();
  261. boolean result = ftpFileUtil.uploadToFtp(inputStream, filePath, newName, false);
  262. inputStream.close();
  263. if (result) {
  264. SystemFile uploadFile = new SystemFile();
  265. uploadFile.setFilename(oldName);
  266. uploadFile.setFilepath(filePath + "/" + newName);
  267. uploadFile.setId(alternateFields1);
  268. SystemFile modela = systemFileService.add(uploadFile);
  269. if (modela != null) {
  270. filesid += "," + modela.getId();
  271. }
  272. } else {
  273. return failed(null, "上传文件失败");
  274. }
  275. } catch (Exception e) {
  276. e.getMessage();
  277. }
  278. }
  279. return success(filesid);
  280. } else {
  281. return failed();
  282. }
  283. }
  284. @PostMapping("/previewfileList")
  285. public RESTfulResult previewfileList(@RequestBody HashMap map) {
  286. String uuid = map.get("uuid").toString();
  287. String[] uuidList = uuid.split(";");
  288. //遍历数组,去找文件名称和路径
  289. List<Map<String, Object>> mapList = systemFileMapper.getFileInfo(uuidList);
  290. List<Map<String, Object>> resultList = new ArrayList<>();
  291. for (Map<String, Object> parmas : mapList) {
  292. String filename = parmas.get("FILENAME").toString();
  293. String filepath = parmas.get("FILEPATH").toString();
  294. if (filename == null || filename.isEmpty()) {
  295. return failed("该图片不存在!");
  296. }
  297. if (filepath == null || filepath.isEmpty()) {
  298. return failed("该图片地址不存在!");
  299. }
  300. try {
  301. Map<String, Object> result = ftpFileUtil.downloadFileNew(filename, filepath);
  302. //如果是返回base64,则给这个;网络路径则给netUrl
  303. result.put("dataType","base");
  304. resultList.add(result);
  305. } catch (IOException e) {
  306. e.getMessage();
  307. continue;
  308. }
  309. }
  310. return success(resultList);
  311. }
  312. @PostMapping("/insertFilesReal")
  313. public RESTfulResult insertFilesReal(MultipartRequest request, String[] uuidTypes) throws Exception {
  314. //List<MultipartFile> files = new ArrayList<>();
  315. //获取多个文件
  316. MultiValueMap<String, MultipartFile> multiFileMap = request.getMultiFileMap();
  317. List<MultipartFile> files = multiFileMap.get("file");
  318. System.out.println(uuidTypes + "uuidTypes");
  319. System.out.println(request);
  320. if (files.size() == 0) {
  321. return failed("传输失败");
  322. }
  323. int index = 0;
  324. for (MultipartFile file : files) {
  325. String uuidType = uuidTypes[index];
  326. String fileMediaType = file.getContentType();
  327. String newName = uuidType.split(";")[0];
  328. String uuid = uuidType.split(";")[0];
  329. String fileType = uuidType.split(";")[1];
  330. InputStream inputStream = file.getInputStream();
  331. if (fileMediaType != null && fileMediaType.contains("image")) {
  332. newName = uuidType.split(";")[0] + "." +fileMediaType.split("/")[1];
  333. ////如果是图片
  334. //BufferedImage originalImage = ImageIO.read(inputStream);
  335. //// 确保原始图片有效且可以读取
  336. //if (originalImage != null) {
  337. // // 添加水印逻辑
  338. // inputStream = addWatermark(originalImage);
  339. // // 保存或返回带有水印的图片
  340. // // ...
  341. //}
  342. }
  343. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
  344. String filePath = "/" + fileType + simpleDateFormat.format(new Date());
  345. boolean result = ftpFileUtil.uploadToFtp(inputStream, filePath, newName, false);
  346. inputStream.close();
  347. if (result) {
  348. SystemFile uploadFile = new SystemFile();
  349. uploadFile.setFilename(newName);
  350. uploadFile.setFilepath(filePath + "/" + newName);
  351. uploadFile.setId(uuid);
  352. SystemFile modela = systemFileService.add(uploadFile);
  353. if (modela != null) {
  354. uuid += "," + modela.getId();
  355. }
  356. } else {
  357. return failed(null, "上传文件失败");
  358. }
  359. index++;
  360. }
  361. return success();
  362. }
  363. //private InputStream addWatermark(BufferedImage originalImage) {
  364. // int width = originalImage.getWidth();
  365. // int height = originalImage.getHeight();
  366. //
  367. // //BufferedImage watermarkedImage = Scalr.resize(originalImage, width, height, Scalr.Mode.FIT_EXACT);
  368. //
  369. // Graphics2D graphics = watermarkedImage.createGraphics();
  370. //
  371. // // 设置水印样式
  372. // graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  373. // Font font = new Font("Arial", Font.BOLD, 30);
  374. // graphics.setFont(font);
  375. // Color color = new Color(255, 0, 0, 128);
  376. // graphics.setColor(color);
  377. //
  378. // // 添加水印文字
  379. // graphics.drawString("Your Watermark Text", 10, height - 40); // 示例位置
  380. //
  381. // graphics.dispose();
  382. //
  383. // // 将带水印的图片转为InputStream
  384. // ByteArrayOutputStream baos = new ByteArrayOutputStream();
  385. // ImageIO.write(watermarkedImage, "jpg", baos);
  386. // InputStream watermarkedStream = new ByteArrayInputStream(baos.toByteArray());
  387. //
  388. // return watermarkedStream;
  389. //}
  390. }