whycxzp
2021-09-27 d815151a1b5fc0d70df80cf80cb01b7636468d36
src/main/java/com/whyc/controller/ProjectManageController.java
@@ -1,24 +1,28 @@
package com.whyc.controller;
import com.github.pagehelper.PageInfo;
import com.whyc.config.MyProps;
import com.whyc.config.ServerConfig;
import com.whyc.dto.Response;
import com.whyc.pojo.ProjectArchiveManage;
import com.whyc.pojo.ProjectManage;
import com.whyc.service.ProjectArchiveManageService;
import com.whyc.service.ProjectProcessManageService;
import com.whyc.util.FileUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -30,6 +34,12 @@
public class ProjectManageController {
    @Autowired
    private MyProps myProps;
    @Autowired
    private ServerConfig serverConfig;
    @Autowired
    private ProjectProcessManageService service;
@@ -37,36 +47,23 @@
    private ProjectArchiveManageService archiveManageService;
    @GetMapping("all")
    @ApiOperation(value = "项目过程管理-查询所有")
    public Response<List<ProjectManage>> searchAll() {
        return service.searchAll();
    }
    @GetMapping("byCondition")
    @ApiOperation(notes = "项目过程管理",value = "项目过程管理-条件查询")
    public Response<List<ProjectManage>> searchByCondition(@ApiParam(value = "申报日期 格式 2021/01/28",required = true) @RequestParam Date proCreatedate,
                                                           @ApiParam(value = "项目类型",required = true)@RequestParam String proSort,
                                                           @ApiParam(value = "项目状态",required = true)@RequestParam int proState,
                                                           @ApiParam(value = "项目编号",required = true)@RequestParam String proNum) {
        ProjectManage projectManage = new ProjectManage();
        projectManage.setProCreatedate(proCreatedate);
        projectManage.setProSort(proSort);
        projectManage.setProState(proState);
        projectManage.setProNum(proNum);
        return service.searchByCondition(projectManage);
    @PostMapping("progressByCondition")
    @ApiOperation(notes = "项目过程管理", value = "项目过程管理-查询分页-根据筛选条件")
    public Response<PageInfo<ProjectManage>> searchByCondition(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody ProjectManage projectManage) {
        return service.searchByCondition(pageNum, pageSize, projectManage);
    }
    @PostMapping("add")
    @ApiOperation(value = "新建项目",notes = "notes中存文件地址用 ; 分隔 {\n" +
            "  \"proNum\": S0900033,\n" +
            "  \"proName\": \"\",\n" +
            "  \"proNameCode\": \"yyyyMMddHHmmss格式字符串\",\n" +
    @ApiOperation(value = "项目过程管理-新建项目",notes = "fileList 存文件地址 {\n" +
            "  \"fileList\": [\n" +
            "    \n" +
            "  ],\n" +
            "  \"proNum\": \"S0900033\",\n" +
            "  \"proName\": \"舰船电气动力试验\",\n" +
            "  \"proSort\": 0,\n" +
            "  \"proAdmin\": \"张三\",\n" +
            "  \"proTel\": 13800003131,\n" +
            "  \"proDepartment\": \"xxxx\",\n" +
            "  \"proTel\": \"13800003131\",\n" +
            "  \"proCreatedate\": \"2021-03-27 08:18:27\",\n" +
            "  \"proExecutionDate\": \"2021-03-27 08:18:27\",\n" +
            "  \"proExecutionDate1\": \"2021-03-27 08:18:27\",\n" +
@@ -75,13 +72,13 @@
            "  \"proFundingSource\": \"经费来源\",\n" +
            "  \"proContent\": \" \",\n" +
            "  \"proState\": 0,\n" +
            "  \"note\": \"拼接多个文件地址\"\n" +
            "  \"proProgress\": 0\n" +
            "}")
    public Response add(@RequestBody ProjectManage projectManage) {
    public Response add(@RequestBody @Valid ProjectManage projectManage) {
        Response response = service.add(projectManage);
        return response;
    }
    /**
     * 文件存储后地址更新到对应项目编号的地址,一个项目对应多个文件 db_experiment.tb_project_archive_manage
@@ -90,49 +87,59 @@
     * @param file
     * @return
     */
    @PostMapping("upload")
    @ApiOperation(notes = "返回文件地址,确认时提交保存到字段", value = "文档材料添加(选择文件)")
    public Response upload(@RequestParam("file") MultipartFile file) {
        // 获取原始名字
        String originalFilename = file.getOriginalFilename();
        // 获取后缀名
        // String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 文件保存路径、后期考虑按日期或者月份建dir
        String filePath = "c:/upload/";
        // 文件重命名,防止重复,预览时需要显示原文件名 _ 切割
        String fileName = filePath + UUID.randomUUID() + "_" + originalFilename;
        // 文件对象
        File dest = new File(fileName);
        // 判断路径是否存在,如果不存在则创建
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
    @PostMapping("/uploads")
    @ApiOperation(notes = "返回文件地址,确认时提交保存到字段", value = "项目过程管理-文档材料添加(多选)")
    public Response uploads(MultipartFile[] file) throws IOException {
        Response<Object> response = new Response<>();
        HashMap<Object, Object> map = new HashMap<>();
        try {
            // 保存到服务器中
            file.transferTo(dest);
            map.put("文件类型:", file.getContentType());
            map.put("原文件名:", originalFilename);
            map.put("是否为空:", file.isEmpty());
            Double size = file.getSize() * 0.01 / 1024 / 1024 * 100;
            String douStr = String.format("%.2f", size);
            map.put("文件大小:", douStr+" M");
            map.put("文件地址:",fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return response.setMsg(0, "上传失败");
        if (file.length == 0) {
            return response.setMsg(0, "请选择要上传的文件");
        }
        response.setCode(1);
        response.setData(map);
        return response;
        ArrayList<Object> list = new ArrayList<>();
//            String filePath = myProps.getFilePath();
        String uploadPath = FileUtils.getProjectPath();
//        System.out.println("uploadPath = " + uploadPath);
        for (MultipartFile multipartFile : file) {
            if (multipartFile.isEmpty()) {
                return response.setMsg(0, "请选择要上传的文件");
            }
            byte[] fileBytes = multipartFile.getBytes();
            //取得当前上传文件的文件名称
            String originalFilename = multipartFile.getOriginalFilename();
            //生成文件名
            String fileName = UUID.randomUUID() + "_" + originalFilename;
            HashMap<Object, Object> map = new HashMap<>();
            map.put("name", originalFilename);
            String url = serverConfig.getUrl();
            map.put("url", url + "/uploadFile/" + fileName);
            try {
                FileUtils.uploadFile(fileBytes, uploadPath, fileName);
            } catch (IOException e) {
                e.printStackTrace();
                return response.setMsg(0, "上传失败");
            }
            list.add(map);
        }
        response.setData(list);
        return response.setMsg(1, "上传成功");
    }
    @GetMapping("/download")
    @ApiOperation(notes = "需要在地址栏测试",value = "文档材料下载")
    public Object download(HttpServletResponse response, @RequestParam String filePath,@RequestParam String fileName) {
        Response<Object> result = new Response<>();
        File file = new File( filePath);
    @ApiOperation(notes = "需要在地址栏测试 http://localhost:8090/projectManage/download?fileName=申请书.pdf",value = "项目过程管理-文档材料下载")
    public String download(HttpServletResponse response, @ApiParam(value = "文件路径",required = true)@RequestParam String filePath) {
        String fileName = "";
        if (filePath.length() > 10&&filePath.contains("/")) {   //IP地址+文件名
            int lastIndexOf = filePath.lastIndexOf("/");
            fileName = filePath.substring(lastIndexOf);
        } else {
            return "filePath is Error";
        }
        String projectPath = FileUtils.getProjectPath();
        File file = new File( projectPath+fileName);
        if (file.exists()) {
            try {
                fileName= new String(fileName.getBytes("gbk"), "ISO8859-1");
@@ -154,10 +161,12 @@
                    outputStream.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
                return result.setMsg(1,"下载成功");
//               return result.setMsg(1,"下载成功");
               return "downloadSuccessful";
            } catch (Exception e) {
                e.printStackTrace();
                return result.setMsg(0,"下载失败");
//                return result.setMsg(0,"下载失败");
                return "downloadFailed";
            } finally {
                if (bis != null) {
                    try {
@@ -174,13 +183,15 @@
                    }
                }
            }
        }else{
            return "fileDoesNotExist";
        }
        return result.setMsg(0,"文件不存在");
    }
    @GetMapping("managesState")
    @ApiOperation(notes = "", value = "项目管理-己确认/未确认阶段查询")
    @ApiOperation(notes = "", value = "项目过程管理-己确认/未确认阶段查询")
    public Response<Object> searchManageStateByCondition(@ApiParam(value = "项目编号", required = true) @RequestParam String proNum,
                                                         @ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode) {
        ProjectManage projectManage = new ProjectManage();
@@ -195,22 +206,28 @@
     * @return
     */
    @PutMapping("updateManageState")
    @ApiOperation(notes = "项目进度确认1-6 对应 立项-审批-研究-结题-验收-归档",value = "项目管理-未确认阶段更新")
    public Response updateManageState(@ApiParam(value = "项目编号", required = true) @RequestParam String proNum,
                                      @ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode,
                                      @ApiParam(value = "项目进度确认1-6",required = true)@RequestParam int proProgress,
                                      @ApiParam(value = "文档上传保存地址(如果无传空字符串)",required = true)@RequestParam String proFilePath) {
        ProjectManage projectManage = new ProjectManage();
        projectManage.setProNum(proNum);
        projectManage.setProNameCode(proNameCode);
        projectManage.setProProgress(proProgress);
        projectManage.setNote(proFilePath);
    @ApiOperation(notes = "项目进度确认1-6 对应 立项-审批-研究-结题-验收-归档",value = "项目过程管理-未确认阶段更新")
    public Response updateManageState(@RequestBody ProjectManage projectManage) {
        return service.updateManageState(projectManage);
    }
    @PutMapping("updateArchive")
    @ApiOperation(notes = "",value = "项目过程管理-归档")
    public Response updateArchive(@ApiParam(value = "项目编号", required = true) @RequestParam String proNum,
                                  @ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode) {
        ProjectManage projectManage = new ProjectManage();
        projectManage.setProNum(proNum);
        projectManage.setProNameCode(proNameCode);
        projectManage.setProProgress(6);
        return service.updateProjectProgress(projectManage);
    }
    @GetMapping("searchDoc")
    @ApiOperation(notes = "项目过程管理-项目管理",value = "文档材料查询")
    @ApiOperation(notes = "项目过程管理-项目管理",value = "项目过程管理-文档材料查询")
    public  Response searchDocumentation(@ApiParam(value = "项目编号", required = true) @RequestParam String proNum,
                                         @ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode){
        ProjectArchiveManage projectArchiveManage = new ProjectArchiveManage();
@@ -220,8 +237,8 @@
    }
    @Delete("delDoc")
    @ApiOperation(notes = "项目过程管理-项目管理-己确认阶段",value = "文档材料删除")
    @DeleteMapping("delDoc")
    @ApiOperation(notes = "项目过程管理-项目管理",value = "项目过程管理-文档材料删除")
    public  Response delDocumentation(@ApiParam(value = "项目编号", required = true) @RequestParam String proNum,
                                      @ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode,
                                      @ApiParam(value = "文档路径", required = true) @RequestParam String proFilePath){
@@ -232,26 +249,12 @@
        return  archiveManageService.delDocumentation(projectArchiveManage);
    }
    @GetMapping("archiveAll")
    @ApiOperation(value = "项目归档管理-查询所有")
    public Response<List<ProjectManage>> searchArchiveAll() {
        return archiveManageService.searchArchiveAll();
    }
    @GetMapping("archiveByCondition")
    @ApiOperation(value = "项目归档管理-条件查询")
    public Response searchArchiveByCondition(@ApiParam(value = "开始日期 格式 2021/03/27",required = true) @RequestParam Date proExecutionDate,
                                             @ApiParam(value = "归档日期 格式 2021/03/27",required = true)@RequestParam Date proArchiveDate,
                                             @ApiParam(value = "项目类型",required = true)@RequestParam String proSort,
                                             @ApiParam(value = "项目编号",required = true)@RequestParam String proNum) {
    @PostMapping("archiveByCondition")
    @ApiOperation(value = "项目归档管理-查询分页-根据筛选条件")
    public Response<PageInfo<ProjectManage>> searchArchiveByCondition(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody ProjectManage projectManage) {
        ProjectManage pm = new ProjectManage();
        pm.setProExecutionDate(proExecutionDate);
        pm.setProArchiveDate(proArchiveDate);
        pm.setProSort(proSort);
        pm.setProNum(proNum);
        return archiveManageService.searchArchiveByCondition(pm);
        return archiveManageService.searchArchiveByCondition(pageNum,pageSize,projectManage);
    }
    @GetMapping("archiveProjectInfo")
@@ -284,17 +287,13 @@
    /**
     * @param proNameCode
     * @param proNum
     * @return  实验名称、上传日期、归档日期 (操作TODO)
     * @return 实验名称、试验日期、结论字段 etc
     */
    @GetMapping("archiveExperimentData")
    @ApiOperation(notes = "(操作TODO)",value = "项目归档管理-试验数据")
    public Response searchArchiveExperimentData(@ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode,
                                                                 @ApiParam(value = "项目编号", required = true) @RequestParam String proNum) {
        ProjectArchiveManage pam = new ProjectArchiveManage();
        pam.setProNum(proNum);
        pam.setProNameCode(proNameCode);
        return archiveManageService.searchArchiveExperimentData(pam);
    @ApiOperation(notes = "TODO 文件格式和下载地址", value = "项目归档管理-试验数据")
    public Response searchArchiveExperimentData(@ApiParam(value = "项目名称代码", required = true) @RequestParam String proNameCode) {
    //TODO fileName file
        return archiveManageService.searchArchiveExperimentData(proNameCode);
    }
    @GetMapping("archiveTechnologicalAchievements")
@@ -310,48 +309,7 @@
    /**
     * 文件上传
     * achievement_name 成果类型
     */
/*
    @RequestMapping("/upload")
    public Response upload(MultipartFile file) {
        try {
            if (file != null) {
                File parentFile = createParentFile();
                String fileName = file.getOriginalFilename();
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                String uuid = IdUtil.simpleUUID();
                fileName = uuid + suffix;
                File imageFile = new File(parentFile, fileName);
                FileUtil.writeFromStream(file.getInputStream(), imageFile);
                */
/**
                 * 年月日目录
                 *//*
                String fileDay = DateUtil.thisYear() + "/" + (DateUtil.thisMonth() + 1) + "/"
                        + DateUtil.thisDayOfMonth();
                String imagePath = SystemConstant.FILE + "/document/" + fileDay + "/" + fileName;
                */
/**
                 * 实时转换
                 *//*
                File toFile = new File(parentFile, uuid + ".pdf");
                documentConverter.convert(imageFile).to(toFile).execute();
                return Result.ok(imagePath);
            } else {
                return Result.error();
            }
        } catch (Exception e) {
            LOGGER.error("转换异常{}",e);
            return Result.error();
        }
    }
*/
}