ProjectFileAction.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package com.fuzamei.web;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.UnsupportedEncodingException;
  10. import java.net.URLEncoder;
  11. import java.util.LinkedHashMap;
  12. import java.util.Map;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Controller;
  17. import org.springframework.web.bind.annotation.PathVariable;
  18. import org.springframework.web.bind.annotation.PostMapping;
  19. import org.springframework.web.bind.annotation.RequestBody;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestMethod;
  22. import org.springframework.web.bind.annotation.RequestParam;
  23. import org.springframework.web.bind.annotation.ResponseBody;
  24. import org.springframework.web.multipart.MultipartFile;
  25. import com.alibaba.fastjson.JSON;
  26. import com.fuzamei.constant.Role;
  27. import com.fuzamei.entity.UserDetail;
  28. import com.fuzamei.service.ProjectFileService;
  29. import com.fuzamei.utils.HashXiZhiUtil;
  30. import com.fuzamei.utils.JSONUtil;
  31. import com.fuzamei.utils.PageDTO;
  32. import com.fuzamei.utils.ValidationUtil;
  33. @Controller
  34. @RequestMapping("/project_file")
  35. public class ProjectFileAction {
  36. @Autowired
  37. private ProjectFileService projectFileService;
  38. private static final int ROW_NUM = 10; // 分页每页显示数据的数量(固定10条数据)
  39. private static final String SP = File.separator;
  40. /**
  41. *
  42. * @Title: queryProjectFile
  43. * @Description:------------>>>>>>点击项目文档模块按钮的时候显示的分页信息&通过项目名称和时间区域的条件进行查询后显示的分页信息
  44. * TODO(获取项目文档信息,用于展示项目文档基本信息展示)
  45. * 以下为前端传递过来的参数
  46. {
  47. "userId":"XXX"
  48. "page":"1",
  49. "projectName":"",
  50. "startTime":"",
  51. "endTime":""
  52. }
  53. * @param
  54. * @param data
  55. * @param @return
  56. * 设定文件 @return Map<String,Object> 返回类型
  57. * @author ylx
  58. * @date 2017年12月15日下午1:24:40
  59. */
  60. @SuppressWarnings("unchecked")
  61. @RequestMapping(value = "/queryProjectFileInformation")
  62. @ResponseBody
  63. public Map<String, Object> queryProjectFileInformation(@RequestBody String data) {
  64. try {
  65. System.out.println("查询项目文档记录信息....");
  66. Map<String, String> map = JSON.parseObject(data, Map.class); //将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
  67. int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
  68. int page = ValidationUtil.checkMaxAndAssignInt(map.get("page"), 1); // 默认页数是第一页
  69. String projectName = ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); // 默认名称为空值
  70. long startTime = ValidationUtil.checkAndAssignDefaultLong(map.get("startTime"), 0); // 默认起始时间为0
  71. long endTime = ValidationUtil.checkAndAssignDefaultLong(map.get("endTime"), Long.MAX_VALUE); // 默认终止时间为Long最大值
  72. Map<String, Object> mapToService = new LinkedHashMap<String, Object>();
  73. mapToService.put("userId", userId); //用户id用于查询权限或者角色信息
  74. mapToService.put("startPage", (page - 1) * ROW_NUM);
  75. mapToService.put("projectName", projectName);
  76. if (startTime <= endTime) {
  77. mapToService.put("startTime", startTime);
  78. mapToService.put("endTime", endTime);
  79. } else {
  80. mapToService.put("startTime", startTime);
  81. mapToService.put("endTime", Long.MAX_VALUE);
  82. }
  83. mapToService.put("rowNum", ROW_NUM); // 默认每页显示数据是10条,可根据需求修改分页数量
  84. PageDTO pageDto = projectFileService.queryProjectFileInformation(mapToService); // 将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
  85. return JSONUtil.getJsonMap(200, true, "查询成功", pageDto);
  86. } catch (Exception e) {
  87. return JSONUtil.getJsonMap(500, false, "查询失败:"+e.getMessage(), null);
  88. }
  89. }
  90. /**
  91. *
  92. * @Title: checkoutProjectFiles
  93. * @Description: TODO--------------->>显示下载文件的提示框
  94. * 以下为前端传递过来的参数
  95. {
  96. "userId":"XXX"
  97. "projectId":"",
  98. "projectName":"",
  99. }
  100. * @param @param data
  101. * @param @return 设定文件
  102. * @return Map<String,Object> 返回类型
  103. * @author ylx
  104. * @date 2017年12月15日 下午8:09:44
  105. * @throws
  106. */
  107. @SuppressWarnings("unchecked")
  108. @RequestMapping(value = "/checkoutProjectFiles")
  109. @ResponseBody
  110. public Map<String, Object> checkoutProjectFiles(@RequestBody String data){
  111. try {
  112. System.out.println("项目文档查看....");
  113. Map<String, Object> map = JSON.parseObject(data, Map.class); // 将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
  114. int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
  115. Integer projectId = ValidationUtil.checkAndAssignDefaultInt(map.get("projectId"),0); //默认项目编号为空
  116. String projectName=ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); //默认项目名称为空值
  117. Map<String, Object> mapToService = new LinkedHashMap<String, Object>();
  118. mapToService.put("userId", userId);
  119. mapToService.put("projectId", projectId);
  120. mapToService.put("projectName", projectName);
  121. Map<String, Object> mapFromService = projectFileService.checkoutProjectFiles(map); //由于这里不需要分页,只要service传过来一个map对象即可
  122. return JSONUtil.getJsonMap(200, true, "查询成功", mapFromService); //将从service返回回来的map对象通过map对象直接返回给前端
  123. } catch (Exception e) {
  124. return JSONUtil.getJsonMap(500, false, "查询失败"+e.getMessage(), null);
  125. }
  126. }
  127. /**
  128. *
  129. * @Title: download
  130. * @Description: TODO(项目文档中的文件下载功能实现)
  131. * 前端传来一个get或post请求
  132. *
  133. * @param @param url 设定文件
  134. * @return void 返回类型
  135. * @author ylx
  136. * @date 2017年12月15日 下午6:03:53
  137. * @throws
  138. */
  139. @RequestMapping(value="/downloadProjectFile")
  140. @ResponseBody
  141. public Map<String, Object> download(HttpServletRequest request,HttpServletResponse response,@RequestParam("url") String url,@RequestParam("userId") Object id) {
  142. try {
  143. int userId=ValidationUtil.checkAndAssignInt(id);
  144. projectFileService.checkUserAuthority(userId,Role.SUPERVISION_AGENCY,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC);//查看用户是否为空及是否有权限下载项目文档文件
  145. String fileName = request.getServletContext().getRealPath("")+url; //SP是系统分隔符
  146. //如果文件不存在直接抛出异常
  147. if(!new File(fileName).exists()){
  148. throw new RuntimeException("文件不存在");
  149. }
  150. InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName)));
  151. String filename = url.substring(url.lastIndexOf("/")+1); //截取文件名
  152. filename = URLEncoder.encode(filename,"UTF-8");
  153. response.addHeader("Content-Disposition", "attachment;filename=" + filename);
  154. response.setContentType("multipart/form-data");
  155. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  156. int len = 0;
  157. while((len = bis.read()) != -1){
  158. out.write(len);
  159. out.flush();
  160. }
  161. out.close();
  162. bis.close();
  163. return JSONUtil.getJsonMap(200, true, "下载成功",null); //返回给前端一个map进行前段提示
  164. } catch (Exception e) {
  165. return JSONUtil.getJsonMap(500, false, "下载出现异常:"+e.getMessage(),null); //返回给前端一个map进行前段提示
  166. }
  167. }
  168. /**
  169. *
  170. * @Title: showUploadProjectFileInterface
  171. * @Description: TODO------------->>显示项目文档上传的界面
  172. * 以下为前端传递过来的参数
  173. {
  174. "userId":"XXX"
  175. "projectId":"",
  176. "projectName":"",
  177. }
  178. * @param @return 设定文件
  179. * @return Map<String,Object> 返回类型
  180. * @author ylx
  181. * @date 2017年12月15日 下午8:11:09
  182. * @throws
  183. */
  184. @SuppressWarnings("unchecked")
  185. @RequestMapping(value = "/showUploadProjectFileInterface")
  186. @ResponseBody
  187. public Map<String, Object> showUploadProjectFileInterface(@RequestBody String data){
  188. try {
  189. Map<String,Object> map = JSON.parseObject(data, Map.class);
  190. int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
  191. projectFileService.checkUserAuthority(userId,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC); //该权限只有 【省分行托管分中心档案保管岗】才能操作
  192. Integer projectId = ValidationUtil.checkAndAssignDefaultInt(map.get("projectId"),-1); //默认项目编号为-1,就是让你查不到
  193. String projectName=ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); //默认项目名称为空值
  194. Map<String, Object> mapToClient =new LinkedHashMap<String, Object>();
  195. mapToClient.put("projectId", projectId);
  196. mapToClient.put("projectName", projectName);
  197. return JSONUtil.getJsonMap(200, true, "查询成功", mapToClient); //将从service返回回来的map对象通过map对象直接返回给前端
  198. } catch (Exception e) {
  199. return JSONUtil.getJsonMap(500, false, "查看出现异常:"+e.getMessage(),null); //返回给前端一个map进行前段提示
  200. }
  201. }
  202. /**
  203. *
  204. * @Title: upload
  205. * @Description: TODO(用户通过上传文件的界面上传文件,需要通过表单的形式将文件上传到服务器制定的存放路径)
  206. * 以下是表单的格式信息(按照一次一个文件上传)
  207. * 【userId:用户id号
  208. * file:上传的文件
  209. * projectId:项目id号
  210. * projectName:项目名称】
  211. *
  212. * @param @param projectId
  213. * @param @param projectName
  214. * @param @param id
  215. * @return Map<String,Object> 返回类型
  216. * @author ylx
  217. * @date 2017年12月27日 下午5:32:18
  218. */
  219. @RequestMapping(value="/uploadProjetcFile",method=RequestMethod.POST)
  220. @ResponseBody
  221. public Map<String, Object> upload(@RequestParam("file") MultipartFile file,//================================>>多文件上传?待定TODO
  222. @RequestParam("projectId") String pId,
  223. @RequestParam("projectName") String pName,
  224. @RequestParam("userId") Object uId,
  225. HttpServletRequest request) {
  226. try {
  227. int userId=ValidationUtil.checkAndAssignInt(uId);
  228. UserDetail userDetail = projectFileService.checkUserAuthority(userId,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC);//查看用户是否为空及是否有权限下载项目文档文件
  229. String projectId = ValidationUtil.checkBlankAndAssignString(pId); //校验projectId并赋值
  230. String projectName = ValidationUtil.checkBlankAndAssignString(pName); //校验projectName并赋值
  231. String path = request.getServletContext().getRealPath("")+SP+"content"; //SP是系统分隔符,path是存放上传文件的父类文件夹绝对路径
  232. File dir=new File(path);
  233. if(!dir.exists()){
  234. dir.mkdirs();
  235. }
  236. String filename = file.getOriginalFilename(); //filename是上传文件的真实文件名
  237. String pathFile=path+SP+filename; //pathFile是该文件在系统中的绝对路径
  238. File newFile=new File(pathFile);
  239. file.transferTo(newFile); //文件已经上传成功
  240. String fileHash = HashXiZhiUtil.getMD5Checksum(filename); //文件上传后计算文件的hash值=============>>换hash算法这里直接换掉即可TODO
  241. Map<String, Object> mapToService =new LinkedHashMap<String, Object>();
  242. mapToService.put("userDetail", userDetail); //将用户的信息传入
  243. mapToService.put("projectId", projectId);
  244. mapToService.put("projectName", projectName);
  245. mapToService.put("url", "/content/"+filename); //将文件下载路径url通过map传到service层进行校验
  246. mapToService.put("attachmentName", filename); //将文件以附件名的形式通过map传递到service层中进行校验
  247. mapToService.put("hash", fileHash); //将上传的文件hash值放入map
  248. projectFileService.insertInformationIntoTable(mapToService); //将获取到的数据插入到各类表中
  249. Map<String, Object> mapResult = JSONUtil.getJsonMap(200, true, "上传成功",null); //返回给前端一个map进行前段提示
  250. return mapResult;
  251. } catch (Exception e) {
  252. Map<String, Object> mapResult = JSONUtil.getJsonMap(500, true, "上传出现异常:"+e.getMessage(),null); //返回给前端一个map进行前段提示
  253. return mapResult;
  254. }
  255. }
  256. }