123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- package com.fuzamei.web;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.net.URLEncoder;
- import java.util.LinkedHashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.multipart.MultipartFile;
- import com.alibaba.fastjson.JSON;
- import com.fuzamei.constant.HintMSG;
- import com.fuzamei.constant.Role;
- import com.fuzamei.entity.UserDetail;
- import com.fuzamei.service.ProjectFileService;
- import com.fuzamei.service.UserAuthoricationService;
- import com.fuzamei.utils.HashXiZhiUtil;
- import com.fuzamei.utils.JSONUtil;
- import com.fuzamei.utils.PageDTO;
- import com.fuzamei.utils.ValidationUtil;
- /**
- * 项目文档模块
- * @author ylx
- *
- */
- @Controller
- @RequestMapping("/project_file")
- public class ProjectFileAction {
- @Autowired
- private ProjectFileService projectFileService;
-
- @Autowired
- private UserAuthoricationService userAuthoricationService;
- private static final int ROW_NUM = 10; // 分页每页显示数据的数量(固定10条数据)
-
- private static final String SP = File.separator;
- /**
- *
- * @Title: queryProjectFile
- * @Description:------------>>>>>>点击项目文档模块按钮的时候显示的分页信息&通过项目名称和时间区域的条件进行查询后显示的分页信息
- * TODO(获取项目文档信息,用于展示项目文档基本信息展示)
- * 以下为前端传递过来的参数
- {
- "userId":"XXX",
- "page":"1",
- "projectName":"",
- "startTime":"",
- "endTime":""
- }
- * @param
- * @param data
- * @param @return
- * 设定文件 @return Map<String,Object> 返回类型
- * @author ylx
- * @date 2017年12月15日下午1:24:40
- */
- @RequestMapping(value = "/queryProjectFileInformation")
- @ResponseBody
- private Map<String, Object> queryProjectFileInformation(@RequestBody String data) {
- try {
- System.out.println("查询项目文档记录信息....");
- @SuppressWarnings("unchecked")
- Map<String, String> map = JSON.parseObject(data, Map.class); //将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
- int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
- int page = ValidationUtil.checkMinAndAssignInt(map.get("page"), 1); // 默认页数是第一页
- String projectName = ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); // 默认名称为空值
- long startTime = ValidationUtil.checkAndAssignDefaultLong(map.get("startTime"), 0); // 默认起始时间为0
- long endTime = ValidationUtil.checkAndAssignDefaultLong(map.get("endTime"), Long.MAX_VALUE); // 默认终止时间为Long最大值
- Map<String, Object> mapToService = new LinkedHashMap<String, Object>();
- mapToService.put("userId", userId); //用户id用于查询权限或者角色信息
- mapToService.put("startPage", (page - 1) * ROW_NUM);
- mapToService.put("projectName", projectName);
- mapToService.put("startTime", startTime);
- if (startTime <= endTime) {
- mapToService.put("endTime", endTime);
- } else {
- mapToService.put("endTime", Long.MAX_VALUE);
- }
- mapToService.put("rowNum", ROW_NUM); // 默认每页显示数据是10条,可根据需求修改分页数量
- PageDTO pageDto = projectFileService.queryProjectFileInformation(mapToService); // 将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
- return JSONUtil.getJsonMap(200, true, HintMSG.QUERY_SUCCESS, pageDto);
- } catch (Exception e) {
- return JSONUtil.getJsonMap(500, false, HintMSG.QUERY_FAIL+":"+e.getMessage(), null);
- }
- }
-
- /**
- *
- * @Title: checkoutProjectFiles
- * @Description: TODO--------------->>显示下载文件的提示框
- * 以下为前端传递过来的参数
- * 注意:projectId和projectName必须要传两个且都要传正确,否则不会返回任何结果
- {
- "userId":"XXX",
- "projectId":"",
- "projectName":""
- }
- * @param @param data
- * @param @return 设定文件
- * @return Map<String,Object> 返回类型
- * @author ylx
- * @date 2017年12月15日 下午8:09:44
- * @throws
- */
- @SuppressWarnings("unchecked")
- @RequestMapping(value = "/checkoutProjectFiles")
- @ResponseBody
- private Map<String, Object> checkoutProjectFiles(@RequestBody String data){
- try {
- System.out.println("项目文档查看....");
- Map<String, Object> map = JSON.parseObject(data, Map.class); // 将前端传过来的json数据转化为map对象,并将map对象传入service层进行数据校验
- int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
- Integer projectId = ValidationUtil.checkAndAssignDefaultInt(map.get("projectId"),0); //默认项目编号为空
- String projectName=ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); //默认项目名称为空值
- Map<String, Object> mapToService = new LinkedHashMap<String, Object>();
- mapToService.put("userId", userId);
- mapToService.put("projectId", projectId);
- mapToService.put("projectName", projectName);
- Map<String, Object> mapFromService = projectFileService.checkoutProjectFiles(mapToService); //由于这里不需要分页,只要service传过来一个map对象即可
- return JSONUtil.getJsonMap(200, true, HintMSG.CHECK_SUCCESS, mapFromService); //将从service返回回来的map对象通过map对象直接返回给前端
- } catch (Exception e) {
- return JSONUtil.getJsonMap(500, false, HintMSG.CHECK_FAIL+":"+e.getMessage(), null);
- }
- }
-
- /**
- *
- * @Title: download
- * @Description: TODO(项目文档中的文件下载功能实现)
- * 前端传来一个get或post请求
- *
- * @param @param url 设定文件
- * @return void 返回类型
- * @author ylx
- * @date 2017年12月15日 下午6:03:53
- * @throws
- */
- @RequestMapping(value="/downloadProjectFile")
- @ResponseBody
- private Map<String, Object> download(HttpServletRequest request,HttpServletResponse response,@RequestParam("url") String url,@RequestParam("userId") Object uId) {
- try {
- int userId=ValidationUtil.checkAndAssignInt(uId);
- // userAuthoricationService.checkUserAuthority(userId,Role.SUPERVISION_AGENCY,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC);//查看用户是否为空及是否有权限下载项目文档文件
- userAuthoricationService.checkUserAuthority(userId);//所有人都能下载
- String fileName = request.getServletContext().getRealPath("")+url; //SP是系统分隔符
- //如果文件不存在直接抛出异常
- if(!new File(fileName).exists()){
- throw new RuntimeException(HintMSG.FILE_NOT_FOUND);
- }
- InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName)));
- String filename = url.substring(url.lastIndexOf("/")+1); //截取文件名
- filename = URLEncoder.encode(filename,"UTF-8");
- response.addHeader("Content-Disposition", "attachment;filename=" + filename);
- response.setContentType("multipart/form-data");
- BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
- int len = 0;
- while((len = bis.read()) != -1){
- out.write(len);
- out.flush();
- }
- out.close();
- bis.close();
- return JSONUtil.getJsonMap(200, true, HintMSG.DOWNLOAD_SUCCESS,null); //返回给前端一个map进行前段提示
- } catch (Exception e) {
- return JSONUtil.getJsonMap(500, false, HintMSG.DOWNLOAD_FAIL+":"+e.getMessage(),null); //返回给前端一个map进行前段提示
- }
- }
-
- /**
- *
- * @Title: showUploadProjectFileInterface
- * @Description: TODO------------->>显示项目文档上传的界面
- * 以下为前端传递过来的参数
- {
- "userId":"XXX",
- "projectId":"",
- "projectName":"",
- }
- * @param @return 设定文件
- * @return Map<String,Object> 返回类型
- * @author ylx
- * @date 2017年12月15日 下午8:11:09
- * @throws
- */
- @SuppressWarnings("unchecked")
- @RequestMapping(value = "/showUploadProjectFileInterface")
- @ResponseBody
- private Map<String, Object> showUploadProjectFileInterface(@RequestBody String data){
- try {
- Map<String,Object> map = JSON.parseObject(data, Map.class);
- int userId = ValidationUtil.checkAndAssignInt(map.get("userId")); //userId只要是一个int类型即可
- userAuthoricationService.checkUserAuthority(userId,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC); //该权限只有 【省分行托管分中心档案保管岗】才能操作
- Integer projectId = ValidationUtil.checkAndAssignDefaultInt(map.get("projectId"),-1); //默认项目编号为-1,就是让你查不到
- String projectName=ValidationUtil.checkBlankStringAndAssignEmptyIfIsBlank(map.get("projectName")); //默认项目名称为空值
- Map<String, Object> mapToClient =new LinkedHashMap<String, Object>();
- mapToClient.put("projectId", projectId);
- mapToClient.put("projectName", projectName);
- return JSONUtil.getJsonMap(200, true, HintMSG.CHECK_SUCCESS, mapToClient); //将从service返回回来的map对象通过map对象直接返回给前端
- } catch (Exception e) {
- return JSONUtil.getJsonMap(500, false, HintMSG.CHECK_FAIL+":"+e.getMessage(),null); //返回给前端一个map进行前段提示
- }
- }
-
- /**
- *
- * @Title: upload
- * @Description: TODO(用户通过上传文件的界面上传文件,需要通过表单的形式将文件上传到服务器制定的存放路径)
- * 以下是表单的格式信息(按照一次一个文件上传)
- * 【userId:用户id号
- * file:上传的文件
- * projectId:项目id号
- * projectName:项目名称】
- *
- * @param @param projectId
- * @param @param projectName
- * @param @param id
- * @return Map<String,Object> 返回类型
- * @author ylx
- * @date 2017年12月27日 下午5:32:18
- */
- @RequestMapping(value="/uploadProjetcFile",method=RequestMethod.POST)
- @ResponseBody
- private Map<String, Object> upload(@RequestParam("file") MultipartFile file,//================================>>多文件上传?待定TODO
- @RequestParam("projectId") String pId,
- @RequestParam("projectName") String pName,
- @RequestParam("userId") Object uId,
- HttpServletRequest request) {
- try {
- int userId=ValidationUtil.checkAndAssignInt(uId);
- UserDetail userDetail = userAuthoricationService.checkUserAuthority(userId,Role.ARCHIVE_KEEPING_POS_OF_PBBTBC);//查看用户是否为空及是否有权限下载项目文档文件
- String projectId = ValidationUtil.checkBlankAndAssignString(pId); //校验projectId并赋值
- String projectName = ValidationUtil.checkBlankAndAssignString(pName); //校验projectName并赋值
- if(file.isEmpty()){
- throw new RuntimeException(HintMSG.FILE_CANT_BE_NULL); //校验上传的文件是否为空
- }
- String path = request.getServletContext().getRealPath("")+SP+"content"; //SP是系统分隔符,path是存放上传文件的父类文件夹绝对路径====>>这个路径要改TODO
- File dir=new File(path);
- if(!dir.exists()){
- dir.mkdirs();
- }
- String filename = file.getOriginalFilename(); //filename是上传文件的真实文件名
- String pathFile=path+SP+filename; //pathFile是该文件在系统中的绝对路径
- File newFile=new File(pathFile);
-
- String fileHash = HashXiZhiUtil.getMD5Checksum(filename); //文件上传后计算文件的hash值=============>>换hash算法这里直接换掉即可TODO
- Map<String, Object> mapToService =new LinkedHashMap<String, Object>();
- mapToService.put("userDetail", userDetail); //将用户的信息传入
- mapToService.put("projectId", projectId);
- mapToService.put("projectName", projectName);
- mapToService.put("url", "/content/"+filename); //将文件下载路径url通过map传到service层进行校验
- mapToService.put("attachmentName", filename); //将文件以附件名的形式通过map传递到service层中进行校验
- mapToService.put("hash", fileHash); //将上传的文件hash值放入map
- projectFileService.insertInformationIntoTable(mapToService); //将获取到的数据插入到各类表中
-
- //文件最后上传,防止出现垃圾数据
- file.transferTo(newFile); //文件已经上传成功
-
- Map<String, Object> mapResult = JSONUtil.getJsonMap(200, true, HintMSG.UPLOAD_SUCCESS,null); //返回给前端一个map进行前段提示
- return mapResult;
- } catch (Exception e) {
- Map<String, Object> mapResult = JSONUtil.getJsonMap(500, true, HintMSG.UPLOAD_FAIL+":"+e.getMessage(),null); //返回给前端一个map进行前段提示
- return mapResult;
- }
- }
-
- }
|