ProjectFileAction.java 13 KB

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