13 Incheckningar ca1a34684b ... 5360e3b876

Upphovsman SHA1 Meddelande Datum
  hxy 5360e3b876 11482-【CR】【投资系统】增加审批流程-背调审批流程、以及项目详情显示更改、项目阶段显示项目流程非关闭 1 månad sedan
  hxy a2b973d8d8 11482-【CR】【投资系统】增加审批流程-各个流程附件增加、删除、修改、回显 1 månad sedan
  hxy 64bb2de876 11482-【CR】【投资系统】增加审批流程-去掉权限 1 månad sedan
  hxy 55c0a90594 11482-【CR】【投资系统】增加审批流程-背调流程中的指定审批人 1 månad sedan
  hxy a7b6f01a50 11482-【CR】【投资系统】增加审批流程-研究资料管理-注释更改 1 månad sedan
  hxy 1b0dc3b8a4 11482-【CR】【投资系统】增加审批流程-文件资料信息-新加字段 1 månad sedan
  hxy b3044842d7 11482-【CR】【投资系统】增加审批流程-文件资料管理-分为7项 1 månad sedan
  hxy bf58ac330d 11482-【CR】【投资系统】增加审批流程-附件新增和查询方法 1 månad sedan
  hxy 879a4e7b4f 11482-【CR】【投资系统】增加审批流程-项目机会状态 1 månad sedan
  hxy bdfc857eee 11482-【CR】【投资系统】增加审批流程-各个流程列表信息-项目阶段接口 1 månad sedan
  hxy 8e3f7384e7 11482-【CR】【投资系统】增加审批流程-导出和可申请列表接口 1 månad sedan
  hxy 23b1676a28 11482-【CR】【投资系统】增加审批流程-可申请列表 1 månad sedan
  hxy 1802ec1a94 11482-【CR】【投资系统】增加审批流程-注释更改 1 månad sedan
100 ändrade filer med 8540 tillägg och 634 borttagningar
  1. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/BPController.java
  2. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/DecisionReportController.java
  3. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/FinancialEvaluationController.java
  4. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/InitiationReportController.java
  5. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/LegalDueDiligenceController.java
  6. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/MarketResearchController.java
  7. 155 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/ProjectTechnologyController.java
  8. 0 10
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectInvestigateController.java
  9. 0 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectPoolController.java
  10. 188 10
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ApprovalController.java
  11. 187 14
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DecisionController.java
  12. 187 5
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestigateController.java
  13. 160 37
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestmentOpportunityController.java
  14. 473 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ProjectController.java
  15. 127 22
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/TerminationController.java
  16. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/FinancialStatementsController.java
  17. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/InvestmentAmountController.java
  18. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/InvestmentPotentialController.java
  19. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectApprovalController.java
  20. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectFounderProfileController.java
  21. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectInitiationKeyController.java
  22. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectMeetingMinutesController.java
  23. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/RiskAssessmentController.java
  24. 111 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ApproveUserController.java
  25. 14 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TUnifyFileController.java
  26. 21 3
      ruoyi-common/src/main/java/com/ruoyi/common/enums/FileType.java
  27. 55 10
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/DueTaskListener.java
  28. 0 1
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IApprovalService.java
  29. 6 6
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IInvestmentOpportunityService.java
  30. 45 9
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/ApprovalServiceImpl.java
  31. 23 9
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/DecisionServiceImpl.java
  32. 35 11
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestigateServiceImpl.java
  33. 23 22
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestmentOpportunityServiceImpl.java
  34. 6 5
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/TerminationServiceImpl.java
  35. 4 0
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectApproval.java
  36. 4 0
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectDecision.java
  37. 35 2
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectInformation.java
  38. 0 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectApprovalVo.java
  39. 0 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectDecisionVo.java
  40. 0 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectInvestigateVo.java
  41. 0 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectTerminationVo.java
  42. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TProjectPoolVo.java
  43. 0 2
      ruoyi-system/src/main/java/com/ruoyi/invest/mapper/ApprovalMapper.java
  44. 8 9
      ruoyi-system/src/main/java/com/ruoyi/invest/mapper/InvestmentOpportunityMapper.java
  45. 7 0
      ruoyi-system/src/main/java/com/ruoyi/invest/mapper/TProjectInformationMapper.java
  46. 8 0
      ruoyi-system/src/main/java/com/ruoyi/invest/service/ITProjectInformationService.java
  47. 10 1
      ruoyi-system/src/main/java/com/ruoyi/invest/service/impl/TProjectInformationServiceImpl.java
  48. 22 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ApproveUser.java
  49. 43 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ApproveUserMapper.java
  50. 8 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  51. 46 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IApproveUserService.java
  52. 78 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ApproveUserServiceImpl.java
  53. 6 1
      ruoyi-system/src/main/java/com/ruoyi/tool/mapper/TUnifyFileMapper.java
  54. 18 1
      ruoyi-system/src/main/java/com/ruoyi/tool/service/ITUnifyFileService.java
  55. 44 7
      ruoyi-system/src/main/java/com/ruoyi/tool/service/impl/TUnifyFileServiceImpl.java
  56. 5 5
      ruoyi-system/src/main/resources/mapper/invest/ApprovalMapper.xml
  57. 1 0
      ruoyi-system/src/main/resources/mapper/invest/DecisionMapper.xml
  58. 4 3
      ruoyi-system/src/main/resources/mapper/invest/InvestigateMapper.xml
  59. 47 77
      ruoyi-system/src/main/resources/mapper/invest/InvestmentOpportunityMapper.xml
  60. 14 2
      ruoyi-system/src/main/resources/mapper/invest/TProjectInformationMapper.xml
  61. 4 0
      ruoyi-system/src/main/resources/mapper/invest/TProjectPoolMapper.xml
  62. 1 0
      ruoyi-system/src/main/resources/mapper/invest/TerminationMapper.xml
  63. 94 0
      ruoyi-system/src/main/resources/mapper/system/ApproveUserMapper.xml
  64. 5 1
      ruoyi-system/src/main/resources/mapper/tool/TUnifyFileMapper.xml
  65. 44 0
      ruoyi-ui/src/api/file/businessPlan.js
  66. 44 0
      ruoyi-ui/src/api/file/decisionReport.js
  67. 44 0
      ruoyi-ui/src/api/file/financialEvaluation.js
  68. 44 0
      ruoyi-ui/src/api/file/initiationReport.js
  69. 44 0
      ruoyi-ui/src/api/file/legalDueDiligence.js
  70. 44 0
      ruoyi-ui/src/api/file/marketResearch.js
  71. 44 0
      ruoyi-ui/src/api/file/projectTechnology.js
  72. 8 0
      ruoyi-ui/src/api/project/approval/pool.js
  73. 9 0
      ruoyi-ui/src/api/project/decision/pool.js
  74. 3 18
      ruoyi-ui/src/api/project/investOpp/pool.js
  75. 25 1
      ruoyi-ui/src/api/project/investigate/pool.js
  76. 67 0
      ruoyi-ui/src/api/project/pool.js
  77. 9 8
      ruoyi-ui/src/api/project/termination/pool.js
  78. 12 1
      ruoyi-ui/src/api/system/file.js
  79. 4 4
      ruoyi-ui/src/layout/components/Sidebar/Item.vue
  80. 2 2
      ruoyi-ui/src/permission.js
  81. 11 5
      ruoyi-ui/src/router/index.js
  82. 7 7
      ruoyi-ui/src/store/modules/user.js
  83. 613 0
      ruoyi-ui/src/views/file/businessPlan/index.vue
  84. 611 0
      ruoyi-ui/src/views/file/decisionReport/index.vue
  85. 611 0
      ruoyi-ui/src/views/file/financialEvaluation/index.vue
  86. 611 0
      ruoyi-ui/src/views/file/initiationReport/index.vue
  87. 611 0
      ruoyi-ui/src/views/file/legalDueDiligence/index.vue
  88. 611 0
      ruoyi-ui/src/views/file/marketResearch/index.vue
  89. 611 0
      ruoyi-ui/src/views/file/projectTechnology/index.vue
  90. 16 0
      ruoyi-ui/src/views/invest/components/fileItem.vue
  91. 2 2
      ruoyi-ui/src/views/login.vue
  92. 271 196
      ruoyi-ui/src/views/project/approval/audit.vue
  93. 27 15
      ruoyi-ui/src/views/project/approval/detail.vue
  94. 16 1
      ruoyi-ui/src/views/project/approval/edit.vue
  95. 49 11
      ruoyi-ui/src/views/project/approval/myTask.vue
  96. 85 47
      ruoyi-ui/src/views/project/approval/applyList.vue
  97. 38 5
      ruoyi-ui/src/views/project/approval/projectItem.vue
  98. 11 6
      ruoyi-ui/src/views/project/decision/audit.vue
  99. 10 5
      ruoyi-ui/src/views/project/decision/detail.vue
  100. 0 0
      ruoyi-ui/src/views/project/decision/edit.vue

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/BPController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 商业计划书Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "文件资料管理-商业计划书")
+@RestController
+@RequestMapping("/file/businessPlan")
+public class BPController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询商业计划书列表
+     */
+    @ApiOperation("查询商业计划书列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("a");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商业计划书列表
+     */
+    @ApiOperation("导出商业计划书列表")
+    @Log(title = "商业计划书", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("a");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "商业计划书数据");
+    }
+
+    /**
+     * 获取商业计划书详细信息
+     */
+    @ApiOperation("获取商业计划书详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增商业计划书
+     */
+    @ApiOperation("新增商业计划书")
+    @Log(title = "商业计划书", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//商业计划书ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:商业计划书
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(商业计划书)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改商业计划书
+     */
+    @ApiOperation("修改商业计划书")
+    @Log(title = "商业计划书", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//商业计划书ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:商业计划书
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除商业计划书
+     */
+    @ApiOperation("删除商业计划书")
+    @Log(title = "商业计划书", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/DecisionReportController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 投决申请报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "文件资料管理-投决申请报告")
+@RestController
+@RequestMapping("/file/decisionReport")
+public class DecisionReportController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询投决申请报告列表
+     */
+    @ApiOperation("查询投决申请报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("q");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出投决申请报告列表
+     */
+    @ApiOperation("导出投决申请报告列表")
+    @Log(title = "投决申请报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("q");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "投决申请报告数据");
+    }
+
+    /**
+     * 获取投决申请报告详细信息
+     */
+    @ApiOperation("获取投决申请报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增投决申请报告
+     */
+    @ApiOperation("新增投决申请报告")
+    @Log(title = "投决申请报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//投决申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:投决申请报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(投决申请报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改投决申请报告
+     */
+    @ApiOperation("修改投决申请报告")
+    @Log(title = "投决申请报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//投决申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:投决申请报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除投决申请报告
+     */
+    @ApiOperation("删除投决申请报告")
+    @Log(title = "投决申请报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/FinancialEvaluationController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 财务评估报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "研究资料管理-财务评估报告")
+@RestController
+@RequestMapping("/file/financialEvaluation")
+public class FinancialEvaluationController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询财务评估报告列表
+     */
+    @ApiOperation("查询财务评估报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("o");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出财务评估报告列表
+     */
+    @ApiOperation("导出财务评估报告列表")
+    @Log(title = "财务评估报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("o");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "财务评估报告数据");
+    }
+
+    /**
+     * 获取财务评估报告详细信息
+     */
+    @ApiOperation("获取财务评估报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增财务评估报告
+     */
+    @ApiOperation("新增财务评估报告")
+    @Log(title = "财务评估报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//财务评估报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:财务评估报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(财务评估报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改财务评估报告
+     */
+    @ApiOperation("修改财务评估报告")
+    @Log(title = "财务评估报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//财务评估报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:财务评估报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除财务评估报告
+     */
+    @ApiOperation("删除财务评估报告")
+    @Log(title = "财务评估报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/InitiationReportController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 立项申请报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "文件资料管理-立项申请报告")
+@RestController
+@RequestMapping("/file/initiationReport")
+public class InitiationReportController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询立项申请报告列表
+     */
+    @ApiOperation("查询立项申请报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("l");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出立项申请报告列表
+     */
+    @ApiOperation("导出立项申请报告列表")
+    @Log(title = "立项申请报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("l");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "立项申请报告数据");
+    }
+
+    /**
+     * 获取立项申请报告详细信息
+     */
+    @ApiOperation("获取立项申请报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增立项申请报告
+     */
+    @ApiOperation("新增立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//立项申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:立项申请报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(立项申请报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改立项申请报告
+     */
+    @ApiOperation("修改立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//立项申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:立项申请报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除立项申请报告
+     */
+    @ApiOperation("删除立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/LegalDueDiligenceController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 法务评估报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "研究资料管理-法务评估报告")
+@RestController
+@RequestMapping("/file/legalDueDiligence")
+public class LegalDueDiligenceController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询立项申请报告列表
+     */
+    @ApiOperation("查询立项申请报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("p");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出立项申请报告列表
+     */
+    @ApiOperation("导出立项申请报告列表")
+    @Log(title = "立项申请报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("p");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "立项申请报告数据");
+    }
+
+    /**
+     * 获取立项申请报告详细信息
+     */
+    @ApiOperation("获取立项申请报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增立项申请报告
+     */
+    @ApiOperation("新增立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//立项申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:立项申请报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(立项申请报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改立项申请报告
+     */
+    @ApiOperation("修改立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//立项申请报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:立项申请报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除立项申请报告
+     */
+    @ApiOperation("删除立项申请报告")
+    @Log(title = "立项申请报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/MarketResearchController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目行研报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "研究资料管理-项目行研报告")
+@RestController
+@RequestMapping("/file/marketResearch")
+public class MarketResearchController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询项目行研报告列表
+     */
+    @ApiOperation("查询项目行研报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("m");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出项目行研报告列表
+     */
+    @ApiOperation("导出项目行研报告列表")
+    @Log(title = "项目行研报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("m");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "项目行研报告数据");
+    }
+
+    /**
+     * 获取项目行研报告详细信息
+     */
+    @ApiOperation("获取项目行研报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增项目行研报告
+     */
+    @ApiOperation("新增项目行研报告")
+    @Log(title = "项目行研报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//项目行研报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:项目行研报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(项目行研报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改项目行研报告
+     */
+    @ApiOperation("修改项目行研报告")
+    @Log(title = "项目行研报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//项目行研报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:项目行研报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除项目行研报告
+     */
+    @ApiOperation("删除项目行研报告")
+    @Log(title = "项目行研报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 155 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/ProjectTechnologyController.java

@@ -0,0 +1,155 @@
+package com.ruoyi.web.controller.file;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectCirculationService;
+import com.ruoyi.invest.service.ITProjectInformationService;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.tool.service.ITUnifyFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目技术报告Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-26
+ */
+@Api(tags = "研究资料管理-项目技术报告")
+@RestController
+@RequestMapping("/file/projectTechnology")
+public class ProjectTechnologyController extends BaseController
+{
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+    @Autowired
+    private ITProjectCirculationService tProjectCirculationService;
+
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询项目技术报告列表
+     */
+    @ApiOperation("查询项目技术报告列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectInformation tProjectInformation)
+    {
+        startPage();
+        tProjectInformation.setFileType("n");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出项目技术报告列表
+     */
+    @ApiOperation("导出项目技术报告列表")
+    @Log(title = "项目技术报告", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setFileType("n");
+        List<TProjectInformation> list = tProjectInformationService.selectTProjectInformationList(tProjectInformation)
+                .stream().map(n -> {
+                    n.setProjectPoolId(n.gettProjectPool().getProjectName());
+                    n.setFileType(dictDataService.selectDictLabel("file_type",n.getFileType()));
+                    n.setProjectStage(dictDataService.selectDictLabel("project_stage",n.getProjectStage()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectInformation> util = new ExcelUtil<TProjectInformation>(TProjectInformation.class);
+        util.exportExcel(response, list, "项目技术报告数据");
+    }
+
+    /**
+     * 获取项目技术报告详细信息
+     */
+    @ApiOperation("获取项目技术报告详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectInformationService.selectTProjectInformationById(id));
+    }
+
+    /**
+     * 新增项目技术报告
+     */
+    @ApiOperation("新增项目技术报告")
+    @Log(title = "项目技术报告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectInformation tProjectInformation)
+    {
+        tProjectInformation.setId(IdUtils.fastSimpleUUID());
+        tProjectInformation.setCreateBy(getNickName());
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//项目技术报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:项目技术报告
+                getNickName());
+
+        // todo 增加文件创建记录
+        tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(项目技术报告)",getNickName());
+
+        return toAjax(tProjectInformationService.insertTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 修改项目技术报告
+     */
+    @ApiOperation("修改项目技术报告")
+    @Log(title = "项目技术报告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectInformation tProjectInformation)
+    {
+        // todo 保存附件信息
+        tUnifyFileService.insertTUnifyFileList(tProjectInformation.getListFile(),
+                tProjectInformation.getProjectPoolId(),
+                tProjectInformation.getId(),//项目技术报告ID
+                String.valueOf(FileType.INFORMATION.ordinal()),//文件类型:项目技术报告
+                getNickName());
+
+        return toAjax(tProjectInformationService.updateTProjectInformation(tProjectInformation));
+    }
+
+    /**
+     * 删除项目技术报告
+     */
+    @ApiOperation("删除项目技术报告")
+    @Log(title = "项目技术报告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        //删除附件
+        tUnifyFileService.updateTUnifyFileBusinessIds(ids);
+        return toAjax(tProjectInformationService.updateTProjectInformationByIds(ids));
+    }
+
+    /**
+     * 根据项目ID获取会议记录
+     */
+    @ApiOperation("根据项目ID获取会议记录")
+    @GetMapping(value = "/listProjectPoolId")
+    public AjaxResult listProjectPoolId(String projectPoolId)
+    {
+        return success(tProjectInformationService.listProjectPoolId(projectPoolId));
+    }
+}

+ 0 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectInvestigateController.java

@@ -1,26 +1,16 @@
 package com.ruoyi.web.controller.invest;
 
-import java.io.IOException;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.FileType;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.sms.SmsSenderUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.domain.dto.InvestDto;
-import com.ruoyi.invest.service.ITProjectCirculationService;
-import com.ruoyi.invest.service.ITProjectPoolService;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
-import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.tool.domain.TUnifyFile;
 import com.ruoyi.tool.service.ITUnifyFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;

+ 0 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectPoolController.java

@@ -135,7 +135,6 @@ public class TProjectPoolController extends BaseController
         startPage();
         tProjectPool.setProjectStage("3");
         tProjectPool.setDelFlag("0");
-        tProjectPool.setProjectStatus("0");
         List<TProjectPool> list = tProjectPoolService.selectTProjectPoolList(tProjectPool)
                             .stream().map(n -> {
                                 n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"LX"));

+ 188 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ApprovalController.java

@@ -7,15 +7,15 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.flowable.service.IApprovalService;
+import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.domain.dto.ApprovalDto;
 import com.ruoyi.invest.domain.vo.ProjectApprovalVo;
-import com.ruoyi.invest.service.ITProjectCirculationService;
-import com.ruoyi.invest.service.ITProjectCompanyService;
-import com.ruoyi.invest.service.ITProjectContactsService;
-import com.ruoyi.invest.service.ITProjectPoolService;
-import com.ruoyi.tool.service.ITUnifyFileService;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +23,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目立项Controller
@@ -37,10 +39,19 @@ import java.util.List;
 public class ApprovalController extends BaseController {
     @Autowired
     private IApprovalService approvalService;
+    @Autowired
+    private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ITProjectMeetingService tProjectMeetingService;
+
+    @Autowired
+    private ITProjectScoringService tProjectScoringService;
+    @Autowired
+    private ISysDictDataService dictDataService;
+    //项目立项阶段列表
 
     //所有项目立项流程列表
     @ApiOperation("所有项目立项流程列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/listAll")
     public TableDataInfo listAll(TProjectApproval tProjectApproval)
     {
@@ -48,9 +59,59 @@ public class ApprovalController extends BaseController {
         List<ProjectApprovalVo> list=approvalService.selectAllApprovalList(tProjectApproval);
         return getDataTable(list);
     }
+    /**
+     * 导出所有项目立项流程列表
+     */
+    @ApiOperation("导出所有项目立项流程列表")
+    @Log(title = "所有项目立项流程列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectApproval tProjectApproval)
+    {
+        List<ProjectApprovalVo> list=approvalService.selectAllApprovalList(tProjectApproval)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectApprovalVo> util = new ExcelUtil<ProjectApprovalVo>(ProjectApprovalVo.class);
+        util.exportExcel(response, list, "所有项目立项流程数据");
+    }
+    /**
+     * 查询可申请的项目立项列表
+     */
+    @ApiOperation("查询可申请项目立项列表")
+    @GetMapping("/applicableList")
+    public TableDataInfo applicableList( TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setProjectStage("3");
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setApprovalFlag("0");//未发起立项的
+        tProjectPool.setStatus(3);//项目机会流程状态为审批通过
+        tProjectPool.setProjectStatus(tProjectPool.getProjectStatus());
+        List<TProjectPool> list = investmentOpportunityService.selectApplicableProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"LX"));
+                    if(null != n.gettProjectMeeting()){
+                        n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
     //我的待办任务
     @ApiOperation("我的待办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyTaskList")
     public TableDataInfo getMyTaskList(TProjectApproval tProjectApproval)
     {
@@ -61,7 +122,6 @@ public class ApprovalController extends BaseController {
     }
     //我的已办任务
     @ApiOperation("我的已办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyDoneTaskList")
     public TableDataInfo getMyDoneTaskList(TProjectApproval tProjectApproval)
     {
@@ -72,7 +132,6 @@ public class ApprovalController extends BaseController {
     }
     //我的待办任务
     @ApiOperation("我的单据列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyList")
     public TableDataInfo getMyList(TProjectApproval tProjectApproval)
     {
@@ -81,12 +140,131 @@ public class ApprovalController extends BaseController {
         List<ProjectApprovalVo> list=approvalService.getMyList(getUserId().toString(),tProjectApproval);
         return getDataTable(list);
     }
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的待办任务列表")
+    @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyTask")
+    public void exportMyTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的待办任务数据");
+    }
 
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的已办任务列表")
+    @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyDoneTask")
+    public void exportMyDoneTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的已办任务数据");
+    }
+    /**
+     * 导出我的单据列表
+     */
+    @ApiOperation("导出我的单据列表")
+    @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMy")
+    public void exportMy(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的单据数据");
+    }
     /**
      * 获取项目池详细信息
      */
     @ApiOperation("获取项目池详细信息")
-    @PreAuthorize("@ss.hasPermi('invest:pool:query')")
     @GetMapping(value = "/{pInstId}")
     public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
     {

+ 187 - 14
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DecisionController.java

@@ -6,18 +6,15 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.flowable.service.IApprovalService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.flowable.service.IDecisionService;
+import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.invest.domain.*;
-import com.ruoyi.invest.domain.dto.ApprovalDto;
 import com.ruoyi.invest.domain.dto.DecisionDto;
-import com.ruoyi.invest.domain.vo.ProjectApprovalVo;
 import com.ruoyi.invest.domain.vo.ProjectDecisionVo;
-import com.ruoyi.invest.service.ITProjectCirculationService;
-import com.ruoyi.invest.service.ITProjectCompanyService;
-import com.ruoyi.invest.service.ITProjectContactsService;
-import com.ruoyi.invest.service.ITProjectPoolService;
-import com.ruoyi.tool.service.ITUnifyFileService;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +22,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目立项Controller
@@ -39,9 +38,17 @@ import java.util.List;
 public class DecisionController extends BaseController {
     @Autowired
     private IDecisionService decisionService;
+    @Autowired
+    private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ITProjectMeetingService tProjectMeetingService;
+
+    @Autowired
+    private ITProjectScoringService tProjectScoringService;
+    @Autowired
+    private ISysDictDataService dictDataService;
     //所有项目投决流程列表
     @ApiOperation("所有项目投决流程列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/listAll")
     public TableDataInfo listAll(TProjectDecision tProjectDecision)
     {
@@ -49,10 +56,58 @@ public class DecisionController extends BaseController {
         List<ProjectDecisionVo> list=decisionService.selectAllDecisionList(tProjectDecision);
         return getDataTable(list);
     }
-
+    /**
+     * 导出所有项目投决流程列表
+     */
+    @ApiOperation("导出所有项目投决流程列表")
+    @Log(title = "所有项目投决流程列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectDecision tProjectDecision)
+    {
+        List<ProjectDecisionVo> list=decisionService.selectAllDecisionList(tProjectDecision)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectDecisionVo> util = new ExcelUtil<ProjectDecisionVo>(ProjectDecisionVo.class);
+        util.exportExcel(response, list, "所有项目投决流程数据");
+    }
+    /**
+     * 查询可申请项目投决列表
+     */
+    @ApiOperation("查询可申请项目投决列表")
+    @GetMapping("/applicableList")
+    public TableDataInfo applicableList(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setProjectStage("5");
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setDecisionFlag("0");//未发起投决
+        tProjectPool.setStatus(3);//项目机会流程状态为审批通过
+        tProjectPool.setProjectStatus(tProjectPool.getProjectStatus());
+        List<TProjectPool> list = investmentOpportunityService.selectApplicableProjectList(tProjectPool).stream().map(n -> {
+            n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"TJ"));
+            if(null != n.gettProjectMeeting()){
+                n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+            }
+            return n;
+        }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
     //我的待办任务
     @ApiOperation("我的待办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyTaskList")
     public TableDataInfo getMyTaskList(TProjectDecision tProjectDecision)
     {
@@ -63,7 +118,6 @@ public class DecisionController extends BaseController {
     }
     //我的已办任务
     @ApiOperation("我的已办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyDoneTaskList")
     public TableDataInfo getMyDoneTaskList(TProjectDecision tProjectDecision)
     {
@@ -74,7 +128,6 @@ public class DecisionController extends BaseController {
     }
     //我的待办任务
     @ApiOperation("我的单据列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyList")
     public TableDataInfo getMyList(TProjectDecision tProjectDecision)
     {
@@ -83,12 +136,132 @@ public class DecisionController extends BaseController {
         List<ProjectDecisionVo> list=decisionService.getMyList(getUserId().toString(),tProjectDecision);
         return getDataTable(list);
     }
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的待办任务列表")
+    @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyTask")
+    public void exportMyTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的待办任务数据");
+    }
+
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的已办任务列表")
+    @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyDoneTask")
+    public void exportMyDoneTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的已办任务数据");
+    }
+    /**
+     * 导出我的单据列表
+     */
+    @ApiOperation("导出我的单据列表")
+    @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMy")
+    public void exportMy(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的单据数据");
+    }
 
     /**
      * 获取项目池详细信息
      */
     @ApiOperation("获取项目池详细信息")
-    @PreAuthorize("@ss.hasPermi('invest:pool:query')")
     @GetMapping(value = "/{pInstId}")
     public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
     {

+ 187 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestigateController.java

@@ -6,10 +6,15 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.flowable.service.IInvestigateService;
+import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.domain.dto.InvestigateDto;
 import com.ruoyi.invest.domain.vo.ProjectInvestigateVo;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +22,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 尽职背调Controller
@@ -31,10 +38,18 @@ import java.util.List;
 public class InvestigateController extends BaseController {
     @Autowired
     private IInvestigateService investigateService;
+    @Autowired
+    private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ITProjectInvestigateService tProjectInvestigateService;
+
+    @Autowired
+    private ITProjectInvestigatePersonService tProjectInvestigatePersonService;
+    @Autowired
+    private ISysDictDataService dictDataService;
 
     //所有尽职背调流程列表
     @ApiOperation("所有尽职背调流程列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/listAll")
     public TableDataInfo listAll(TProjectInvestigate tProjectInvestigate)
     {
@@ -42,9 +57,59 @@ public class InvestigateController extends BaseController {
         List<ProjectInvestigateVo> list=investigateService.selectAllInvestigateList(tProjectInvestigate);
         return getDataTable(list);
     }
+    /**
+     * 导出所有项目背调流程列表
+     */
+    @ApiOperation("导出所有项目背调流程列表")
+    @Log(title = "所有项目背调流程列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectInvestigate tProjectInvestigate)
+    {
+        List<ProjectInvestigateVo> list=investigateService.selectAllInvestigateList(tProjectInvestigate)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectInvestigateVo> util = new ExcelUtil<ProjectInvestigateVo>(ProjectInvestigateVo.class);
+        util.exportExcel(response, list, "所有项目背调流程数据");
+    }
+    /**
+     * 查询可申请尽职背调列表
+     */
+    @ApiOperation("查询可申请尽职背调列表")
+    @GetMapping("/applicableList")
+    public TableDataInfo applicableList(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setProjectStage("4");
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setInvestigateFlag("0");//未发起背调的
+        tProjectPool.setStatus(3);//项目机会流程状态为审批通过
+        tProjectPool.setProjectStatus(tProjectPool.getProjectStatus());
+        List<TProjectPool> list = investmentOpportunityService.selectApplicableProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectInvestigate(tProjectInvestigateService.listProjectPoolIdNew(n.getId()));
+                    if(null != n.gettProjectInvestigate()){
+                        n.settProjectInvestigatePerson(tProjectInvestigatePersonService.selectByProjectInvestigateId(n.gettProjectInvestigate().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
     //我的待办任务
     @ApiOperation("我的待办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyTaskList")
     public TableDataInfo getMyTaskList(TProjectInvestigate tProjectInvestigate)
     {
@@ -55,7 +120,6 @@ public class InvestigateController extends BaseController {
     }
     //我的已办任务
     @ApiOperation("我的已办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyDoneTaskList")
     public TableDataInfo getMyDoneTaskList(TProjectInvestigate tProjectInvestigate)
     {
@@ -66,7 +130,6 @@ public class InvestigateController extends BaseController {
     }
     //我的待办任务
     @ApiOperation("我的单据列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyList")
     public TableDataInfo getMyList(TProjectInvestigate tProjectInvestigate)
     {
@@ -75,12 +138,131 @@ public class InvestigateController extends BaseController {
         List<ProjectInvestigateVo> list=investigateService.getMyList(getUserId().toString(),tProjectInvestigate);
         return getDataTable(list);
     }
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的待办任务列表")
+    @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyTask")
+    public void exportMyTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的待办任务数据");
+    }
 
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的已办任务列表")
+    @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyDoneTask")
+    public void exportMyDoneTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的已办任务数据");
+    }
+    /**
+     * 导出我的单据列表
+     */
+    @ApiOperation("导出我的单据列表")
+    @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMy")
+    public void exportMy(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的单据数据");
+    }
     /**
      * 获取项目池详细信息
      */
     @ApiOperation("获取项目池详细信息")
-    @PreAuthorize("@ss.hasPermi('invest:pool:query')")
     @GetMapping(value = "/{pInstId}")
     public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
     {

+ 160 - 37
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestmentOpportunityController.java

@@ -6,11 +6,14 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.domain.dto.InvestDto;
 import com.ruoyi.invest.service.*;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
+import com.ruoyi.system.service.ISysDictDataService;
 import com.ruoyi.tool.service.ITUnifyFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -19,7 +22,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目池Controller
@@ -41,42 +46,18 @@ public class InvestmentOpportunityController extends BaseController
     @Autowired
     private ITProjectContactsService tProjectContactsService;
 
-    @Autowired
-    private ITProjectCirculationService tProjectCirculationService;
-
     @Autowired
     private ITUnifyFileService tUnifyFileService;
 
     @Autowired
     private ITProjectPoolService tProjectPoolService;
-    //所有项目观望列表
-    @ApiOperation("所有项目观望列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
-    @GetMapping("/allWatchlist")
-    public TableDataInfo allWatchlist(TProjectPool tProjectPool)
-    {
-        startPage();
-        List<TProjectPoolVo> list=investmentOpportunityService.selectAllWatchList(tProjectPool);
-        return getDataTable(list);
-    }
-    /**
-     * 查询所有项目终止列表
-     */
-    @ApiOperation("查询所有项目终止列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
-    @GetMapping("/allTerminationList")
-    public TableDataInfo allTerminationList(TProjectPool tProjectPool)
-    {
-        startPage();
-        List<TProjectPoolVo> list=investmentOpportunityService.selectAllTerminationList(tProjectPool);
-        return getDataTable(list);
-    }
+    @Autowired
+    private ISysDictDataService dictDataService;
 
     /**
      * 查询所有投资机会流程
      */
     @ApiOperation("查询所有投资机会流程")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/listAll")
     public TableDataInfo listAll(TProjectPool tProjectPool)
     {
@@ -84,46 +65,189 @@ public class InvestmentOpportunityController extends BaseController
         List<TProjectPoolVo> list=investmentOpportunityService.selectAllInvestmentOpportunityList(tProjectPool);
         return getDataTable(list);
     }
-
+    /**
+     * 导出所有投资机会流程列表
+     */
+    @ApiOperation("导出所有投资机会流程列表")
+    @Log(title = "所有投资机会流程列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.selectAllInvestmentOpportunityList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "所有投资机会流程数据");
+    }
     //我的待办任务
     @ApiOperation("我的待办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyTaskList")
     public TableDataInfo getMyTaskList(TProjectPool tProjectPool)
     {
         startPage();
-        //tProjectPool.setProjectStage("1");
         List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool);
         return getDataTable(list);
     }
     //我的已办任务
     @ApiOperation("我的已办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyDoneTaskList")
     public TableDataInfo getMyDoneTaskList(TProjectPool tProjectPool)
     {
         startPage();
-        //tProjectPool.setProjectStage("1");
         List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool);
         return getDataTable(list);
     }
     //我的待办任务
     @ApiOperation("我的单据列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyList")
     public TableDataInfo getMyList(TProjectPool tProjectPool)
     {
         startPage();
-        //tProjectPool.setProjectStage("1");
         List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool);
         return getDataTable(list);
     }
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的待办任务列表")
+    @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyTask")
+    public void exportMyTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的待办任务数据");
+    }
 
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的已办任务列表")
+    @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyDoneTask")
+    public void exportMyDoneTask(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的已办任务数据");
+    }
+    /**
+     * 导出我的单据列表
+     */
+    @ApiOperation("导出我的单据列表")
+    @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMy")
+    public void exportMy(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
+        util.exportExcel(response, list, "我的单据数据");
+    }
     /**
      * 获取项目池详细信息
      */
     @ApiOperation("获取项目池详细信息")
-    @PreAuthorize("@ss.hasPermi('invest:pool:query')")
     @GetMapping(value = "/{pInstId}")
     public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
     {
@@ -152,8 +276,7 @@ public class InvestmentOpportunityController extends BaseController
     /**
      * 修改项目池
      */
-    @ApiOperation("修改项目池")
-    @PreAuthorize("@ss.hasPermi('invest:pool:edit')")
+    @ApiOperation("修改项目机会")
     @Log(title = "项目池", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody TProjectPool tProjectPool)

+ 473 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ProjectController.java

@@ -0,0 +1,473 @@
+package com.ruoyi.web.controller.project;
+
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.flowable.service.IInvestmentOpportunityService;
+import com.ruoyi.invest.domain.*;
+import com.ruoyi.invest.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目池Controller
+ *
+ * @author ruoyi
+ * @date 2024-02-21
+ */
+@Api(tags = "项目观望")
+@RestController
+@RequestMapping("/project")
+public class ProjectController extends BaseController
+{
+
+    @Autowired
+    private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ITProjectInvestigateService tProjectInvestigateService;
+
+    @Autowired
+    private ITProjectInvestigatePersonService tProjectInvestigatePersonService;
+
+    @Autowired
+    private ITProjectMeetingService tProjectMeetingService;
+
+    @Autowired
+    private ITProjectScoringService tProjectScoringService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询项目池列表
+     */
+    @ApiOperation("查询项目池列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//数据未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目池列表
+     */
+    @ApiOperation("导出项目池列表")
+    @Log(title = "项目池列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportList")
+    public void exportList(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//数据未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目池数据");
+    }
+    /**
+     * 查询项目机会阶段项目信息
+     */
+    @ApiOperation("查询项目机会阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listInvestOppStage")
+    public TableDataInfo listInvestOppStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//数据未删除
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("1");//项目报备(项目机会)
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目机会阶段列表
+     */
+    @ApiOperation("导出项目机会阶段列表")
+    @Log(title = "项目机会阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInvestOppStage")
+    public void exportInvestOppStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("1");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目机会阶段数据");
+    }
+    /**
+     * 查询项目立项阶段项目信息
+     */
+    @ApiOperation("查询项目立项阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listApprovalStage")
+    public TableDataInfo listApprovalStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("3");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"LX"));
+                    if(null != n.gettProjectMeeting()){
+                        n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目立项阶段列表
+     */
+    @ApiOperation("导出项目立项阶段列表")
+    @Log(title = "项目立项阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportApprovalStage")
+    public void exportApprovalStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("3");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目立项阶段数据");
+    }
+    /**
+     * 查询项目背调阶段项目信息
+     */
+    @ApiOperation("查询项目背调阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listInvestigateStage")
+    public TableDataInfo listInvestigateStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("4");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectInvestigate(tProjectInvestigateService.listProjectPoolIdNew(n.getId()));
+                    if(null != n.gettProjectInvestigate()){
+                        n.settProjectInvestigatePerson(tProjectInvestigatePersonService.selectByProjectInvestigateId(n.gettProjectInvestigate().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目背调阶段列表
+     */
+    @ApiOperation("导出项目背调阶段列表")
+    @Log(title = "项目背调阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInvestigateStage")
+    public void exportInvestigateStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("4");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目背调阶段数据");
+    }
+    /**
+     * 查询项目投决阶段项目信息
+     */
+    @ApiOperation("查询项目投决阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listDecisionStage")
+    public TableDataInfo listDecisionStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("5");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool).stream().map(n -> {
+            n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"TJ"));
+            if(null != n.gettProjectMeeting()){
+                n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+            }
+            return n;
+        }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目投决阶段列表
+     */
+    @ApiOperation("导出项目投决阶段列表")
+    @Log(title = "项目投决阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportDecisionStage")
+    public void exportDecisionStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("5");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目投决阶段数据");
+    }
+    /**
+     * 查询项目签约阶段项目信息
+     */
+    @ApiOperation("查询项目签约阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listSignStage")
+    public TableDataInfo listSignStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("6");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目签约阶段列表
+     */
+    @ApiOperation("导出项目签约阶段列表")
+    @Log(title = "项目签约阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportSignStage")
+    public void exportSignStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("6");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目签约阶段数据");
+    }
+    //所有项目观望列表
+    @ApiOperation("所有项目观望列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/allWatchlist")
+    public TableDataInfo allWatchlist(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("2");//项目机会状态为观望2
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+
+    }
+    /**
+     * 导出所有项目终止列表
+     */
+    @ApiOperation("导出所有项目观望列表")
+    @Log(title = "所有项目观望列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportAllWatch")
+    public void exportAllWatch(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("2");//项目机会状态为观望2
+        List<TProjectPool> list=investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "所有项目观望数据");
+    }
+    /**
+     * 查询所有项目终止列表
+     */
+    @ApiOperation("查询所有项目终止列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/allTerminationList")
+    public TableDataInfo allTerminationList(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("1");//项目机会状态为终止1
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出所有项目终止列表
+     */
+    @ApiOperation("导出所有项目终止列表")
+    @Log(title = "所有项目终止列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportAllTermination")
+    public void exportAllTermination(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("1");//项目机会状态为终止1
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "所有项目终止数据");
+    }
+
+}

+ 127 - 22
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/TerminationController.java

@@ -6,16 +6,13 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.flowable.service.IApprovalService;
-import com.ruoyi.flowable.service.IDecisionService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.flowable.service.ITerminationService;
 import com.ruoyi.invest.domain.*;
-import com.ruoyi.invest.domain.dto.DecisionDto;
 import com.ruoyi.invest.domain.dto.TerminationDto;
-import com.ruoyi.invest.domain.vo.ProjectDecisionVo;
 import com.ruoyi.invest.domain.vo.ProjectTerminationVo;
-import com.ruoyi.invest.service.ITProjectPoolService;
+import com.ruoyi.system.service.ISysDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +20,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目立项Controller
@@ -38,12 +37,11 @@ public class TerminationController extends BaseController {
     @Autowired
     private ITerminationService terminationService;
     @Autowired
-    private ITProjectPoolService tProjectPoolService;
-    @Autowired
     private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ISysDictDataService dictDataService;
     //所有项目终止流程列表
     @ApiOperation("所有项目终止流程列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/listAll")
     public TableDataInfo listAll(TProjectTermination tProjectTermination)
     {
@@ -51,25 +49,51 @@ public class TerminationController extends BaseController {
         List<ProjectTerminationVo> list=terminationService.selectAllTerminationList(tProjectTermination);
         return getDataTable(list);
     }
-
     /**
-     * 查询项目终止列表
+     * 导出所有项目终止流程列表
+     */
+    @ApiOperation("导出所有项目终止流程列表")
+    @Log(title = "所有项目终止流程列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectTermination tProjectTermination)
+    {
+        List<ProjectTerminationVo> list=terminationService.selectAllTerminationList(tProjectTermination)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectTerminationVo> util = new ExcelUtil<ProjectTerminationVo>(ProjectTerminationVo.class);
+        util.exportExcel(response, list, "所有项目终止流程数据");
+    }
+    /**
+     * 查询可申请项目终止列表
      */
-    @ApiOperation("查询项目终止列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
-    @GetMapping("/listTermination")
-    public TableDataInfo listTermination(TProjectPool tProjectPool)
+    @ApiOperation("查询可申请项目终止列表")
+    @GetMapping("/applicableList")
+    public TableDataInfo applicableList(TProjectPool tProjectPool)
     {
         startPage();
-        //tProjectPool.setProjectStage("8");
-        tProjectPool.setDelFlag("0");
-        //List<TProjectPool> list = tProjectPoolService.selectTProjectPoolList(tProjectPool);
-        List<TProjectPool> list = investmentOpportunityService.selectTProjectList(tProjectPool);
+        //tProjectPool.setProjectStage("5");
+        tProjectPool.setDelFlag("0");//
+        tProjectPool.setStatus(3);//项目机会流程状态为审批通过
+        tProjectPool.setProjectStatus(tProjectPool.getProjectStatus());//观望
+        List<TProjectPool> list = investmentOpportunityService.selectApplicableProjectList(tProjectPool);
         return getDataTable(list);
     }
     //我的待办任务
     @ApiOperation("我的待办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyTaskList")
     public TableDataInfo getMyTaskList(TProjectTermination tProjectTermination)
     {
@@ -80,7 +104,6 @@ public class TerminationController extends BaseController {
     }
     //我的已办任务
     @ApiOperation("我的已办任务列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyDoneTaskList")
     public TableDataInfo getMyDoneTaskList(TProjectTermination tProjectTermination)
     {
@@ -91,7 +114,6 @@ public class TerminationController extends BaseController {
     }
     //我的待办任务
     @ApiOperation("我的单据列表")
-    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
     @GetMapping("/getMyList")
     public TableDataInfo getMyList(TProjectTermination tProjectTermination)
     {
@@ -100,12 +122,95 @@ public class TerminationController extends BaseController {
         List<ProjectTerminationVo> list=terminationService.getMyList(getUserId().toString(),tProjectTermination);
         return getDataTable(list);
     }
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的待办任务列表")
+    @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyTask")
+    public void exportMyTask(HttpServletResponse response, TProjectTermination tProjectTermination)
+    {
+        List<ProjectTerminationVo> list=terminationService.getMyTaskList(getUserId().toString(),tProjectTermination)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectTerminationVo> util = new ExcelUtil<ProjectTerminationVo>(ProjectTerminationVo.class);
+        util.exportExcel(response, list, "我的待办任务数据");
+    }
 
+    /**
+     * 导出我的已办任务列表
+     */
+    @ApiOperation("导出我的已办任务列表")
+    @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMyDoneTask")
+    public void exportMyDoneTask(HttpServletResponse response, TProjectTermination tProjectTermination)
+    {
+        List<ProjectTerminationVo> list=terminationService.getMyDoneTaskList(getUserId().toString(),tProjectTermination)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectTerminationVo> util = new ExcelUtil<ProjectTerminationVo>(ProjectTerminationVo.class);
+        util.exportExcel(response, list, "我的已办任务数据");
+    }
+    /**
+     * 导出我的单据列表
+     */
+    @ApiOperation("导出我的单据列表")
+    @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportMy")
+    public void exportMy(HttpServletResponse response, TProjectTermination tProjectTermination)
+    {
+        List<ProjectTerminationVo> list=terminationService.getMyList(getUserId().toString(),tProjectTermination)
+                .stream().map(n -> {
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    if(StringUtils.isNotEmpty(n.getProjectStatus())){
+                        if("0".equals(n.getProjectStatus())){
+                            n.setProjectStatus("正常");
+                        }else if("1".equals(n.getProjectStatus())){
+                            n.setProjectStatus("终止");
+                        }else if("2".equals(n.getProjectStatus())){
+                            n.setProjectStatus("观望");
+                        }
+                    }
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<ProjectTerminationVo> util = new ExcelUtil<ProjectTerminationVo>(ProjectTerminationVo.class);
+        util.exportExcel(response, list, "我的单据数据");
+    }
     /**
      * 获取项目池详细信息
      */
     @ApiOperation("获取项目池详细信息")
-    @PreAuthorize("@ss.hasPermi('invest:pool:query')")
     @GetMapping(value = "/{pInstId}")
     public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
     {

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/FinancialStatementsController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "研究资料管理-商业计划书")
+@Api(tags = "研究资料管理-财务报表")
 @RestController
 @RequestMapping("/study/financialStatements")
 public class FinancialStatementsController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/InvestmentAmountController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "投资金额分析报告")
+@Api(tags = "研究资料管理-投资金额分析报告")
 @RestController
 @RequestMapping("/study/investmentAmount")
 public class InvestmentAmountController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/InvestmentPotentialController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "投资潜力分析报告-商业计划书")
+@Api(tags = "研究资料管理-投资潜力分析报告")
 @RestController
 @RequestMapping("/study/investmentPotential")
 public class InvestmentPotentialController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectApprovalController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "立项审批文件-商业计划书")
+@Api(tags = "研究资料管理-立项审批文件")
 @RestController
 @RequestMapping("/study/projectApproval")
 public class ProjectApprovalController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectFounderProfileController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "项目创始人档案-商业计划书")
+@Api(tags = "研究资料管理-项目创始人档案")
 @RestController
 @RequestMapping("/study/projectFounderProfile")
 public class ProjectFounderProfileController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectInitiationKeyController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "立项关键信息-商业计划书")
+@Api(tags = "研究资料管理-立项关键信息")
 @RestController
 @RequestMapping("/study/projectInitiationKey")
 public class ProjectInitiationKeyController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/ProjectMeetingMinutesController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "项目会议纪要-商业计划书")
+@Api(tags = "研究资料管理-项目会议纪要")
 @RestController
 @RequestMapping("/study/projectMeetingMinutes")
 public class ProjectMeetingMinutesController extends BaseController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/study/RiskAssessmentController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  * @author ruoyi
  * @date 2024-02-26
  */
-@Api(tags = "风险评估报告-商业计划书")
+@Api(tags = "研究资料管理-风险评估报告")
 @RestController
 @RequestMapping("/study/riskAssessment")
 public class RiskAssessmentController extends BaseController

+ 111 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ApproveUserController.java

@@ -0,0 +1,111 @@
+package com.ruoyi.web.controller.system;
+
+
+import com.ruoyi.common.core.controller.BaseController;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import com.ruoyi.common.utils.StringUtils;
+
+import com.ruoyi.system.domain.ApproveUser;
+import com.ruoyi.system.service.*;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+
+import org.springframework.web.bind.annotation.*;
+
+
+import java.util.*;
+
+/**
+ * 审批用户信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/approve")
+public class ApproveUserController extends BaseController
+{
+    @Autowired
+    private IApproveUserService approveUserService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+
+    /**
+     * 获取审批用户列表
+     */
+    /*@PreAuthorize(`@ss.hasRole('admin')`)*/
+    @GetMapping("/list")
+    public TableDataInfo list(ApproveUser user)
+    {
+        startPage();
+        List<ApproveUser> list = approveUserService.selectApproveUserList(user);
+        return getDataTable(list);
+    }
+    @GetMapping("/findApproveUser")
+    public TableDataInfo findApproveUser()
+    {
+        startPage();
+        List<String> list = approveUserService.findApproveUser();
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 保存指定审批人员
+     * @param approveUser
+     * @return
+     */
+    //@PreAuthorize("@ss.hasRole('admin')")
+    @RequestMapping("saveApproveUser")
+    @ResponseBody
+    public Map<String,Object> saveApproveUser(@RequestBody ApproveUser approveUser){
+        Map<String, Object> map = new HashMap<String, Object>();
+        List<String> aUser=new ArrayList<>();
+        if (StringUtils.isNotBlank(approveUser.getUserId())) {
+           aUser= Arrays.asList(approveUser.getUserId().split(","));
+        }
+        try{
+            if(aUser!=null && aUser.size()>0 ) {
+                //删除
+
+                /*customerService.deleteApproveUserByDeptId("c8ee487b711611e7b45f484d7e9932ef");
+                customerService.deleteApproveUserByDeptId("c940fc99711611e7b45f484d7e9932ef");
+                customerService.deleteApproveUserByDeptId("4ebf66d4711611e7b45f484d7e9932ef");*/
+//				customerService.deleteApproveUserByCompanyId(company);
+//				List<ApproveUser> list=customerService.selectApproveUseraByCompanyId(company);
+                List<ApproveUser> aus = new ArrayList<>();
+                for (String s : aUser) {
+                    approveUserService.deleteApproveUserByUserId(s);
+                    SysUser sysUser=sysUserService.selectUserById(Long.parseLong(s));
+                    ApproveUser au = new ApproveUser();
+
+                    au.setUserId(s);
+                    au.setLoginId(sysUser.getUserName());
+                    //au.setDeptName(sysUser.getDept());
+                    au.setDeptId(sysUser.getDeptId().toString());
+                    aus.add(au);
+                }
+                if(aus.size()>0){
+                    approveUserService.insertApproveUsers(aus);
+                }
+                map.put("status", true);
+                map.put("msg", "保存成功!");
+            }else{
+                map.put("status", false);
+                map.put("msg", "保存失败!");
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+            map.put("status", false);
+            map.put("msg", "保存失败!");
+        }
+
+        return map;
+    }
+
+}

+ 14 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TUnifyFileController.java

@@ -14,6 +14,7 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.invest.service.ITProjectInformationService;
 import com.ruoyi.web.controller.common.CommonController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -59,6 +60,9 @@ public class TUnifyFileController extends BaseController
     @Autowired
     private ServerConfig serverConfig;
 
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
+
     /**
      * 查询附件列表
      */
@@ -125,6 +129,7 @@ public class TUnifyFileController extends BaseController
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids)
     {
+        tProjectInformationService.updateTProjectInformationByFileIds(ids);
         return toAjax(tUnifyFileService.updateTUnifyFileByIds(ids));
     }
 
@@ -204,7 +209,15 @@ public class TUnifyFileController extends BaseController
     {
         return success(tUnifyFileService.selectTUnifyFileByBusinessIdList(fileBusinessId,uploadType));
     }
-
+    /**
+     * 根据ID()获取附件详情信息列表
+     */
+    @ApiOperation("根据附件业务ID()获取附件详情信息列表")
+    @GetMapping("/listFileById")
+    public AjaxResult listFileById(String id,String uploadType)
+    {
+        return success(tUnifyFileService.selectTUnifyFileByIdList(id,uploadType));
+    }
     /**
      * 根据fileId()获取项目中所有附件列表
      */

+ 21 - 3
ruoyi-common/src/main/java/com/ruoyi/common/enums/FileType.java

@@ -43,15 +43,33 @@ public enum FileType {
      */
     INVESTIGATE,
     /**
-     * BP附件类型
+     * BP附件类型(商业计划书)
      */
     BP,
     /**
-     * 立项资料
+     * 立项资料(立项申请报告)
      */
     APPROVAL,
     /**
-     * 投决资料
+     * 投决资料(投决申请报告)
      */
     DECISION,
+    /**
+     * 项目行研报告
+     */
+    INDUSTRY,
+    /**
+     * 项目技术报告
+     */
+    TECHNICAL,
+    /**
+     * 财务评估报告
+     */
+    FINANCE,
+    /**
+     * 法务评估报告
+     */
+    LEGAL
+
+
 }

+ 55 - 10
ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/DueTaskListener.java

@@ -2,6 +2,7 @@ package com.ruoyi.flowable.listener;
 
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.service.IApproveUserService;
 import com.ruoyi.system.service.ISysUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.flowable.engine.delegate.TaskListener;
@@ -9,6 +10,9 @@ import org.flowable.task.service.delegate.DelegateTask;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 任务监听器
  *
@@ -25,6 +29,7 @@ import org.springframework.stereotype.Component;
 public class DueTaskListener implements TaskListener{
     private static ISysUserService sysUserService;
     private static SysDeptMapper sysDeptMapper;
+    private static IApproveUserService approveUserService;
     @Autowired
     public void setSysUserService(ISysUserService sysUserService) {
         DueTaskListener.sysUserService = sysUserService;
@@ -33,27 +38,67 @@ public class DueTaskListener implements TaskListener{
     public void setSysDeptMapper(SysDeptMapper sysDeptMapper) {
         DueTaskListener.sysDeptMapper = sysDeptMapper;
     }
+    @Autowired
+    public void setApproveUserMapper(IApproveUserService approveUserService) {
+        DueTaskListener.approveUserService = approveUserService;
+    }
     @Override
     public void notify(DelegateTask delegateTask) {
 
         log.info("任务监听器:{}", delegateTask);
         // TODO  获取事件类型 delegateTask.getEventName(),可以通过监听器给任务执行人发送相应的通知消息
         String eventName= delegateTask.getEventName();
+        System.out.println("任务监听器触发事件:" + eventName);
         String taskDefKey= delegateTask.getTaskDefinitionKey();
         Object obj = delegateTask.getVariable("INITIATOR");
         SysUser user = sysUserService.selectUserById((Long) obj);
         String leader=sysDeptMapper.selectDeptLeader("投资部");
         SysUser leaderUser=sysUserService.selectUserByUserName(leader);
-        if("deptLeader".equals(taskDefKey)) {//部门负责人、
-            //部门负责人
-            delegateTask.setAssignee(leaderUser.getUserId().toString());
-        }else if("confirm".equals(taskDefKey)){
-            //申请人本人确认
-            delegateTask.setAssignee(user.getUserId().toString());
-        }else if("president".equals(taskDefKey)){
-            //总裁室固定杨总
-            SysUser ylUser=sysUserService.selectUserByUserName("杨琳");
-            delegateTask.setAssignee(ylUser.getUserId().toString());
+        if("create".equals(eventName)) {
+            if ("deptLeader".equals(taskDefKey)) {//部门负责人、
+                //部门负责人
+                delegateTask.setAssignee(leaderUser.getUserId().toString());
+            } else if ("confirm".equals(taskDefKey)) {
+                //申请人本人确认
+                delegateTask.setAssignee(user.getUserId().toString());
+            } else if ("president".equals(taskDefKey)) {
+                //总裁室固定杨总
+                SysUser ylUser = sysUserService.selectUserByUserName("杨琳");
+                delegateTask.setAssignee(ylUser.getUserId().toString());
+            }
+        }else if("complete".equals(eventName)){
+            if ("deptLeader".equals(taskDefKey)) {
+                List<String> aUser = approveUserService.findApproveUser();
+                if (aUser != null && aUser.size() > 0) {
+                /*if(aUser.size() == 1){
+                    delegateTask.setAssignee(aUser.get(0));
+                }else{
+                    delegateTask.addCandidateUsers(aUser);
+                }*/
+                    delegateTask.setVariable("uploadList", aUser);
+                } else {
+                    List<String> users = new ArrayList<>();
+                    /*List<SysUser> financeUsers = sysUserService.selectUserByDeptName("财务部");
+                    if (financeUsers != null && financeUsers.size() > 0) {
+                        for (SysUser userInfo : financeUsers) {
+                            if("周亚琴".equals(userInfo.getNickName())&&"15821632425".equals(userInfo.getUserName())) {
+                                users.add(userInfo.getUserId().toString());
+                            }
+                        }
+                    }
+                    List<SysUser> lawUsers = sysUserService.selectUserByDeptName("法务部");
+                    if (lawUsers != null && lawUsers.size() > 0) {
+                        for (SysUser userInfo : lawUsers) {
+                            if("钱振雷".equals(userInfo.getNickName())&&"18964333328".equals(userInfo.getUserName())) {
+                                users.add(userInfo.getUserId().toString());
+                            }
+                        }
+                    }*/
+                    users.add("31");
+                    users.add("850");
+                    delegateTask.setVariable("uploadList", users);
+                }
+            }
         }
 
     }

+ 0 - 1
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IApprovalService.java

@@ -3,7 +3,6 @@ package com.ruoyi.flowable.service;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.domain.vo.ProjectApprovalVo;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;

+ 6 - 6
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IInvestmentOpportunityService.java

@@ -4,11 +4,10 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.invest.domain.FlowBaseInfo;
 import com.ruoyi.invest.domain.TProjectPool;
 import com.ruoyi.invest.domain.TProjectReview;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 项目池Service接口
@@ -18,13 +17,14 @@ import java.util.Map;
  */
 public interface IInvestmentOpportunityService
 {
-    List<TProjectPool> selectTProjectList(TProjectPool tProjectPool);
+    //查询项目阶段(总)
+    List<TProjectPool> selectProjectList(TProjectPool tProjectPool);
+    //查询可申请项目列表-可申请(总)
+    List<TProjectPool> selectApplicableProjectList(TProjectPool tProjectPool);
     List<TProjectPoolVo> selectAllInvestmentOpportunityList(TProjectPool tProjectPool);
-    List<TProjectPoolVo> selectAllWatchList(TProjectPool tProjectPool);
-    List<TProjectPoolVo> selectAllTerminationList(TProjectPool tProjectPool);
     List<TProjectPoolVo> getMyTaskList(String userId, TProjectPool tProjectPool);
     List<TProjectPoolVo> getMyDoneTaskList(String userId, TProjectPool tProjectPool);
-    List<TProjectPoolVo> getMyList(String userId,TProjectPool tProjectPool);
+    List<TProjectPoolVo> getMyList(String userId, TProjectPool tProjectPool);
 
     TProjectPool selectTProjectPoolByProcInstId(String pInstId);
 

+ 45 - 9
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/ApprovalServiceImpl.java

@@ -148,12 +148,17 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
                         tProjectApproval.setStatus(0);//暂存
                     }
                     // todo 保存立项资料
-                    tUnifyFileService.insertTUnifyFileList(tProjectApproval.getListFile(),
+                    tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getListFile(),
                             tProjectApproval.getProjectPoolId(),
                             tProjectApproval.getId(),
                             String.valueOf(FileType.APPROVAL.ordinal()),
-                            nickName);
-
+                            nickName, "l","3");
+                    // todo 保存其他附件信息
+                    tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getOtherFile(),
+                            tProjectApproval.getProjectPoolId(),
+                            tProjectApproval.getId(),
+                            String.valueOf(FileType.OTHER.ordinal()),
+                            nickName,"k","3");
                     // todo 更改立项状态
                     tProjectPoolService.updateTProjectPoolByApprovalFlag(tProjectApproval.getProjectPoolId(),"1");
 
@@ -191,6 +196,7 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
                     tProjectPool.setId(tProjectApproval.getProjectPoolId());
                     tProjectPool.setProjectStage("3");//项目阶段-项目立项
                     tProjectPool.setProjectState("d");//项目状态-项目立项
+                    tProjectPool.setProjectStatus("0");//项目机会状态-正常
                     tProjectPoolService.updateTProjectPool(tProjectPool);
                     return AjaxResult.success();
                 }
@@ -245,12 +251,20 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
         if (status) {
             TProjectPool tProjectPool=new TProjectPool();
             tProjectPool.setId(tProjectApproval.getProjectPoolId());
-            // todo 保存立项资料
-            tUnifyFileService.insertTUnifyFileList(tProjectApproval.getListFile(),
-                    tProjectApproval.getProjectPoolId(),
-                    tProjectApproval.getId(),
-                    String.valueOf(FileType.APPROVAL.ordinal()),
-                    userInfo.getNickName());
+            if ("modifyApply".equals(task.getTaskDefinitionKey())) {
+                // todo 立项申请报告
+                tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getListFile(),
+                        tProjectApproval.getProjectPoolId(),
+                        tProjectApproval.getId(),
+                        String.valueOf(FileType.APPROVAL.ordinal()),
+                        userInfo.getNickName(), "l", "3");
+                // todo 保存其他附件信息
+                tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getOtherFile(),
+                        tProjectApproval.getProjectPoolId(),
+                        tProjectApproval.getId(),
+                        String.valueOf(FileType.OTHER.ordinal()),
+                        userInfo.getNickName(), "k", "3");
+            }
             //发起会议
             if ("meeting".equals(task.getTaskDefinitionKey())) {
                 if(tProjectMeeting!=null&&StringUtils.isNotBlank(tProjectMeeting.getId())){
@@ -328,6 +342,28 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
 
                 tProjectScoringService.insertTProjectScoring(tProjectScoring);
             }
+            if("industryResearch".equals(task.getTaskDefinitionKey())){
+
+                // todo 保存项目行研报告
+                tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getListFile(),
+                        tProjectApproval.getProjectPoolId(),
+                        tProjectApproval.getId(),//附件业务Id
+                        String.valueOf(FileType.INDUSTRY.ordinal()),//文件类型:项目行研报告
+                        userInfo.getNickName(),"m","3");
+                // todo 增加文件创建记录
+                //tProjectCirculationService.insertTProjectCirculation(tProjectApproval.getProjectPoolId(),tProjectApproval.getListFile().get(0).getNewUploadName()+"(项目行研报告)",userInfo.getNickName());
+            }
+            if("technicalResearch".equals(task.getTaskDefinitionKey())){
+                // todo 保存项目技术报告
+                tUnifyFileService.insertTUnifyFileLists(tProjectApproval.getListFile(),
+                        tProjectApproval.getProjectPoolId(),
+                        tProjectApproval.getId(),//附件业务Id
+                        String.valueOf(FileType.TECHNICAL.ordinal()),//文件类型:项目技术报告
+                        userInfo.getNickName(),"n","3");
+                // todo 增加文件创建记录
+                //tProjectCirculationService.insertTProjectCirculation(tProjectApproval.getProjectPoolId(),tProjectApproval.getListFile().get(0).getNewUploadName()+"(项目技术报告)",userInfo.getNickName());
+
+            }
             if("president".equals(task.getTaskDefinitionKey())){
                 tProjectPool.setProjectStage("3");//项目阶段-项目立项
                 tProjectPool.setProjectState("e");//项目状态-立项通过

+ 23 - 9
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/DecisionServiceImpl.java

@@ -159,11 +159,17 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
                         tProjectDecision.setStatus(0);//暂存
                     }
                     // todo 保存投决资料
-                    tUnifyFileService.insertTUnifyFileList(tProjectDecision.getListFile(),
+                    tUnifyFileService.insertTUnifyFileLists(tProjectDecision.getListFile(),
                             tProjectDecision.getProjectPoolId(),
                             tProjectDecision.getId(),
                             String.valueOf(FileType.DECISION.ordinal()),
-                            nickName);
+                            nickName,"q","5");
+                    // todo 保存其他附件
+                    tUnifyFileService.insertTUnifyFileLists(tProjectDecision.getOtherFile(),
+                            tProjectDecision.getProjectPoolId(),
+                            tProjectDecision.getId(),
+                            String.valueOf(FileType.DECISION.ordinal()),
+                            nickName,"k","5");
 
                     // todo 更改投决状态
                     tProjectPoolService.updateTProjectPoolByDecisionFlag(tProjectDecision.getProjectPoolId(),"1");
@@ -257,12 +263,20 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
         if (status) {
             TProjectPool tProjectPool=new TProjectPool();
             tProjectPool.setId(tProjectDecision.getProjectPoolId());
-            // todo 保存投决资料
-            tUnifyFileService.insertTUnifyFileList(tProjectDecision.getListFile(),
-                    tProjectDecision.getProjectPoolId(),
-                    tProjectDecision.getId(),
-                    String.valueOf(FileType.DECISION.ordinal()),
-                    userInfo.getNickName());
+            if("modifyApply".equals(task.getTaskDefinitionKey())) {
+                // todo 保存投决资料
+                tUnifyFileService.insertTUnifyFileLists(tProjectDecision.getListFile(),
+                        tProjectDecision.getProjectPoolId(),
+                        tProjectDecision.getId(),
+                        String.valueOf(FileType.DECISION.ordinal()),
+                        userInfo.getNickName(), "q", "5");
+                // todo 保存其他附件
+                tUnifyFileService.insertTUnifyFileLists(tProjectDecision.getOtherFile(),
+                        tProjectDecision.getProjectPoolId(),
+                        tProjectDecision.getId(),
+                        String.valueOf(FileType.OTHER.ordinal()),
+                        userInfo.getNickName(), "k", "5");
+            }
             //发起会议
             if ("meeting".equals(task.getTaskDefinitionKey())) {
                 tProjectMeeting.setId(IdUtils.fastSimpleUUID());
@@ -367,7 +381,7 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
                 flow.setStatus(FlowStatusEnum.ENDED.getName());
                 if (!"modifyApply".equals(task.getTaskDefinitionKey())&&!"president".equals(task.getTaskDefinitionKey())) {
                     tProjectDecision.setStatus(3);
-                    tProjectPool.setProjectStage("6");//项目阶段-项目终止
+                    tProjectPool.setProjectStage("6");//项目阶段-项目签约
                     tProjectPool.setProjectState("j");//项目状态-签约协议沟通中
                     tProjectPool.setUpdateBy(userInfo.getNickName());
                     tProjectPool.setDecisionDate(new Date());//投决通过日期

+ 35 - 11
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestigateServiceImpl.java

@@ -129,8 +129,8 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
                 String leader=sysDeptMapper.selectDeptLeader("投资部");
                 formProperties.put("MANAGER",sysUserService.selectUserByUserName(leader).getUserId());
                 //尽职背调上传人
-                List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
-                formProperties.put("uploadList", userIds);
+                /*List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
+                formProperties.put("uploadList", userIds);*/
                 pInst = runtimeService.startProcessInstanceById(pDefId, formProperties);
                 if(pInst!=null){
                     String nickName= SecurityUtils.getLoginUser().getUser().getNickName();
@@ -217,11 +217,11 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
         Map<String, Object> formProperties = new HashMap<>();
         formProperties.put("auditPass", tProjectInvestigate.isFlag());
         //尽职背调上传人
-        if("modifyApply".equals(task.getTaskDefinitionKey())) {
+        /*if("modifyApply".equals(task.getTaskDefinitionKey())) {
             //尽职背调上传人
             List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
             formProperties.put("uploadList", userIds);
-        }
+        }*/
         if(StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())) {//不为空代表结束流程
             formProperties.put("whetherToEnd", true);
         }else{
@@ -240,12 +240,6 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
         if (status) {
             TProjectPool tProjectPool=new TProjectPool();
             tProjectPool.setId(tProjectInvestigate.getProjectPoolId());
-            // todo 保存尽职背调资料
-            tUnifyFileService.insertTUnifyFileList(tProjectInvestigate.getListFile(),
-                    tProjectInvestigate.getProjectPoolId(),
-                    tProjectInvestigate.getId(),
-                    String.valueOf(FileType.INVESTIGATE.ordinal()),
-                    userInfo.getNickName());
             //上传尽职背调报告
             if ("upload".equals(task.getTaskDefinitionKey())) {
                 if(StringUtils.isNull(tProjectInvestigatePerson.getId())){
@@ -266,7 +260,37 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
 
                 tProjectInvestigatePersonService.insertTProjectInvestigatePerson(tProjectInvestigatePerson);
             }
-
+            if("approve".equals(task.getTaskDefinitionKey())){//背调审批节点
+                //查询当前人员所在部门
+                if(userInfo.getDept().getDeptName().contains("财务")) {
+                    // todo 保存财务评估报告
+                    tUnifyFileService.insertTUnifyFileLists(tProjectInvestigate.getListFile(),
+                            tProjectInvestigate.getProjectPoolId(),
+                            tProjectInvestigate.getId(),//附件业务Id
+                            String.valueOf(FileType.FINANCE.ordinal()),//文件类型:财务评估报告
+                            userInfo.getNickName(),"o","4");
+                    // todo 增加文件创建记录
+                    //tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(财务评估报告)",userInfo.getNickName());
+                }else if(userInfo.getDept().getDeptName().contains("法务")) {
+                    // todo 保存法务评估报告
+                    tUnifyFileService.insertTUnifyFileLists(tProjectInvestigate.getListFile(),
+                            tProjectInvestigate.getProjectPoolId(),
+                            tProjectInvestigate.getId(),//附件业务Id
+                            String.valueOf(FileType.LEGAL.ordinal()),//文件类型:法务评估报告
+                            userInfo.getNickName(),"p","4");
+                    // todo 增加文件创建记录
+                    //tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(法务评估报告)",userInfo.getNickName());
+                }else{
+                    // todo 保存其他附件
+                    tUnifyFileService.insertTUnifyFileLists(tProjectInvestigate.getListFile(),
+                            tProjectInvestigate.getProjectPoolId(),
+                            tProjectInvestigate.getId(),//附件业务Id
+                            String.valueOf(FileType.OTHER.ordinal()),//文件类型:其他附件
+                            userInfo.getNickName(),"k","4");
+                    // todo 增加文件创建记录
+                    //tProjectCirculationService.insertTProjectCirculation(tProjectInformation.getProjectPoolId(),tProjectInformation.getFileName()+"(立项其他附件)",userInfo.getNickName());
+                }
+            }
             if("president".equals(task.getTaskDefinitionKey())){
 //                tProjectPool.setProjectStage("5");//项目阶段-项目投决
 //                tProjectPool.setProjectState("i");//项目状态-项目投决通过

+ 23 - 22
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestmentOpportunityServiceImpl.java

@@ -17,7 +17,7 @@ import com.ruoyi.invest.domain.*;
 import com.ruoyi.invest.mapper.InvestmentOpportunityMapper;
 import com.ruoyi.flowable.service.IInvestmentOpportunityService;
 import com.ruoyi.invest.service.*;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.tool.service.ITUnifyFileService;
@@ -73,30 +73,32 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
 
     @Autowired
     private IFlowService flowService;
+
     /**
-     * 查询项目阶段为投资机会、项目立项、尽职背调、项目投决、并不是关闭的流程、并没有终止的项目列表
+     * 查询项目阶段为投资机会、项目立项、尽职背调、项目投决、并不是关闭的流程、并没有终止的项目列表(总)
      *
      * @param tProjectPool 项目池
      * @return 项目池
      */
     @Override
-    public List<TProjectPool> selectTProjectList(TProjectPool tProjectPool)
+    public List<TProjectPool> selectProjectList(TProjectPool tProjectPool)
     {
-        return investmentOpportunityMapper.selectTProjectList(tProjectPool);
+        return investmentOpportunityMapper.selectProjectList(tProjectPool);
+    }
+    /**
+     * 查询可申请项目列表(总)
+     *
+     * @param tProjectPool 项目池
+     * @return 项目池集合
+     */
+    public List<TProjectPool> selectApplicableProjectList(TProjectPool tProjectPool){
+        return investmentOpportunityMapper.selectApplicableProjectList(tProjectPool);
     }
     @Override
     public List<TProjectPoolVo> selectAllInvestmentOpportunityList(TProjectPool tProjectPool){
         return investmentOpportunityMapper.selectAllInvestmentOpportunityList(tProjectPool);
     }
     @Override
-    public List<TProjectPoolVo> selectAllWatchList(TProjectPool tProjectPool){
-        return investmentOpportunityMapper.selectAllWatchList(tProjectPool);
-    }
-    @Override
-    public List<TProjectPoolVo> selectAllTerminationList(TProjectPool tProjectPool){
-        return investmentOpportunityMapper.selectAllTerminationList(tProjectPool);
-    }
-    @Override
     public List<TProjectPoolVo> getMyTaskList(String userId, TProjectPool tProjectPool){
         return investmentOpportunityMapper.getMyTaskList(userId, tProjectPool);
     }
@@ -105,7 +107,7 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
         return investmentOpportunityMapper.getMyDoneTaskList(userId, tProjectPool);
     }
     @Override
-    public List<TProjectPoolVo> getMyList(String userId,TProjectPool tProjectPool){
+    public List<TProjectPoolVo> getMyList(String userId, TProjectPool tProjectPool){
         return investmentOpportunityMapper.getMyList(userId, tProjectPool);
     }
     /**
@@ -177,7 +179,6 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
                     tProjectPool.setProjectContacts(tProjectContacts.getId());
                     // todo 设置公司信息关联关系
                     tProjectCompany.setProjectPoolId(tProjectPool.getId());
-
                     // todo 保存公司附件信息
                     tUnifyFileService.insertTUnifyFileList(tProjectPool.getListFile(),
                             tProjectPool.getId(),
@@ -186,18 +187,18 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
                             nickName);
 
                     // todo 保存BP附件信息
-                    tUnifyFileService.insertTUnifyFileList(tProjectPool.getBpFile(),
+                    tUnifyFileService.insertTUnifyFileLists(tProjectPool.getBpFile(),
                             tProjectPool.getId(),
                             tProjectPool.getId(),
                             String.valueOf(FileType.BP.ordinal()),
-                            nickName);
+                            nickName,"a","1");
 
                     // todo 保存其他附件信息
-                    tUnifyFileService.insertTUnifyFileList(tProjectPool.getOtherFile(),
+                    tUnifyFileService.insertTUnifyFileLists(tProjectPool.getOtherFile(),
                             tProjectPool.getId(),
                             tProjectPool.getId(),
                             String.valueOf(FileType.OTHER.ordinal()),
-                            nickName);
+                            nickName,"k","1");
 
                     tProjectCompanyService.insertTProjectCompany(tProjectCompany);
                     tProjectContactsService.insertTProjectContacts(tProjectContacts);
@@ -304,18 +305,18 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
                         nickName);
 
                 // todo 保存BP附件信息
-                tUnifyFileService.insertTUnifyFileList(tProjectPool.getBpFile(),
+                tUnifyFileService.insertTUnifyFileLists(tProjectPool.getBpFile(),
                         tProjectPool.getId(),
                         tProjectPool.getId(),
                         String.valueOf(FileType.BP.ordinal()),
-                        nickName);
+                        nickName,"a","1");
 
                 // todo 保存其他附件信息
-                tUnifyFileService.insertTUnifyFileList(tProjectPool.getOtherFile(),
+                tUnifyFileService.insertTUnifyFileLists(tProjectPool.getOtherFile(),
                         tProjectPool.getId(),
                         tProjectPool.getId(),
                         String.valueOf(FileType.OTHER.ordinal()),
-                        nickName);
+                        nickName,"k","1");
 
                 tProjectCompanyService.insertTProjectCompany(tProjectCompany);
                 tProjectContactsService.insertTProjectContacts(tProjectContacts);

+ 6 - 5
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/TerminationServiceImpl.java

@@ -256,18 +256,19 @@ public class TerminationServiceImpl extends FlowServiceFactory implements ITermi
                     //关闭该项目存在的流程(投资机会、项目立项、尽职背调、项目投决)
 
                     tProjectTermination.setStatus(3);
-                    tProjectPool.setProjectStage("8");//项目阶段-项目终止
-                    tProjectPool.setProjectState("p");//项目状态-终止通过
+                    /*tProjectPool.setProjectStage("8");//项目阶段-项目终止
+                    tProjectPool.setProjectState("p");//项目状态-终止通过*/
                     tProjectPool.setUpdateBy(userInfo.getNickName());
+                    tProjectPool.setProjectStatus("1");//项目机会状态为终止
                     // todo 增加项目创建记录
                     tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(),"项目终止完成", userInfo.getNickName());
 
-                }else{
-                    tProjectPool.setProjectStage("8");//项目阶段-项目终止
+                }/*else{
+                    tProjectPool.setProjectStage("6");//项目阶段-
                     tProjectPool.setProjectState("o");//项目状态-
                     tProjectPool.setDelFlag("0");
                     tProjectPool.setUpdateBy(userInfo.getNickName());
-                }
+                }*/
                 tProjectPoolService.updateTProjectPool(tProjectPool);
             }
 

+ 4 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectApproval.java

@@ -53,6 +53,10 @@ public class TProjectApproval extends BaseEntity
      * 附件信息
      */
     private List<TUnifyFile> listFile;
+    /**
+     * 其他附件信息
+     */
+    private List<TUnifyFile> otherFile;
 
     /**
     * 是否需要立项会议

+ 4 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectDecision.java

@@ -50,6 +50,10 @@ public class TProjectDecision extends BaseEntity
      * 附件信息
      */
     private List<TUnifyFile> listFile;
+    /**
+     * 其他附件信息
+     */
+    private List<TUnifyFile> otherFile;
     /**
      * 是否需要投决会议
      */

+ 35 - 2
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectInformation.java

@@ -43,7 +43,8 @@ public class TProjectInformation extends BaseEntity
 
     /** 附件业务ID */
     private String fileBusinessId;
-
+    private String createBy;
+    private String fileId;
     /** 状态 */
     private String delFlag;
 
@@ -120,7 +121,26 @@ public class TProjectInformation extends BaseEntity
     {
         return fileBusinessId;
     }
-    public void setDelFlag(String delFlag) 
+
+    @Override
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    @Override
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getFileId() {
+        return fileId;
+    }
+
+    public void setFileId(String fileId) {
+        this.fileId = fileId;
+    }
+
+    public void setDelFlag(String delFlag)
     {
         this.delFlag = delFlag;
     }
@@ -164,4 +184,17 @@ public class TProjectInformation extends BaseEntity
             .append("updateTime", getUpdateTime())
             .toString();
     }
+    public TProjectInformation(){
+
+    }
+    public TProjectInformation(String id,String fileName,String fileType,String projectPoolId,String projectStage,String fileBusinessId,String createBy,String fileId){
+        this.id=id;
+        this.fileName=fileName;
+        this.fileType=fileType;
+        this.projectPoolId=projectPoolId;
+        this.projectStage=projectStage;
+        this.fileBusinessId=fileBusinessId;
+        this.createBy=createBy;
+        this.fileId=fileId;
+    }
 }

+ 0 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectApprovalVo.java

@@ -25,7 +25,6 @@ public class ProjectApprovalVo extends BaseEntity
     private String id;
 
     /** 项目ID */
-    @Excel(name = "项目ID")
     private String projectPoolId;
 
 

+ 0 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectDecisionVo.java

@@ -25,7 +25,6 @@ public class ProjectDecisionVo extends BaseEntity
     private String id;
 
     /** 项目ID */
-    @Excel(name = "项目ID")
     private String projectPoolId;
 
     /** 项目名称 */

+ 0 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectInvestigateVo.java

@@ -35,7 +35,6 @@ public class ProjectInvestigateVo extends BaseEntity
     private String investigateCode;
 
     /** 项目id */
-    @Excel(name = "项目id")
     private String projectPoolId;
 
     /** 项目名称 */

+ 0 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectTerminationVo.java

@@ -20,7 +20,6 @@ public class ProjectTerminationVo extends BaseEntity
     private String id;
 
     /** 项目ID */
-    @Excel(name = "项目ID")
     private String projectPoolId;
 
     /** 项目名称 */

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TProjectPoolVo.java

@@ -1,4 +1,4 @@
-package com.ruoyi.system.domain.vo;
+package com.ruoyi.invest.domain.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;

+ 0 - 2
ruoyi-system/src/main/java/com/ruoyi/invest/mapper/ApprovalMapper.java

@@ -1,9 +1,7 @@
 package com.ruoyi.invest.mapper;
 
 import com.ruoyi.invest.domain.TProjectApproval;
-import com.ruoyi.invest.domain.TProjectPool;
 import com.ruoyi.invest.domain.vo.ProjectApprovalVo;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;

+ 8 - 9
ruoyi-system/src/main/java/com/ruoyi/invest/mapper/InvestmentOpportunityMapper.java

@@ -1,7 +1,7 @@
 package com.ruoyi.invest.mapper;
 
 import com.ruoyi.invest.domain.TProjectPool;
-import com.ruoyi.system.domain.vo.TProjectPoolVo;
+import com.ruoyi.invest.domain.vo.TProjectPoolVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -13,18 +13,17 @@ import java.util.List;
  * @date 2024-02-21
  */
 public interface InvestmentOpportunityMapper {
-    /*查询任务终止列表*/
-    List<TProjectPool> selectTProjectList(TProjectPool tProjectPool);
+
+    /*查询项目列表-项目阶段(总)*/
+    List<TProjectPool> selectProjectList(TProjectPool tProjectPool);
+    /*查询项目池列表-可申请(总)*/
+    public List<TProjectPool> selectApplicableProjectList(TProjectPool tProjectPool);
     /*查询所有投资机会流程*/
     List<TProjectPoolVo> selectAllInvestmentOpportunityList(@Param("projectPool")TProjectPool tProjectPool);
-    /*查询所有项目观望列表*/
-    List<TProjectPoolVo> selectAllWatchList(@Param("projectPool")TProjectPool tProjectPool);
-    /*查询所有项目终止列表*/
-    List<TProjectPoolVo> selectAllTerminationList(@Param("projectPool")TProjectPool tProjectPool);
     /*待办任务*/
-    List<TProjectPoolVo> getMyTaskList(@Param("userId") String userId,@Param("projectPool")TProjectPool tProjectPool);
+    List<TProjectPoolVo> getMyTaskList(@Param("userId") String userId, @Param("projectPool")TProjectPool tProjectPool);
     /*已办任务*/
-    List<TProjectPoolVo> getMyDoneTaskList(@Param("userId") String userId,@Param("projectPool")TProjectPool tProjectPool);
+    List<TProjectPoolVo> getMyDoneTaskList(@Param("userId") String userId, @Param("projectPool")TProjectPool tProjectPool);
     /*我的单据*/
     List<TProjectPoolVo> getMyList(@Param("userId") String userId, @Param("projectPool")TProjectPool tProjectPool);
     /*详情*/

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/mapper/TProjectInformationMapper.java

@@ -68,6 +68,13 @@ public interface TProjectInformationMapper
      * @return 结果
      */
     public int updateTProjectInformationByIds(String[] ids);
+    /**
+     * 批量删除文件资料
+     *
+     * @param fileIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int updateTProjectInformationByFileIds(String[] fileIds);
 
     /**
      * 根据项目ID获取会议记录

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/service/ITProjectInformationService.java

@@ -69,6 +69,14 @@ public interface ITProjectInformationService
      */
     public int updateTProjectInformationByIds(String[] ids);
 
+    /**
+     * 批量删除文件资料(修改del_flag状态)
+     *
+     * @param fileIds 需要删除的文件资料主键集合
+     * @return 结果
+     */
+    public int updateTProjectInformationByFileIds(String[] fileIds);
+
     /**
      * 根据项目ID获取会议记录
      * @param projectPoolId

+ 10 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/service/impl/TProjectInformationServiceImpl.java

@@ -105,7 +105,16 @@ public class TProjectInformationServiceImpl implements ITProjectInformationServi
     public int updateTProjectInformationByIds(String[] ids) {
         return tProjectInformationMapper.updateTProjectInformationByIds(ids);
     }
-
+    /**
+     * 批量删除文件资料
+     *
+     * @param fileIds 需要删除的文件资料主键
+     * @return 结果
+     */
+    @Override
+    public int updateTProjectInformationByFileIds(String[] fileIds) {
+        return tProjectInformationMapper.updateTProjectInformationByFileIds(fileIds);
+    }
     /**
      * 根据项目ID获取会议记录
      * @param projectPoolId

+ 22 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ApproveUser.java

@@ -0,0 +1,22 @@
+package com.ruoyi.system.domain;
+
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 审批用户对象 approve_user
+ * 
+ * @author ruoyi
+ */
+@Data
+public class ApproveUser extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+    private Integer id;
+    private String userId;
+    private String loginId;
+    private String deptId;
+    private String deptName;
+
+}

+ 43 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ApproveUserMapper.java

@@ -0,0 +1,43 @@
+package com.ruoyi.system.mapper;
+
+
+import com.ruoyi.system.domain.ApproveUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+
+/**
+ * 用户表 数据层
+ * 
+ * @author ruoyi
+ */
+public interface ApproveUserMapper
+{
+
+    /**
+     * 新增用户信息
+     * 
+     * @param user 用户信息
+     * @return 结果
+     */
+    public int insertApproveUsers(@Param("aus")List<ApproveUser> user);
+
+    /**
+     * 修改用户信息
+     * 
+     * @param user 用户信息
+     * @return 结果
+     */
+    public int updateApproveUsers(@Param("aus")List<ApproveUser> user);
+
+    List<ApproveUser> selectApproveUserList(ApproveUser user);
+    List<String> findApproveUser();
+    List<String> findApproveUserByDeptId(@Param("deptId")String deptId);
+    void deleteApproveUserByUserId(@Param("userId")String userId);
+    void deleteApproveUserByDeptId(@Param("deptId")String deptId);
+
+
+
+}

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -131,4 +131,12 @@ public interface SysUserMapper
      * @return 结果
      */
     public SysUser checkEmailUnique(String email);
+
+    /**
+     * 通过部门名称查询用户
+     *
+     * @param deptName 部门名称
+     * @return 用户对象信息
+     */
+    List<SysUser> selectUserByDeptName(String deptName,String deptName1);
 }

+ 46 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IApproveUserService.java

@@ -0,0 +1,46 @@
+package com.ruoyi.system.service;
+
+
+import com.ruoyi.system.domain.ApproveUser;
+
+import java.util.List;
+
+/**
+ * 审批用户 业务层
+ * 
+ * @author ruoyi
+ */
+public interface IApproveUserService
+{
+    /**
+     * 根据条件分页查询用户列表
+     * 
+     * @param user 用户信息
+     * @return 用户信息集合信息
+     */
+    public List<ApproveUser> selectApproveUserList(ApproveUser user);
+
+    /**
+     * 新增用户信息
+     * 
+     * @param user 用户信息
+     * @return 结果
+     */
+    public int insertApproveUsers(List<ApproveUser> user);
+
+
+
+    /**
+     * 修改用户信息
+     * 
+     * @param user 用户信息
+     * @return 结果
+     */
+    public int updateApproveUsers(List<ApproveUser> user);
+    List<String> findApproveUser();
+    List<String> findApproveUserByDeptId(String deptId);
+    void deleteApproveUserByUserId(String userId);
+    void deleteApproveUserByDeptId(String deptId);
+
+
+}

+ 78 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ApproveUserServiceImpl.java

@@ -0,0 +1,78 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.annotation.DataScope;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.bean.BeanValidators;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.service.IApproveUserService;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysUserService;
+import org.apache.ibatis.annotations.Param;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 用户 业务层处理
+ * 
+ * @author ruoyi
+ */
+@Service
+public class ApproveUserServiceImpl implements IApproveUserService {
+    private static final Logger log = LoggerFactory.getLogger(ApproveUserServiceImpl.class);
+
+    @Autowired
+    private ApproveUserMapper approveUserMapper;
+
+    /**
+     * 根据条件分页查询用户列表
+     *
+     * @param user 用户信息
+     * @return 用户信息集合信息
+     */
+    @Override
+    public List<ApproveUser> selectApproveUserList(ApproveUser user) {
+        return approveUserMapper.selectApproveUserList(user);
+    }
+    @Override
+    public int insertApproveUsers(List<ApproveUser> user) {
+        return approveUserMapper.insertApproveUsers(user);
+    }
+
+    @Override
+    public int updateApproveUsers(List<ApproveUser> user) {
+        return approveUserMapper.updateApproveUsers(user);
+    }
+   @Override
+    public void deleteApproveUserByUserId(String userId){
+        approveUserMapper.deleteApproveUserByUserId(userId);
+    }
+    @Override
+    public void deleteApproveUserByDeptId(String deptId){
+        approveUserMapper.deleteApproveUserByDeptId(deptId);
+    }
+    @Override
+    public List<String> findApproveUser(){
+        return approveUserMapper.findApproveUser();
+    }
+    @Override
+    public List<String> findApproveUserByDeptId(String deptId){
+        return approveUserMapper.findApproveUserByDeptId(deptId);
+
+    }
+}

+ 6 - 1
ruoyi-system/src/main/java/com/ruoyi/tool/mapper/TUnifyFileMapper.java

@@ -74,7 +74,12 @@ public interface TUnifyFileMapper
      * @return
      */
     public List<TUnifyFile> selectTUnifyFileByBusinessIdList(@Param("fileBusinessId")String fileBusinessId,@Param("uploadType")String uploadType);
-
+    /**
+     * 根据ID()获取附件详情信息列表
+     * @param id
+     * @return
+     */
+    public List<TUnifyFile> selectTUnifyFileByIdList(@Param("id")String id,@Param("uploadType")String uploadType);
     /**
      * 根据fileId()获取项目中所有附件列表
      * @param fileId

+ 18 - 1
ruoyi-system/src/main/java/com/ruoyi/tool/service/ITUnifyFileService.java

@@ -48,7 +48,16 @@ public interface ITUnifyFileService
      * @return
      */
     public void insertTUnifyFileList(List<TUnifyFile> tUnifyFileList,String fileId,String fileBusinessId,String uploadType,String createBy);
-
+    /**
+     * 批量新增关联附件
+     * @param tUnifyFileList
+     * @param projectPoolId
+     * @param fileBusinessId
+     * @param uploadType
+     * @param createBy
+     * @return
+     */
+    public void insertTUnifyFileLists(List<TUnifyFile> tUnifyFileList,String projectPoolId,String fileBusinessId,String uploadType,String createBy,String fileType,String projectStage);
     /**
      * 修改附件
      * 
@@ -97,6 +106,14 @@ public interface ITUnifyFileService
      * @return
      */
     public List<TUnifyFile> selectTUnifyFileByBusinessIdList(String fileBusinessId,String uploadType);
+    /**
+     * 根据ID()获取附件详情信息列表
+     *
+     * @param id
+     * @param uploadType
+     * @return
+     */
+    public List<TUnifyFile> selectTUnifyFileByIdList(String id,String uploadType);
 
     /**
      * 根据fileId()获取项目中所有附件列表

+ 44 - 7
ruoyi-system/src/main/java/com/ruoyi/tool/service/impl/TUnifyFileServiceImpl.java

@@ -3,20 +3,16 @@ package com.ruoyi.tool.service.impl;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.ruoyi.common.config.RuoYiConfig;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.FileType;
+
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.file.FileUploadUtils;
-import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.invest.domain.TProjectInformation;
+import com.ruoyi.invest.service.ITProjectInformationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.tool.mapper.TUnifyFileMapper;
 import com.ruoyi.tool.domain.TUnifyFile;
 import com.ruoyi.tool.service.ITUnifyFileService;
-import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 附件Service业务层处理
@@ -29,6 +25,8 @@ public class TUnifyFileServiceImpl implements ITUnifyFileService
 {
     @Autowired
     private TUnifyFileMapper tUnifyFileMapper;
+    @Autowired
+    private ITProjectInformationService tProjectInformationService;
 
     /**
      * 查询附件
@@ -94,6 +92,36 @@ public class TUnifyFileServiceImpl implements ITUnifyFileService
             }
         }
     }
+    /**
+     * 批量新增关联附件
+     * @param tUnifyFileList
+     * @param projectPoolId
+     * @param fileBusinessId
+     * @param uploadType
+     * @param createBy
+     * @return
+     */
+    @Override
+    public void insertTUnifyFileLists(List<TUnifyFile> tUnifyFileList, String projectPoolId, String fileBusinessId, String uploadType, String createBy,String fileType,String projectStage) {
+        if(null != tUnifyFileList && !tUnifyFileList.isEmpty()){
+            for (TUnifyFile tUnifyFile:
+                    tUnifyFileList) {
+                if(tUnifyFile.getId() == null){
+                    tUnifyFile.setId(IdUtils.fastSimpleUUID());
+                    tUnifyFile.setCreateTime(DateUtils.getNowDate());
+                    tUnifyFile.setFileId(projectPoolId);
+                    tUnifyFile.setFileBusinessId(fileBusinessId);
+                    tUnifyFile.setUploadType(uploadType);//文件类型:公司信息
+                    tUnifyFile.setCreateBy(createBy);
+                    tUnifyFileMapper.insertTUnifyFile(tUnifyFile);
+                    tProjectInformationService.insertTProjectInformation(new TProjectInformation(IdUtils.fastSimpleUUID(),
+                            tUnifyFile.getNewUploadName(), fileType,
+                            projectPoolId, projectStage, fileBusinessId, createBy,tUnifyFile.getId()));
+
+                }
+            }
+        }
+    }
 
     /**
      * 修改附件
@@ -162,6 +190,15 @@ public class TUnifyFileServiceImpl implements ITUnifyFileService
     public List<TUnifyFile> selectTUnifyFileByBusinessIdList(String fileBusinessId,String uploadType) {
         return tUnifyFileMapper.selectTUnifyFileByBusinessIdList(fileBusinessId,uploadType);
     }
+    /**
+     * 根据ID()获取附件详情信息列表
+     * @param id
+     * @return
+     */
+    @Override
+    public List<TUnifyFile> selectTUnifyFileByIdList(String id,String uploadType) {
+        return tUnifyFileMapper.selectTUnifyFileByIdList(id,uploadType);
+    }
 
     /**
      * 根据fileId()获取项目中所有附件列表

+ 5 - 5
ruoyi-system/src/main/resources/mapper/invest/ApprovalMapper.xml

@@ -62,12 +62,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, project_pool_id, project_overview, project_sparkle, participants_id, participants, remark, del_flag, create_by, create_time, update_by, update_time from t_project_approval
     </sql>
     <sql id="where_sql">
-        <if test="projectApproval.projectPoolId != null  and projectApproval.projectApproval.projectPoolId != ''"> and a.project_pool_id = #{projectApproval.projectPoolId}</if>
+        <if test="projectApproval.projectPoolId != null  and projectApproval.projectPoolId != ''"> and a.project_pool_id = #{projectApproval.projectPoolId}</if>
         <if test="projectApproval.projectName != null  and projectApproval.projectName != ''"> and tp.project_name like concat('%', #{projectApproval.projectName}, '%')</if>
         <!--<if test="projectApproval.projectGroup != null  and projectApproval.projectGroup != ''"> and tp.project_group = #{projectApproval.projectGroup}</if>-->
         <if test="projectApproval.projectOverview != null  and projectApproval.projectOverview != ''"> and a.project_overview like concat('%',  #{projectApproval.projectOverview}, '%')</if>
         <if test="projectApproval.projectSparkle != null  and projectApproval.projectSparkle != ''"> and a.project_sparkle like concat('%',  #{projectApproval.projectSparkle}, '%')</if>
-
+        <if test="projectApproval.status != null"> and a.status = #{projectApproval.status}</if>
     </sql>
     <select id="selectAllApprovalList" resultMap="ProjectApprovalVoResult">
         select a.id,a.proc_inst_id, a.project_pool_id,tp.project_name, tp.industry,tp.project_stage,
@@ -154,9 +154,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         uu.nick_name AS 'startUserName',
         dd.dept_name AS 'startDeptName',
         t.ID_ AS 'taskId',
-        t.NAME_ AS 'taskName',
+        GROUP_CONCAT(DISTINCT t.NAME_ SEPARATOR '\r\n' ) as 'taskName',
         t.ASSIGNEE_ AS 'assignee',
-        ui.nick_name AS 'assigneeName',
+        GROUP_CONCAT(DISTINCT ui.nick_name SEPARATOR '\r\n') AS 'assigneeName',
         t.TASK_DEF_KEY_ as 'taskDefKey',
         rp.DEPLOYMENT_ID_ AS 'deployId'
         from t_project_approval a
@@ -185,7 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         p.START_USER_ID_ AS 'startUserId',
         uu.nick_name AS 'startUserName',
         dd.dept_name AS 'startDeptName',
-        t.NAME_ as 'taskName',
+        GROUP_CONCAT(DISTINCT t.NAME_ SEPARATOR '\r\n' ) as 'taskName',
         t.TASK_DEF_KEY_ as 'taskDefKey',
         DATE_FORMAT(t.CREATE_TIME_ ,'%Y-%m-%d %H:%i') as 'taskCreateTiem',
         t.ASSIGNEE_ as 'assignee',

+ 1 - 0
ruoyi-system/src/main/resources/mapper/invest/DecisionMapper.xml

@@ -61,6 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="projectDecision.projectPoolId != null  and projectDecision.projectPoolId != ''"> and a.project_pool_id = #{projectDecision.projectPoolId}</if>
         <if test="projectDecision.projectName != null  and projectDecision.projectName != ''"> and tp.project_name like concat('%', #{projectDecision.projectName}, '%')</if>
         <if test="projectDecision.provision != null  and projectDecision.provision != ''"> and a.provision like concat('%', #{projectDecision.provision}, '%')</if>
+        <if test="projectDecision.status != null"> and a.status = #{projectDecision.status}</if>
     </sql>
     <select id="selectAllDecisionList" resultMap="ProjectDecisionVoResult">
         select a.id,a.proc_inst_id, a.project_pool_id,tp.project_name, tp.industry,tp.project_stage,

+ 4 - 3
ruoyi-system/src/main/resources/mapper/invest/InvestigateMapper.xml

@@ -83,6 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="projectInvestigate.projectName != null  and projectInvestigate.projectName != ''"> and tp.project_name like concat('%', #{projectInvestigate.projectName}, '%')</if>
         <if test="projectInvestigate.investigateName != null  and projectInvestigate.investigateName != ''"> and a.investigate_name like concat('%', #{projectInvestigate.investigateName}, '%')</if>
         <if test="projectInvestigate.investigatePlace != null  and projectInvestigate.investigatePlace != ''"> and a.investigate_place like concat('%', #{projectInvestigate.investigatePlace}, '%')</if>
+        <if test="projectInvestigate.status != null"> and a.status = #{projectInvestigate.status}</if>
     </sql>
     <select id="selectAllInvestigateList" resultMap="ProjectInvestigateVoResult">
         select a.id,a.proc_inst_id, a.project_pool_id,tp.project_name, tp.industry,tp.project_stage,tp.project_state,tp.invest_head,tp.project_status,
@@ -174,9 +175,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         uu.nick_name AS 'startUserName',
         dd.dept_name AS 'startDeptName',
         t.ID_ AS 'taskId',
-        t.NAME_ AS 'taskName',
+        GROUP_CONCAT(DISTINCT t.NAME_ SEPARATOR '\r\n' ) as 'taskName',
         t.ASSIGNEE_ AS 'assignee',
-        ui.nick_name AS 'assigneeName',
+        GROUP_CONCAT(DISTINCT ui.nick_name SEPARATOR '\r\n') AS 'assigneeName',
         t.TASK_DEF_KEY_ as 'taskDefKey',
         rp.DEPLOYMENT_ID_ AS 'deployId'
         from t_project_investigate a
@@ -206,7 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         p.START_USER_ID_ AS 'startUserId',
         uu.nick_name AS 'startUserName',
         dd.dept_name AS 'startDeptName',
-        t.NAME_ as 'taskName',
+        GROUP_CONCAT(DISTINCT t.NAME_ SEPARATOR '\r\n' ) as 'taskName',
         t.TASK_DEF_KEY_ as 'taskDefKey',
         DATE_FORMAT(t.CREATE_TIME_ ,'%Y-%m-%d %H:%i') as 'taskCreateTiem',
         t.ASSIGNEE_ as 'assignee',

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 47 - 77
ruoyi-system/src/main/resources/mapper/invest/InvestmentOpportunityMapper.xml


+ 14 - 2
ruoyi-system/src/main/resources/mapper/invest/TProjectInformationMapper.xml

@@ -18,7 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
-
+        <result property="fileId"    column="file_id"    />
         <association property="tProjectPool" javaType="TProjectPool"  resultMap="TProjectPoolResult" />
     </resultMap>
 
@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectTProjectInformationVo">
-        select a.id, a.file_name, a.file_type, a.project_pool_id, a.project_stage, a.meeting_code, a.file_business_id, a.del_flag, a.remark, a.create_by, a.create_time, a.update_by, a.update_time,
+        select a.id, a.file_name, a.file_type, a.project_pool_id, a.project_stage, a.meeting_code, a.file_business_id, a.del_flag, a.remark, a.create_by, a.create_time, a.update_by, a.update_time,a.file_id,
             b.project_name, b.project_stage, b.project_state
         from t_project_information a
             left join t_project_pool b ON a.project_pool_id = b.id
@@ -68,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
+            <if test="fileId != null">file_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -83,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
+            <if test="fileId != null">#{fileId},</if>
          </trim>
     </insert>
 
@@ -101,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="fileId != null">file_id = #{fileId},</if>
         </trim>
         where id = #{id}
     </update>
@@ -125,6 +128,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
+    <update id="updateTProjectInformationByFileIds" parameterType="String">
+        update t_project_information
+        set del_flag = 1
+        where file_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
     <select id="listProjectPoolId" parameterType="String" resultMap="TProjectInformationResult">
         <include refid="selectTProjectInformationVo"/>
         where a.project_pool_id = #{projectPoolId} and a.del_flag = 0

+ 4 - 0
ruoyi-system/src/main/resources/mapper/invest/TProjectPoolMapper.xml

@@ -145,6 +145,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="projectState != null  and projectState != ''"> and a.project_state = #{projectState}</if>
             <if test="delFlag != null  and delFlag != ''"> and a.del_flag = #{delFlag}</if>
             <if test="projectStatus != null  and projectStatus != ''"> and a.project_status = #{projectStatus}</if>
+            <if test="status != null"> and a.status = #{status}</if>
+            <if test="approvalFlag != null and approvalFlag  != ''">and a.approval_flag = #{approvalFlag}</if>
+            <if test="investigateFlag != null and investigateFlag  != ''">and a.investigate_flag = #{investigateFlag}</if>
+            <if test="decisionFlag != null and decisionFlag  != ''">and a.decision_flag = #{decisionFlag}</if>
         </where>
     </select>
 

+ 1 - 0
ruoyi-system/src/main/resources/mapper/invest/TerminationMapper.xml

@@ -55,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="projectTermination.projectPoolId != null  and projectTermination.projectPoolId != ''"> and a.project_pool_id = #{projectTermination.projectPoolId}</if>
         <if test="projectTermination.projectName != null  and projectTermination.projectName != ''"> and tp.project_name like concat('%', #{projectTermination.projectName}, '%')</if>
         <if test="projectTermination.reason != null  and projectTermination.reason != ''"> and a.reason like concat('%', #{projectTermination.reason}, '%')</if>
+        <if test="projectTermination.status != null"> and a.status = #{projectTermination.status} </if>
     </sql>
     <insert id="insertTProjectTermination" parameterType="TProjectTermination">
         insert into t_project_termination

+ 94 - 0
ruoyi-system/src/main/resources/mapper/system/ApproveUserMapper.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.ApproveUserMapper">
+
+    <resultMap type="ApproveUser" id="ApproveUserResult">
+		<id     property="id"       column="id"      />
+        <result property="userId"       column="user_id"      />
+		<result property="loginId"       column="login_id"      />
+        <result property="deptId"       column="dept_id"      />
+        <result property="deptName"     column="dept_name"    />
+    </resultMap>
+	<sql id="selectApproveUserVo">
+        select u.user_id,u.login_id u.dept_id, u.dept_name,
+        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
+        from approve_user u
+		    left join sys_dept d on u.dept_id = d.dept_id
+		    left join sys_user_role ur on u.user_id = ur.user_id
+		    left join sys_role r on r.role_id = ur.role_id
+    </sql>
+    
+    <select id="selectApproveUserList" parameterType="ApproveUser" resultMap="ApproveUserResult">
+		select u.user_id,u.login_id u.dept_id, u.dept_name,
+		from approve_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		where u.del_flag = '0'
+		<if test="userId != null and userId != 0">
+			AND u.user_id = #{userId}
+		</if>
+
+		<if test="deptId != null and deptId != 0">
+			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
+		</if>
+	</select>
+	<insert id="insertApproveUsers" parameterType="java.util.List">
+		insert into approve_user(
+		user_id,
+		login_id,
+		dept_id,
+		dept_name
+		)
+		values
+		<foreach collection="aus" item="au" index="index" separator="," >
+			(
+			#{au.userId},
+			#{au.loginId},
+			#{au.deptId},
+			#{au.deptName}
+			)
+		</foreach>
+	</insert>
+
+
+	<update id="updateApproveUsers">
+		<foreach collection="aus" item="aus" index="index">
+			update  approve_user
+			<trim prefix="SET" suffixOverrides=",">
+				<if test="aus.userId != null and  aus.userId != ''">
+					uesr_id = #{aus.userId},
+				</if>
+				<if test="aus.user != null and  aus.loginId != ''">
+					login_id = #{aus.loginId},
+				</if>
+				<if test="aus.loginId != null and  aus.loginId != ''">
+					dept_id = #{aus.deptId},
+				</if>
+				<if test="aus.loginId != null and  aus.loginId != ''">
+					dept_name = #{aus.deptName}
+				</if>
+			</trim>
+			where
+			deptId=#{aus.deptId}
+		</foreach>
+	</update>
+	<select id="findApproveUser" resultType="java.lang.String">
+		select user_id from approve_user
+	</select>
+	<select id="findApproveUserByDeptId" resultType="java.lang.String">
+		select user_id from approve_user where dept_id=#{deptId}
+	</select>
+	<select id="deleteApproveUserByUserId" parameterType="String">
+		delete from approve_user where user_id = #{userId}
+	</select>
+	<select id="deleteApproveUserByDeptId" parameterType="String">
+		delete from approve_user where dept_id = #{deptId}
+	</select>
+
+	
+
+
+	
+</mapper> 

+ 5 - 1
ruoyi-system/src/main/resources/mapper/tool/TUnifyFileMapper.xml

@@ -130,7 +130,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where file_business_id = #{fileBusinessId} and del_flag = 0
         <if test="uploadType != null  and uploadType != ''"> and upload_type = #{uploadType}</if>
     </select>
-
+    <select id="selectTUnifyFileByIdList" parameterType="String" resultMap="TUnifyFileResult">
+        <include refid="selectTUnifyFileVo"/>
+        where id = #{id} and del_flag = 0
+        <if test="uploadType != null  and uploadType != ''"> and upload_type = #{uploadType}</if>
+    </select>
     <select id="listFileId" parameterType="String" resultMap="TUnifyFileResult">
         <include refid="selectTUnifyFileVo"/>
         where file_id = #{fileId} and del_flag = 0

+ 44 - 0
ruoyi-ui/src/api/file/businessPlan.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listBusinessPlan(query) {
+  return request({
+    url: '/file/businessPlan/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getBusinessPlan(id) {
+  return request({
+    url: '/file/businessPlan/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addBusinessPlan(data) {
+  return request({
+    url: '/file/businessPlan',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateBusinessPlan(data) {
+  return request({
+    url: '/file/businessPlan',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delBusinessPlan(id) {
+  return request({
+    url: '/file/businessPlan/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/decisionReport.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listDecisionReport(query) {
+  return request({
+    url: '/file/decisionReport/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getDecisionReport(id) {
+  return request({
+    url: '/file/decisionReport/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addDecisionReport(data) {
+  return request({
+    url: '/file/decisionReport',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateDecisionReport(data) {
+  return request({
+    url: '/file/decisionReport',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delDecisionReport(id) {
+  return request({
+    url: '/file/decisionReport/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/financialEvaluation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listFinancialEvaluation(query) {
+  return request({
+    url: '/file/financialEvaluation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getFinancialEvaluation(id) {
+  return request({
+    url: '/file/financialEvaluation/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addFinancialEvaluation(data) {
+  return request({
+    url: '/file/financialEvaluation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateFinancialEvaluation(data) {
+  return request({
+    url: '/file/financialEvaluation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delFinancialEvaluation(id) {
+  return request({
+    url: '/file/financialEvaluation/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/initiationReport.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listInitiationReport(query) {
+  return request({
+    url: '/file/initiationReport/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getInitiationReport(id) {
+  return request({
+    url: '/file/initiationReport/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addInitiationReport(data) {
+  return request({
+    url: '/file/initiationReport',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateInitiationReport(data) {
+  return request({
+    url: '/file/initiationReport',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delInitiationReport(id) {
+  return request({
+    url: '/file/initiationReport/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/legalDueDiligence.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listLegalDueDiligence(query) {
+  return request({
+    url: '/file/legalDueDiligence/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getLegalDueDiligence(id) {
+  return request({
+    url: '/file/legalDueDiligence/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addLegalDueDiligence(data) {
+  return request({
+    url: '/file/legalDueDiligence',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateLegalDueDiligence(data) {
+  return request({
+    url: '/file/legalDueDiligence',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delLegalDueDiligence(id) {
+  return request({
+    url: '/file/legalDueDiligence/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/marketResearch.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listMarketResearch(query) {
+  return request({
+    url: '/file/marketResearch/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getMarketResearch(id) {
+  return request({
+    url: '/file/marketResearch/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addMarketResearch(data) {
+  return request({
+    url: '/file/marketResearch',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateMarketResearch(data) {
+  return request({
+    url: '/file/marketResearch',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delMarketResearch(id) {
+  return request({
+    url: '/file/marketResearch/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/file/projectTechnology.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询商业计划书列表
+export function listProjectTechnology(query) {
+  return request({
+    url: '/file/projectTechnology/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商业计划书详细
+export function getProjectTechnology(id) {
+  return request({
+    url: '/file/projectTechnology/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商业计划书
+export function addProjectTechnology(data) {
+  return request({
+    url: '/file/projectTechnology',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商业计划书
+export function updateProjectTechnology(data) {
+  return request({
+    url: '/file/projectTechnology',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商业计划书
+export function delProjectTechnology(id) {
+  return request({
+    url: '/file/projectTechnology/' + id,
+    method: 'delete'
+  })
+}

+ 8 - 0
ruoyi-ui/src/api/project/approval/pool.js

@@ -7,6 +7,14 @@ export function getAllApprovalList(query) {
     params: query
   })
 }
+//  查询可申请项目立项流程列表
+export function applicableListApproval(query) {
+  return request({
+    url: '/project/approval/applicableList',
+    method: 'get',
+    params: query
+  })
+}
 // 我的待办任务列表
 export function getMyTaskList(query) {
   return request({

+ 9 - 0
ruoyi-ui/src/api/project/decision/pool.js

@@ -7,6 +7,15 @@ export function getAllDecisionList(query) {
     params: query
   })
 }
+
+//  查询可申请项目投决流程列表 ​/dev-api​/invest​/pool​/listDecision
+export function applicableListDecision(query) {
+  return request({
+    url: '/project/decision/applicableList',
+    method: 'get',
+    params: query
+  })
+}
 // 我的待办任务列表
 export function getMyTaskList(query) {
   return request({

+ 3 - 18
ruoyi-ui/src/api/project/investOpp/pool.js

@@ -1,21 +1,6 @@
 import request from '@/utils/request'
-// 所有项目观望列表
-export function getAllWatchList(query) {
-  return request({
-    url: '/project/investmentOpportunity/allWatchlist',
-    method: 'get',
-    params: query
-  })
-}
-// 所有项目终止列表
-export function getAllTerminationList(query) {
-  return request({
-    url: '/project/investmentOpportunity/allTerminationList',
-    method: 'get',
-    params: query
-  })
-}
-// 所有投资机会列表
+
+// 所有项目机会流程列表
 export function getAllInvestOppList(query) {
   return request({
     url: '/project/investmentOpportunity/listAll',
@@ -97,7 +82,7 @@ export function getInvestInfo(pInstId) {
     method: 'delete'
   })
 }*/
-// 查询投资机会待办任务列表数量
+// 查询项目机会待办任务列表数量
 export function getMyTaskInvestOppNumber() {
   return request({
     url: '/project/investmentOpportunity/getMyTaskList',

+ 25 - 1
ruoyi-ui/src/api/project/investigate/pool.js

@@ -7,6 +7,15 @@ export function getAllInvestigateList(query) {
     params: query
   })
 }
+//  查询可申请尽职背调流程列表
+export function applicableListInvestigate(query) {
+  return request({
+    url: '/project/investigate/applicableList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 我的待办任务列表
 export function getMyTaskList(query) {
   return request({
@@ -65,8 +74,23 @@ export function getInvestigateInfo(pInstId) {
 // 查询尽职背调待办任务列表数量
 export function getMyTaskInvestigateNumber() {
   return request({
-    url: '/invest/investigate/getMyTaskList',
+    url: '/project/investigate/getMyTaskList',
     method: 'get'
   })
 }
+export function findApproveUser() {
+  return request({
+    url:'/system/approve/findApproveUser',
+    method: 'get'
+  })
+}
+//保存审批人员
+export function saveApproveUser(data) {
+  return request({
+    url:'/system/approve/saveApproveUser',
+    method: 'post',
+    data: data
+  })
+}
+
 

+ 67 - 0
ruoyi-ui/src/api/project/pool.js

@@ -0,0 +1,67 @@
+import request from '@/utils/request'
+//项目池
+// 查询项目池列表
+export function listPool(query) {
+  return request({
+    url: '/project/list',
+    method: 'get',
+    params: query
+  })
+}
+//项目机会阶段项目信息列表
+export function listInvestOppStage(query) {
+  return request({
+    url: '/project/listInvestOppStage',
+    method: 'get',
+    params: query
+  })
+}
+
+//项目立项阶段项目信息
+export function listApprovalStage(query) {
+  return request({
+    url: '/project/listApprovalStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目背调阶段项目信息
+export function listInvestigateStage(query) {
+  return request({
+    url: '/project/listInvestigateStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目投决阶段项目信息
+export function listDecisionStage(query) {
+  return request({
+    url: '/project/listDecisionStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目签约阶段项目信息
+export function listSignStage(query) {
+  return request({
+    url: '/project/listSignStage',
+    method: 'get',
+    params: query
+  })
+}
+// 所有项目观望列表
+export function getAllWatchList(query) {
+  return request({
+    url: '/project/allWatchlist',
+    method: 'get',
+    params: query
+  })
+}
+// 所有项目终止列表
+export function getAllTerminationList(query) {
+  return request({
+    url: '/project/allTerminationList',
+    method: 'get',
+    params: query
+  })
+}

+ 9 - 8
ruoyi-ui/src/api/project/termination/pool.js

@@ -1,5 +1,5 @@
 import request from '@/utils/request'
-// 所有项目终止列表
+// 所有项目终止流程列表
 export function getAllTerminationList(query) {
   return request({
     url: '/project/termination/listAll',
@@ -7,6 +7,14 @@ export function getAllTerminationList(query) {
     params: query
   })
 }
+//  查询可申请终止流程列表
+export function applicableListTermination(query) {
+  return request({
+    url: '/project/termination/applicableList',
+    method: 'get',
+    params: query
+  })
+}
 // 我的待办任务列表
 export function getMyTaskList(query) {
   return request({
@@ -109,10 +117,3 @@ export function getMyTaskTerminationNumber() {
   })
 }
 
-//  查询项目终止列表 ​/dev-api​/invest​/pool​/listDecision
-export function listTerminationList() {
-  return request({
-    url: '/project/termination/listTermination',
-    method: 'get'
-  })
-}

+ 12 - 1
ruoyi-ui/src/api/system/file.js

@@ -55,7 +55,18 @@ export function listFileBusinessId(id, uploadType) {
     params: obj
   })
 }
-
+// 根据ID()获取附件详情信息列表
+export function listFileById(id, uploadType) {
+  let obj = { id: id };
+  if (uploadType) {
+    obj.uploadType = uploadType;
+  }
+  return request({
+    url: '/system/file/listFileById',
+    method: 'get',
+    params: obj
+  })
+}
 export function downloadFileById(id) {
   return request({
     url: '/system/file/download/' + id,

+ 4 - 4
ruoyi-ui/src/layout/components/Sidebar/Item.vue

@@ -34,9 +34,9 @@ export default {
         let dueNum = store.getters.dueNum; //尽职背调
         let projectTJNum = store.getters.projectTJNum; //项目投决
         //我的任务下的菜单
-        let investOppNum = store.getters.investOppNum; //投资机会
+        let investOppNum = store.getters.investOppNum; //项目机会
         let approvalNum = store.getters.approvalNum; //项目立项
-        let investigateNum = store.getters.investigateNum; //尽职背调
+        let investigateNum = store.getters.investigateNum; //项目背调
         let decisionNum = store.getters.decisionNum; //项目投决
         let terminationNum = store.getters.terminationNum; //项目终止
         vnodes.push(
@@ -62,7 +62,7 @@ export default {
             ) : (
               ""
             )}
-            {icon === "select" && title === "投资机会" && investOppNum ? (
+            {icon === "select" && title === "项目机会" && investOppNum ? (
               <span class="hint">{investOppNum}</span>
             ) : (
               ""
@@ -72,7 +72,7 @@ export default {
             ) : (
               ""
             )}
-            {icon === "select" && title === "尽职背调" && investigateNum ? (
+            {icon === "select" && title === "项目背调" && investigateNum ? (
               <span class="hint">{investigateNum}</span>
             ) : (
               ""

+ 2 - 2
ruoyi-ui/src/permission.js

@@ -38,9 +38,9 @@ router.beforeEach((to, from, next) => {
             //store.dispatch("getApprovalNumber"); //初始化项目立项代办数量
             //store.dispatch("getInvestigateNumber"); //初始化尽职背调代办数量
             //store.dispatch("getDecisionNumber"); //初始化项目投决代办数量
-            store.dispatch("getMyTaskInvestOppNumber"); //初始化投资机会代办数量
+            store.dispatch("getMyTaskInvestOppNumber"); //初始化项目机会代办数量
             store.dispatch("getMyTaskApprovalNumber"); //初始化项目立项代办数量
-            store.dispatch("getMyTaskInvestigateNumber"); //初始化尽职背调代办数量
+            store.dispatch("getMyTaskInvestigateNumber"); //初始化项目背调代办数量
             store.dispatch("getMyTaskDecisionNumber"); //初始化项目投决代办数量
             store.dispatch("getMyTaskTerminationNumber"); //初始化项目终止代办数量
             //next({ ...to, replace: true }) // hack方法 确保addRoutes已完成

+ 11 - 5
ruoyi-ui/src/router/index.js

@@ -73,30 +73,36 @@ export const constantRoutes = [
     hidden: true,
     // redirect: 'noredirect',
     children: [
-      //投资机会
+      {
+        path: 'poolDetail',
+        name: 'poolDetail',
+        component: () => import('@/views/project/poolDetail'),
+        meta: { title: '项目详情' }
+      },
+      //项目机会
       {
         path: 'investOpp/apply',
         name: 'investOppApply',
         component: () => import('@/views/project/investOpp/apply'),
-        meta: { title: '申请投资机会' }
+        meta: { title: '申请项目机会' }
       },
       {
         path: 'investOpp/edit',
         name: 'investOppEdit',
         component: () => import('@/views/project/investOpp/edit'),
-        meta: { title: '修改投资机会' }
+        meta: { title: '修改项目机会' }
       },
       {
         path: "investOpp/audit",
         name: 'investOppAudit',
         component: () => import('@/views/project/investOpp/audit'),
-        meta: { title: '审批投资机会' }
+        meta: { title: '审批项目机会' }
       },
       {
         path: 'investOpp/detail',
         name: 'investOppDetail',
         component: () => import('@/views/project/investOpp/detail'),
-        meta: { title: '投资机会详情' }
+        meta: { title: '项目机会详情' }
       },
       //项目立项
       {

+ 7 - 7
ruoyi-ui/src/store/modules/user.js

@@ -101,9 +101,9 @@ const user = {
       ],
     ],
     // 我的任务-各项代办数量
-    investOppNum: 0,//投资机会
+    investOppNum: 0,//项目机会
     approvalNum: 0,//项目立项
-    investigateNum: 0,//尽职背调
+    investigateNum: 0,//项目背调
     decisionNum: 0,//项目投决
     terminationNum: 0,//项目终止
 
@@ -282,11 +282,11 @@ const user = {
       })
     },
     //我的任务-待办数量
-    //更新投资机会待办
+    //更新项目机会待办
     getMyTaskInvestOppNumber({ commit, state }) {
       return new Promise(resolve => {
         getMyTaskInvestOppNumber().then(res => {
-          const investOppNum = parseInt(res.total);//项目投决
+          const investOppNum = parseInt(res.total);//项目机会
           commit('SET_INVESTOPPNUM', investOppNum);
         })
       })
@@ -295,7 +295,7 @@ const user = {
     getMyTaskApprovalNumber({ commit, state }) {
       return new Promise(resolve => {
         getMyTaskApprovalNumber().then(res => {
-          const approvalNum = parseInt(res.total);//项目投决
+          const approvalNum = parseInt(res.total);//项目立项
           commit('SET_APPROVALNUM', approvalNum);
         })
       })
@@ -304,7 +304,7 @@ const user = {
     getMyTaskInvestigateNumber({ commit, state }) {
       return new Promise(resolve => {
         getMyTaskInvestigateNumber().then(res => {
-          const investigateNum = parseInt(res.total);//项目投决
+          const investigateNum = parseInt(res.total);//项目背调
           commit('SET_INVESTIGATENUM', investigateNum);
         })
       })
@@ -323,7 +323,7 @@ const user = {
     getMyTaskTerminationNumber({ commit, state }) {
       return new Promise(resolve => {
         getMyTaskTerminationNumber().then(res => {
-          const terminationNum = parseInt(res.total);//项目投决
+          const terminationNum = parseInt(res.total);//项目终止
           commit('SET_TERMINATIONNUM', terminationNum);
         })
       })

+ 613 - 0
ruoyi-ui/src/views/file/businessPlan/index.vue

@@ -0,0 +1,613 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:businessPlan:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:businessPlan:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:businessPlan:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:businessPlan:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="businessPlanList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:businessPlan:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:businessPlan:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别" disabled>
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listBusinessPlan,
+  getBusinessPlan,
+  delBusinessPlan,
+  addBusinessPlan,
+  updateBusinessPlan,
+} from "@/api/file/businessPlan";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      businessPlanList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+        fileId: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listBusinessPlan(this.queryParams).then((response) => {
+        this.businessPlanList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "a";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getBusinessPlan(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else{
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateBusinessPlan(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBusinessPlan(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delBusinessPlan(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/businessPlan/export",
+        {
+          ...this.queryParams,
+        },
+        `businessPlan_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/decisionReport/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:information:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:information:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:information:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:information:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="decisionReportList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:information:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:information:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别" disabled>
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listDecisionReport,
+  getDecisionReport,
+  delDecisionReport,
+  addDecisionReport,
+  updateDecisionReport,
+} from "@/api/file/decisionReport";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      decisionReportList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listDecisionReport(this.queryParams).then((response) => {
+        this.decisionReportList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "q";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getDecisionReport(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateDecisionReport(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDecisionReport(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delDecisionReport(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/decisionReport/export",
+        {
+          ...this.queryParams,
+        },
+        `decisionReport_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/financialEvaluation/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:financialEvaluation:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:financialEvaluation:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:financialEvaluation:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:financialEvaluation:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="financialEvaluationList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:financialEvaluation:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:financialEvaluation:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别">
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listFinancialEvaluation,
+  getFinancialEvaluation,
+  delFinancialEvaluation,
+  addFinancialEvaluation,
+  updateFinancialEvaluation,
+} from "@/api/file/financialEvaluation";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      financialEvaluationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listFinancialEvaluation(this.queryParams).then((response) => {
+        this.financialEvaluationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "o";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getFinancialEvaluation(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateFinancialEvaluation(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFinancialEvaluation(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delFinancialEvaluation(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/financialEvaluation/export",
+        {
+          ...this.queryParams,
+        },
+        `financialEvaluation_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/initiationReport/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:initiationReport:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:initiationReport:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:initiationReport:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:initiationReport:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="initiationReportList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:initiationReport:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:initiationReport:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别">
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listInitiationReport,
+  getInitiationReport,
+  delInitiationReport,
+  addInitiationReport,
+  updateInitiationReport,
+} from "@/api/file/initiationReport";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      initiationReportList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listInitiationReport(this.queryParams).then((response) => {
+        this.initiationReportList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "l";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getInitiationReport(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateInitiationReport(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInitiationReport(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delInitiationReport(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/initiationReport/export",
+        {
+          ...this.queryParams,
+        },
+        `initiationReport_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/legalDueDiligence/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:legalDueDiligence:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:legalDueDiligence:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:legalDueDiligence:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:legalDueDiligence:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="legalDueDiligenceList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:legalDueDiligence:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:legalDueDiligence:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别">
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listLegalDueDiligence,
+  getLegalDueDiligence,
+  delLegalDueDiligence,
+  addLegalDueDiligence,
+  updateLegalDueDiligence,
+} from "@/api/file/legalDueDiligence";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      legalDueDiligenceList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listLegalDueDiligence(this.queryParams).then((response) => {
+        this.legalDueDiligenceList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "p";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getLegalDueDiligence(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateLegalDueDiligence(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addLegalDueDiligence(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delLegalDueDiligence(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/legalDueDiligence/export",
+        {
+          ...this.queryParams,
+        },
+        `legalDueDiligence_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/marketResearch/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:marketResearch:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:marketResearch:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:marketResearch:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:marketResearch:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="marketResearchList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:marketResearch:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:marketResearch:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别">
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listMarketResearch,
+  getMarketResearch,
+  delMarketResearch,
+  addMarketResearch,
+  updateMarketResearch,
+} from "@/api/file/marketResearch";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      marketResearchList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listMarketResearch(this.queryParams).then((response) => {
+        this.marketResearchList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "m";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getMarketResearch(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateMarketResearch(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addMarketResearch(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delMarketResearch(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/marketResearch/export",
+        {
+          ...this.queryParams,
+        },
+        `marketResearch_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 611 - 0
ruoyi-ui/src/views/file/projectTechnology/index.vue

@@ -0,0 +1,611 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="70px"
+    >
+      <el-form-item label="文件名称" prop="fileName">
+        <el-input
+          v-model.trim="queryParams.fileName"
+          placeholder="请输入文件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="文件类别" prop="fileType">
+        <el-select v-model="queryParams.fileType" placeholder="全部" clearable>
+          <el-option
+            v-for="dict in dict.type.file_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" v-if="type !== '2'">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['file:projectTechnology:add']"
+        >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['file:projectTechnology:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['file:projectTechnology:remove']"
+        >删除</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['file:projectTechnology:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="projectTechnologyList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column
+        v-if="type === '1'"
+        type="selection"
+        width="55"
+        align="center"
+      />
+      <!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
+      <el-table-column
+        label="文件名称"
+        width="300"
+        align="center"
+        prop="fileName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.fileName">
+            {{ scope.row.fileName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="文件类别"
+        width="160"
+        align="center"
+        prop="fileType"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.file_type"
+            :value="scope.row.fileType"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目名称"
+        width="200"
+        align="center"
+        prop="tProjectPool.projectName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectPool.projectName">
+            {{ scope.row.tProjectPool.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="备注" width="120" align="center" prop="remark">
+        <template slot-scope="scope">
+          <div :title="scope.row.remark">
+            {{ scope.row.remark }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createBy">
+            {{ scope.row.createBy }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        width="160"
+        align="center"
+        prop="createTime"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.createTime">
+            {{ scope.row.createTime }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        width="120"
+        fixed="right"
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['file:projectTechnology:edit']"
+          >修改</el-button
+          >
+          <el-button
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['file:projectTechnology:remove']"
+          >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文件资料对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        class="special-el-form"
+        ref="fileForm"
+        :model="form"
+        :rules="rules"
+        label-width="90px"
+      >
+        <el-form-item label="文件名称" prop="fileName">
+          <el-input
+            maxlength="100"
+            v-model="form.fileName"
+            placeholder="请输入文件名称"
+          />
+        </el-form-item>
+
+        <el-form-item label="文件类别" prop="fileType">
+          <el-select v-model="form.fileType" placeholder="请选择文件类别">
+            <el-option
+              v-for="dict in dict.type.file_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="项目名称" prop="projectName">
+          <div
+            class="el-input__inner inputSimulation yichu1"
+            @click="handleProjectItem"
+            :class="{ show_disabled: pageType === '1' }"
+            :title="form.projectName"
+          >
+            {{ form.projectName ? form.projectName : "请选择项目" }}
+          </div>
+          <projectItem
+            ref="projectItem"
+            @getProjectInfo="getProjectInfo"
+          ></projectItem>
+        </el-form-item>
+        <el-form-item label="项目阶段" prop="projectStage">
+          <el-select v-model="form.projectStage" disabled placeholder="">
+            <el-option
+              v-for="dict in dict.type.project_stage"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item label="会议编号" prop="fileBusinessId">
+          <div
+            class="el-input__inner inputSimulation"
+            @click="handleMeetingItem"
+          >
+            {{ form.meetingTheme ? form.meetingTheme : "请选择会议" }}
+          </div>
+          <meetingItem
+            ref="meetingItem"
+            @getMeetingInfo="getMeetingInfo"
+          ></meetingItem>
+        </el-form-item> -->
+        <el-form-item label="文件" prop="listFile" class="special-el-form-item">
+          <fileItem
+            ref="fileItems"
+            :id="form.id"
+            @getFileList="getFileList"
+          ></fileItem>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark" class="special-el-form-item">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="form.remark"
+            placeholder="请输入备注"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" v-preventReClick
+        >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listProjectTechnology,
+  getProjectTechnology,
+  delProjectTechnology,
+  addProjectTechnology,
+  updateProjectTechnology,
+} from "@/api/file/projectTechnology";
+import projectItem from "../../invest/components/projectItem";
+import fileItem from "../../invest/components/fileItem";
+import meetingItem from "../../invest/components/meetingItem";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  components: { projectItem, fileItem, meetingItem },
+  dicts: ["file_type", "project_stage"],
+  data() {
+    const validateLogo = (rule, value, callback) => {
+      if (this.fileList.length <= 0) {
+        callback(new Error("请上传文件"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      pageType: null,
+      id: "",
+      fileList: [],
+      // 遮罩层
+      loading: true,
+
+      // 选中数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文件资料表格数据
+      projectTechnologyList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        fileName: null,
+        fileType: null,
+        projectStage: null,
+        fileBusinessId: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+      },
+      // 表单参数
+      form: {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      },
+      // 表单校验
+      rules: {
+        fileName: [{ required: true, trigger: "blur", message: "请输入" }],
+        projectName: [{ required: true, trigger: "blur", message: "请选择" }],
+        fileType: [{ required: true, trigger: "change", message: "请选择" }],
+        listFile: [{ required: true, validator: validateLogo }],
+      },
+    };
+  },
+  created() {
+    if (this.projectId) {
+      this.queryParams.projectPoolId = this.projectId;
+    }
+    this.getList();
+  },
+  methods: {
+    // 获取公司信息
+    getProjectInfo(info) {
+      if (info.length > 0) {
+        this.form.projectPoolId = info[0].id;
+        this.form.projectName = info[0].projectName;
+        this.form.projectStage = info[0].projectStage;
+        this.form.projectState = info[0].projectState;
+        this.$refs.fileForm.clearValidate(["projectName"]);
+      }
+    },
+    //展示人员
+    handleProjectItem() {
+      this.$refs.projectItem.showProjectItem = true;
+    },
+    // 获取会议信息
+    // getMeetingInfo(info) {
+    //   if (info.length > 0) {
+    //     this.form.fileBusinessId = info[0].id;
+    //     this.form.meetingTheme = info[0].meetingTheme;
+    //   }
+    // },
+    handleMeetingItem() {
+      this.$refs.meetingItem.showMeetingItem = true;
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      this.fileList = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.fileForm.clearValidate(["listFile"]);
+      }else{
+        this.fileList = [];
+      }
+    },
+    /** 查询文件资料列表 */
+    getList() {
+      this.loading = true;
+      if (this.projectId) {
+        this.queryParams.projectPoolId = this.projectId;
+      }
+      listProjectTechnology(this.queryParams).then((response) => {
+        this.projectTechnologyList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        fileName: null,
+        fileType: null,
+        projectPoolId: null,
+        projectName: null,
+        projectStage: null,
+        meetingTheme: null,
+        fileBusinessId: null,
+        delFlag: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.idsName = selection.map((item) => item.fileName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+    /** 新增按钮操作 */
+    handleAdd(projectId) {
+      let that = this;
+      this.fileList = [];
+      this.reset();
+      if (projectId && typeof projectId === "string") {
+        this.pageType = "1";
+        let projectItemMessage = this.$store.getters.projectItemMessage;
+        this.form.projectPoolId = projectItemMessage.id;
+        this.form.projectName = projectItemMessage.projectName;
+        this.form.projectStage = projectItemMessage.projectStage;
+      }
+      this.open = true;
+      this.title = "添加文件资料";
+      // 设置新增时的默认文件类别
+      this.form.fileType = "n";
+      setTimeout(() => {
+        that.$refs.fileItems.fileList = [];
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      let that = this;
+      this.reset();
+      // 1. 判断参数是否为事件对象(页面级按钮点击)
+      if (row instanceof PointerEvent) {
+        // 从全局选中的数据中获取 ID(假设用 selectRowList 存储选中项)
+        row = this.selectRowList[0];
+      }
+      let id = row.id || this.ids;
+      getProjectTechnology(id).then((response) => {
+        this.form = response.data;
+        this.form.projectName = response.data.tProjectPool.projectName;
+        this.form.projectStage = response.data.tProjectPool.projectStage;
+        this.open = true;
+        this.title = "修改文件资料";
+        setTimeout(() => {
+          this.$refs.fileItems.fileList = [];
+          if(row.fileId){
+            id=row.fileId;
+            this.$refs.fileItems.getListFileById(id);
+          }else {
+            this.$refs.fileItems.getListFileBusinessId(id);
+          }
+        }, 300);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      //取消该项校验
+      // console.log(this.fileList.length > 0);
+      this.$refs["fileForm"].validate((valid) => {
+        if (valid) {
+          this.form.listFile = this.fileList;
+          if (this.form.id != null) {
+            updateProjectTechnology(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addProjectTechnology(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.fileName ? row.fileName : this.idsName;
+      this.$modal
+        .confirm('是否确认删除"' + idsName + '"?')
+        .then(function () {
+          return delProjectTechnology(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "file/projectTechnology/export",
+        {
+          ...this.queryParams,
+        },
+        `projectTechnology_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>

+ 16 - 0
ruoyi-ui/src/views/invest/components/fileItem.vue

@@ -54,6 +54,7 @@
 import { getToken } from "@/utils/auth";
 import {
   listFileBusinessId,
+  listFileById,
   delFile,
   downloadFileById,
 } from "@/api/system/file";
@@ -101,6 +102,21 @@ export default {
         });
       }
     },
+    // 根据附件业务ID()获取附件详情信息列表
+    getListFileById(id, uploadType) {
+      if (id) {
+        listFileById(id, uploadType).then((response) => {
+          if (response.data.length > 0) {
+            let list = response.data;
+            for (let i in list) {
+              list[i].name = list[i].newUploadName;
+            }
+            this.fileList = list;
+            this.$emit("getFileList", this.fileList);
+          }
+        });
+      }
+    },
     handleButton() {
       this.forbid = true;
     },

+ 2 - 2
ruoyi-ui/src/views/login.vue

@@ -190,9 +190,9 @@ export default {
                 dueNum = 0, //尽职背调
                 projectTJNum = 0,//项目投决
                 //我的任务下的菜单
-                investOppNum=0,//投资机会
+                investOppNum=0,//项目机会
                 approvalNum = 0, //项目立项
-                investigateNum = 0, //尽职背调
+                investigateNum = 0, //项目背调
                 decisionNum = 0, //项目投决
                 terminationNum = 0; //项目终止
               // 获取代办任务数量

+ 271 - 196
ruoyi-ui/src/views/project/approval/audit.vue

@@ -73,6 +73,7 @@
                 class="special-el-form public-padded-t-20"
                 ref="formLXApply"
                 :model="formLXApply"
+                :rules="rulesLXApply"
                 label-width="120px"
               >
                 <el-form-item
@@ -101,16 +102,23 @@
                     disabled
                   />
                 </el-form-item>
-                <el-form-item
-                  label="立项资料"
-                  prop="listFile"
-                  class="special-el-form-item"
-                >
-                  <fileItem
-                    ref="fileItemLXApply1"
-                    :id="formLXApply.id"
-                    :is-detail="true"
-                  ></fileItem>
+                <el-form-item label="立项申请报告" prop="listFile" class="special-el-form-item">
+                  <fileItem ref="fileItemLXApply" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目行研报告" class="special-el-form-item" v-if="formLXApply.taskDefKey=='president'">
+                  <fileItem ref="industryFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目技术报告" class="special-el-form-item" v-if="formLXApply.taskDefKey=='president'">
+                  <fileItem ref="technicalFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目行研报告" prop="industryListFile" class="special-el-form-item" v-if="formLXApply.taskDefKey=='industryResearch'">
+                  <fileItem ref="industryFileItem" :id="formLXApply.id" @getFileList="getIndustryFileList"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目技术报告" prop="technicalListFile" class="special-el-form-item" v-if="formLXApply.taskDefKey=='technicalResearch'">
+                  <fileItem ref="technicalFileItem" :id="formLXApply.id" @getFileList="getTechnicalFileList"></fileItem>
                 </el-form-item>
               </el-form>
               <div
@@ -121,7 +129,7 @@
                 暂无数据
               </div>
             </el-tab-pane>
-            <el-tab-pane :label="formType === 1 ? '项目立项评估评审表' : '项目立项评估评审汇总表'" v-if="formLXApply.taskDefKey!='deptLeader'&&formLXApply.taskDefKey!='meeting'" name="review">
+<!--            <el-tab-pane :label="formType === 1 ? '项目立项评估评审表' : '项目立项评估评审汇总表'" v-if="formLXApply.taskDefKey!='deptLeader'&&formLXApply.taskDefKey!='meeting'" name="review">
               <el-form
                 class="table-form ss_scoreTable"
                 ref="scoreForm"
@@ -1117,188 +1125,188 @@
                 </table>
 
               </el-form>
-            </el-tab-pane>
+            </el-tab-pane>-->
           </el-tabs>
           <!-- 会议信息开始         -->
-          <section v-if="formLXApply.taskDefKey==='meeting'">
-            <el-form
-              v-if="formLXApply.id"
-              class="special-el-form public-padded-t-20"
-              ref="formLXApply"
-              :model="formLXApply"
-              label-width="120px"
-            >
-              <el-form-item
-                label="立项审批人"
-                prop="participants"
-                class="special-el-form-item public-input-height-2"
-              >
-                <div
-                  class="el-input__inner inputSimulation yichu1"
-                  @click="handleSelectPeople(1)"
-                  :title="formLXApply.participants"
-                >
-                  {{ formLXApply.participants ? formLXApply.participants : "请选择" }}
-                </div>
-              </el-form-item>
-              <el-form-item
-                label="附件"
-                prop="listFile"
-                class="special-el-form-item"
-              >
-                <fileItem
-                  ref="fileItemLXApply"
-                  :id="formLXApply.id"
-                  @getFileList="getFileListLXApply"
-                ></fileItem>
-              </el-form-item>
-              <!-- 关键代码:el-form-item 包裹单选组 -->
-              <el-form-item label="是否需要立项会议">
-                <label>
-                  <input type="radio" name="needMeeting" value="0" v-model="formLXApply.needMeeting">
-                  否
-                </label>
-                <label>
-                  <input type="radio" name="needMeeting" value="1" v-model="formLXApply.needMeeting">
-                  是
-                </label>
-              </el-form-item>
-            </el-form>
-            <h3 v-if="formLXApply.needMeeting === '1'">会议信息</h3>
-            <el-form
-              class="special-el-form"
-              ref="meetingForm"
-              :model="meetingForm"
-              :rules="meetingRules"
-              label-width="120px"
-              v-if="formLXApply.needMeeting === '1'"
-            >
-              <el-form-item
-                label="项目名称"
-                prop="projectName"
-                class="special-el-form-item public-input-height-2"
-                :rules="[
-            { required: verifyProjectName, trigger: 'blur', message: '请选择' },
-          ]"
-              >
-                <div
-                  class="el-input__inner inputSimulation yichu1"
-                  @click="handleProjectItem"
-                  :class="{ show_disabled: pageType === '1' }"
-                  :title="meetingForm.projectName"
-                >
-                  {{ meetingForm.projectName ? meetingForm.projectName : "请选择 " }}
-                </div>
-                <projectItem
-                  ref="projectItem"
-                  @getProjectInfo="getProjectInfo"
-                ></projectItem>
-              </el-form-item>
-              <el-form-item
-                label="项目阶段"
-                prop="projectStage"
-                class="special-el-form-item"
-              >
-                <el-select v-model="meetingForm.projectStage" disabled placeholder="">
-                  <el-option
-                    v-for="dict in dict.type.project_stage"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="会议主题" prop="meetingTheme">
-                <el-input
-                  maxlength="100"
-                  v-model="meetingForm.meetingTheme"
-                  placeholder="请输入会议主题"
-                />
-              </el-form-item>
+<!--          <section v-if="formLXApply.taskDefKey==='meeting'">-->
+<!--            <el-form-->
+<!--              v-if="formLXApply.id"-->
+<!--              class="special-el-form public-padded-t-20"-->
+<!--              ref="formLXApply"-->
+<!--              :model="formLXApply"-->
+<!--              label-width="120px"-->
+<!--            >-->
+<!--              <el-form-item-->
+<!--                label="立项审批人"-->
+<!--                prop="participants"-->
+<!--                class="special-el-form-item public-input-height-2"-->
+<!--              >-->
+<!--                <div-->
+<!--                  class="el-input__inner inputSimulation yichu1"-->
+<!--                  @click="handleSelectPeople(1)"-->
+<!--                  :title="formLXApply.participants"-->
+<!--                >-->
+<!--                  {{ formLXApply.participants ? formLXApply.participants : "请选择" }}-->
+<!--                </div>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item-->
+<!--                label="附件"-->
+<!--                prop="listFile"-->
+<!--                class="special-el-form-item"-->
+<!--              >-->
+<!--                <fileItem-->
+<!--                  ref="fileItemLXApply"-->
+<!--                  :id="formLXApply.id"-->
+<!--                  @getFileList="getFileListLXApply"-->
+<!--                ></fileItem>-->
+<!--              </el-form-item>-->
+<!--              &lt;!&ndash; 关键代码:el-form-item 包裹单选组 &ndash;&gt;-->
+<!--              <el-form-item label="是否需要立项会议">-->
+<!--                <label>-->
+<!--                  <input type="radio" name="needMeeting" value="0" v-model="formLXApply.needMeeting">-->
+<!---->
+<!--                </label>-->
+<!--                <label>-->
+<!--                  <input type="radio" name="needMeeting" value="1" v-model="formLXApply.needMeeting">-->
+<!---->
+<!--                </label>-->
+<!--              </el-form-item>-->
+<!--            </el-form>-->
+<!--            <h3 v-if="formLXApply.needMeeting === '1'">会议信息</h3>-->
+<!--            <el-form-->
+<!--              class="special-el-form"-->
+<!--              ref="meetingForm"-->
+<!--              :model="meetingForm"-->
+<!--              :rules="meetingRules"-->
+<!--              label-width="120px"-->
+<!--              v-if="formLXApply.needMeeting === '1'"-->
+<!--            >-->
+<!--              <el-form-item-->
+<!--                label="项目名称"-->
+<!--                prop="projectName"-->
+<!--                class="special-el-form-item public-input-height-2"-->
+<!--                :rules="[-->
+<!--            { required: verifyProjectName, trigger: 'blur', message: '请选择' },-->
+<!--          ]"-->
+<!--              >-->
+<!--                <div-->
+<!--                  class="el-input__inner inputSimulation yichu1"-->
+<!--                  @click="handleProjectItem"-->
+<!--                  :class="{ show_disabled: pageType === '1' }"-->
+<!--                  :title="meetingForm.projectName"-->
+<!--                >-->
+<!--                  {{ meetingForm.projectName ? meetingForm.projectName : "请选择 " }}-->
+<!--                </div>-->
+<!--                <projectItem-->
+<!--                  ref="projectItem"-->
+<!--                  @getProjectInfo="getProjectInfo"-->
+<!--                ></projectItem>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item-->
+<!--                label="项目阶段"-->
+<!--                prop="projectStage"-->
+<!--                class="special-el-form-item"-->
+<!--              >-->
+<!--                <el-select v-model="meetingForm.projectStage" disabled placeholder="">-->
+<!--                  <el-option-->
+<!--                    v-for="dict in dict.type.project_stage"-->
+<!--                    :key="dict.value"-->
+<!--                    :label="dict.label"-->
+<!--                    :value="dict.value"-->
+<!--                  />-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item label="会议主题" prop="meetingTheme">-->
+<!--                <el-input-->
+<!--                  maxlength="100"-->
+<!--                  v-model="meetingForm.meetingTheme"-->
+<!--                  placeholder="请输入会议主题"-->
+<!--                />-->
+<!--              </el-form-item>-->
 
-              <!-- <el-form-item label="会议编号" prop="meetingCode">
-                <el-input v-model="form.meetingCode" placeholder="请输入会议编号" />
-              </el-form-item> -->
-              <el-form-item label="会议类别" prop="meetingType">
-                <el-select
-                  v-model="meetingForm.meetingType"
-                  placeholder="请选择会议类别"
-                  :disabled="
-              meetingTypeDisabled || (pageType === '1' && meetingType != null)
-            "
-                >
-                  <el-option
-                    v-for="dict in meetingTypeList"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
+<!--              &lt;!&ndash; <el-form-item label="会议编号" prop="meetingCode">-->
+<!--                <el-input v-model="form.meetingCode" placeholder="请输入会议编号" />-->
+<!--              </el-form-item> &ndash;&gt;-->
+<!--              <el-form-item label="会议类别" prop="meetingType">-->
+<!--                <el-select-->
+<!--                  v-model="meetingForm.meetingType"-->
+<!--                  placeholder="请选择会议类别"-->
+<!--                  :disabled="-->
+<!--              meetingTypeDisabled || (pageType === '1' && meetingType != null)-->
+<!--            "-->
+<!--                >-->
+<!--                  <el-option-->
+<!--                    v-for="dict in meetingTypeList"-->
+<!--                    :key="dict.value"-->
+<!--                    :label="dict.label"-->
+<!--                    :value="dict.value"-->
+<!--                  ></el-option>-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
 
-              <el-form-item label="会议开始时间" prop="startTime">
-                <el-date-picker
-                  v-model="meetingForm.startTime"
-                  type="datetime"
-                  placeholder="请选择会议开始时间"
-                  format="yyyy-MM-dd HH:mm"
-                  value-format="yyyy-MM-dd HH:mm"
-                >
-                </el-date-picker>
-              </el-form-item>
-              <el-form-item label="会议结束时间" prop="endTime">
-                <el-date-picker
-                  v-model="meetingForm.endTime"
-                  format="yyyy-MM-dd HH:mm"
-                  value-format="yyyy-MM-dd HH:mm"
-                  type="datetime"
-                  placeholder="请选择会议结束时间"
-                >
-                </el-date-picker>
-              </el-form-item>
-              <el-form-item label="会议地点" prop="place">
-                <el-input
-                  maxlength="100"
-                  v-model="meetingForm.place"
-                  placeholder="请输入会议地点"
-                />
-              </el-form-item>
-              <el-form-item
-                label="会议发起人"
-                prop="promoter"
-                class="public-input-height"
-              >
-                <div class="el-input__inner" @click="openSelectDept(1)">
-                  {{ meetingForm.promoter ? meetingForm.promoter : "请选择会议发起人" }}
-                </div>
-                <selecDept
-                  ref="selecDepts"
-                  @getDeptUserInfo="getDeptUserInfo"
-                  :deptId="deptId"
-                ></selecDept>
-              </el-form-item>
-              <el-form-item
-                label="会议参与人"
-                prop="participants"
-                class="special-el-form-item public-input-height-2"
-              >
-                <div
-                  class="el-input__inner inputSimulation yichu1"
-                  @click="handleSelectPeople(2)"
-                  :title="meetingForm.participants"
-                >
-                  {{ meetingForm.participants ? meetingForm.participants : "请选择会议参与人" }}
-                </div>
-              </el-form-item>
-              <el-form-item label="附件" prop="file" class="special-el-form-item">
-                <fileItem
-                  ref="fileItems"
-                  :id="meetingForm.id"
-                  @getFileList="getFileList"
-                ></fileItem>
-              </el-form-item>
-            </el-form>
-          </section>
+<!--              <el-form-item label="会议开始时间" prop="startTime">-->
+<!--                <el-date-picker-->
+<!--                  v-model="meetingForm.startTime"-->
+<!--                  type="datetime"-->
+<!--                  placeholder="请选择会议开始时间"-->
+<!--                  format="yyyy-MM-dd HH:mm"-->
+<!--                  value-format="yyyy-MM-dd HH:mm"-->
+<!--                >-->
+<!--                </el-date-picker>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item label="会议结束时间" prop="endTime">-->
+<!--                <el-date-picker-->
+<!--                  v-model="meetingForm.endTime"-->
+<!--                  format="yyyy-MM-dd HH:mm"-->
+<!--                  value-format="yyyy-MM-dd HH:mm"-->
+<!--                  type="datetime"-->
+<!--                  placeholder="请选择会议结束时间"-->
+<!--                >-->
+<!--                </el-date-picker>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item label="会议地点" prop="place">-->
+<!--                <el-input-->
+<!--                  maxlength="100"-->
+<!--                  v-model="meetingForm.place"-->
+<!--                  placeholder="请输入会议地点"-->
+<!--                />-->
+<!--              </el-form-item>-->
+<!--              <el-form-item-->
+<!--                label="会议发起人"-->
+<!--                prop="promoter"-->
+<!--                class="public-input-height"-->
+<!--              >-->
+<!--                <div class="el-input__inner" @click="openSelectDept(1)">-->
+<!--                  {{ meetingForm.promoter ? meetingForm.promoter : "请选择会议发起人" }}-->
+<!--                </div>-->
+<!--                <selecDept-->
+<!--                  ref="selecDepts"-->
+<!--                  @getDeptUserInfo="getDeptUserInfo"-->
+<!--                  :deptId="deptId"-->
+<!--                ></selecDept>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item-->
+<!--                label="会议参与人"-->
+<!--                prop="participants"-->
+<!--                class="special-el-form-item public-input-height-2"-->
+<!--              >-->
+<!--                <div-->
+<!--                  class="el-input__inner inputSimulation yichu1"-->
+<!--                  @click="handleSelectPeople(2)"-->
+<!--                  :title="meetingForm.participants"-->
+<!--                >-->
+<!--                  {{ meetingForm.participants ? meetingForm.participants : "请选择会议参与人" }}-->
+<!--                </div>-->
+<!--              </el-form-item>-->
+<!--              <el-form-item label="附件" prop="file" class="special-el-form-item">-->
+<!--                <fileItem-->
+<!--                  ref="fileItems"-->
+<!--                  :id="meetingForm.id"-->
+<!--                  @getFileList="getFileList"-->
+<!--                ></fileItem>-->
+<!--              </el-form-item>-->
+<!--            </el-form>-->
+<!--          </section>-->
 
           <!--会议信息结束-->
         </div>
@@ -1332,7 +1340,7 @@
           <!--          <div class="btn-group">-->
           <el-button @click="goBack">返 回</el-button>
           <el-button type="success" @click="handleComplete(true)">同意</el-button>
-          <el-button v-if="formLXApply.taskDefKey!='decision'&&formLXApply.taskDefKey!='president'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="formLXApply.taskDefKey!='technicalResearch'&&formLXApply.taskDefKey!='industryResearch'&&formLXApply.taskDefKey!='president'" type="warning" @click="handleComplete(false)">驳回</el-button>
           <el-button v-if="formLXApply.taskDefKey!='decision'&&formLXApply.taskDefKey=='president'" type="warning" @click="handleComplete(false)">驳回(修改)</el-button>
           <el-button v-if="formLXApply.taskDefKey=='president'" type="danger" @click="handleComplete(false,1)">驳回(终止)</el-button>
           <el-button v-if="formLXApply.taskDefKey=='president'" type="warning" @click="handleComplete(false,0)">观望</el-button>
@@ -1387,6 +1395,21 @@ export default {
     flowBase,
   },
   data() {
+    const industryValidateLogo = (rule, value, callback) => {
+      //debugger
+      if (this.fileListIndustry.length <= 0) {
+        callback(new Error("请上传项目行研报告"));
+      } else {
+        callback();
+      }
+    };
+    const technicalValidateLogo = (rule, value, callback) => {
+      if (this.fileListTechnical.length <= 0) {
+        callback(new Error("请上传项目技术报告"));
+      } else {
+        callback();
+      }
+    };
     return {
       meetingId: "0",
       type: "2",
@@ -1415,6 +1438,14 @@ export default {
         participantsId: null,
         taskDefKey:null,
         needMeeting:'0',
+        industryListFile: null,
+        technicalListFile:null
+      },
+      fileListIndustry: [],
+      fileListTechnical: [],
+      rulesLXApply: {
+        industryListFile: [{ required: true, validator: industryValidateLogo }],
+        technicalListFile: [{ required: true, validator: technicalValidateLogo }],
       },
       // 会议表单参数-开始
       meetingForm: {
@@ -1662,11 +1693,22 @@ export default {
             this.formType=2;
           }
           setTimeout(() => {
-            that.$refs.fileItemLXApply1.handleButton();
-            that.$refs.fileItemLXApply1.fileList = [];
-            that.$refs.fileItemLXApply1.getListFileBusinessId(
-              that.formLXApply.id
-            );
+            //立项申请报告
+            this.$refs.fileItemLXApply.handleButton();
+            this.$refs.fileItemLXApply.fileList = [];
+            this.$refs.fileItemLXApply.getListFileBusinessId(that.formLXApply.id,"10");
+            //项目行研报告
+            this.$refs.industryFileItem.handleButton();
+            this.$refs.industryFileItem.fileList = [];
+            this.$refs.industryFileItem.getListFileBusinessId(that.formLXApply.id, "12");
+            //项目技术报告
+            this.$refs.technicalFileItem.handleButton();
+            this.$refs.technicalFileItem.fileList = [];
+            this.$refs.technicalFileItem.getListFileBusinessId(that.formLXApply.id, "13");
+            //其他附件
+            this.$refs.otherFileItem.handleButton();
+            this.$refs.otherFileItem.fileList = [];
+            this.$refs.otherFileItem.getListFileBusinessId(that.formLXApply.id, "0");
           }, 300);
         }
       });
@@ -1863,6 +1905,22 @@ export default {
             return;
           }
         })
+      }else if(this.formLXApply.taskDefKey==="industryResearch"){//项目行研
+        this.formLXApply.listFile = this.fileListIndustry;
+        this.$refs["formLXApply"].validate((valid) => {
+          if (!valid) {
+            allValid = false;
+            return;
+          }
+        })
+      }else if(this.formLXApply.taskDefKey==="technicalResearch"){//项目技术
+        this.formLXApply.listFile = this.fileListTechnical;
+        this.$refs["formLXApply"].validate((valid) => {
+          if (!valid) {
+            allValid = false;
+            return;
+          }
+        })
       }
       if (!flag&&!this.flowBaseInfo.comment) {
         this.$modal.msgError("请输入审批意见!");
@@ -1894,7 +1952,7 @@ export default {
     goBack() {
       this.$router.go(-1);
     },
-    //跳转到我的任务-投资机会
+    //跳转到我的任务
     goMyTask(){
       //this.$router.push({ path: "/myTask/project/approval/myTask"});
       // 关闭当前标签页并返回指定页面
@@ -1918,6 +1976,23 @@ export default {
         this.fileList = [];
       }
     },
+    //
+    getIndustryFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListIndustry = fileList;
+        this.$refs.formLXApply.clearValidate(["industryListFile"]);
+      } else {
+        this.fileListIndustry = [];
+      }
+    },
+    getTechnicalFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListTechnical = fileList;
+        this.$refs.formLXApply.clearValidate(["technicalListFile"]);
+      } else {
+        this.fileListTechnical = [];
+      }
+    },
   },
 };
 </script>

+ 27 - 15
ruoyi-ui/src/views/project/approval/detail.vue

@@ -107,16 +107,17 @@
                     disabled
                   />
                 </el-form-item>
-                <el-form-item
-                  label="立项资料"
-                  prop="listFile"
-                  class="special-el-form-item"
-                >
-                  <fileItem
-                    ref="fileItemLXApply"
-                    :id="formLXApply.id"
-                    :is-detail="true"
-                  ></fileItem>
+                <el-form-item label="立项申请报告" prop="listFile" class="special-el-form-item">
+                  <fileItem ref="fileItemLXApply" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目行研报告" prop="industryListFile" class="special-el-form-item">
+                  <fileItem ref="industryFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="项目技术报告" prop="technicalListFile" class="special-el-form-item">
+                  <fileItem ref="technicalFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
+                <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
                 </el-form-item>
               </el-form>
               <div
@@ -846,11 +847,22 @@ export default {
             this.getSelectMeetingId();
           }
           setTimeout(() => {
-            that.$refs.fileItemLXApply.handleButton();
-            that.$refs.fileItemLXApply.fileList = [];
-            that.$refs.fileItemLXApply.getListFileBusinessId(
-              that.formLXApply.id
-            );
+            //立项申请报告
+            this.$refs.fileItemLXApply.handleButton();
+            this.$refs.fileItemLXApply.fileList = [];
+            this.$refs.fileItemLXApply.getListFileBusinessId(that.formLXApply.id,"10");
+            //项目行研报告
+            this.$refs.industryFileItem.handleButton();
+            this.$refs.industryFileItem.fileList = [];
+            this.$refs.industryFileItem.getListFileBusinessId(that.formLXApply.id, "12");
+            //项目技术报告
+            this.$refs.technicalFileItem.handleButton();
+            this.$refs.technicalFileItem.fileList = [];
+            this.$refs.technicalFileItem.getListFileBusinessId(that.formLXApply.id, "13");
+            //其他附件
+            this.$refs.otherFileItem.handleButton();
+            this.$refs.otherFileItem.fileList = [];
+            this.$refs.otherFileItem.getListFileBusinessId(that.formLXApply.id, "0");
           }, 300);
         }
       });

+ 16 - 1
ruoyi-ui/src/views/project/approval/edit.vue

@@ -111,6 +111,9 @@
                     @getFileList="getFileListLXApply"
                   ></fileItem>
                 </el-form-item>
+                <el-form-item label="其他附件" prop="otherFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="formLXApply.id" @getFileList="getOtherFileListLXApply"></fileItem>
+                </el-form-item>
               </el-form>
               <div
                 v-else
@@ -193,8 +196,10 @@ export default {
         listFile: null,
         participants: null,
         participantsId: null,
+        otherFile:null,
       },
       fileListLXApply: [],
+      otherFileListLXApply: [],
       rulesLXApply: {
         projectOverview: [
           { required: true, trigger: "blur", message: "请输入" },
@@ -289,6 +294,15 @@ export default {
         this.fileListLXApply = [];
       }
     },
+    //立项其他附件
+    getOtherFileListLXApply(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.otherFileListLXApply = fileList;
+        this.$refs.formLXApply.clearValidate(["otherFile"]);
+      } else {
+        this.otherFileListLXApply = [];
+      }
+    },
     //项目报备
     getDetail() {
       getPool(this.id).then((response) => {
@@ -310,6 +324,7 @@ export default {
     taskComplete(flag) {
       this.formLXApply.flag=flag;
       this.formLXApply.listFile = this.fileListLXApply;
+      this.formLXApply.otherFile = this.otherFileListLXApply;
       const params={
         projectApproval:this.formLXApply,
         flowBaseInfo: this.flowBaseInfo
@@ -333,7 +348,7 @@ export default {
     goBack() {
       this.$router.go(-1);
     },
-    //跳转到我的任务-投资机会
+    //跳转到我的任务
     goMyTask(){
       //this.$router.push({ path: "/myTask/project/approval/myTask"});
       // 关闭当前标签页并返回指定页面

+ 49 - 11
ruoyi-ui/src/views/project/approval/myTask.vue

@@ -32,6 +32,7 @@
         <el-form-item>
           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          <el-button type="warning" plain icon="el-icon-download" size="mini" @click="exportQuery">导出</el-button>
         </el-form-item>
       </el-form>
       <!-- Tab 切换区域 -->
@@ -721,10 +722,57 @@ export default {
       this.queryParams.pageSize = 10;
       this.handleQuery();
     },
+    /*导出*/
+    exportQuery() {
+      switch (this.activeTab) {
+        case "list1":
+          // 待办任务:调用待办导出方法
+          this.handleExportMyTask();
+          break;
+        case "list2":
+          // 已办任务:调用已办导出方法
+          this.handleExportMyDoneTask();
+          break;
+        case "list3":
+          // 我的单据:调用单据导出方法
+          this.handleExportMy();
+          break;
+        default:
+          break;
+      }
+    },
+    /** 导出按钮操作 */
+    handleExportMyTask() {
+      this.download(
+        "project/approval/exportMyTask",
+        {
+          ...this.queryParams,
+        },
+        `MyTask_${new Date().getTime()}.xlsx`
+      );
+    },
+    handleExportMyDoneTask() {
+      this.download(
+        "project/approval/exportMyDoneTask",
+        {
+          ...this.queryParams,
+        },
+        `MyDoneTask_${new Date().getTime()}.xlsx`
+      );
+    },
+    handleExportMy() {
+      this.download(
+        "project/approval/exportMy",
+        {
+          ...this.queryParams,
+        },
+        `My_${new Date().getTime()}.xlsx`
+      );
+    },
     clickRow(row) {
       this.$refs.dataTable.toggleRowSelection(row);
     },
-    /*投资机会详情*/
+    /*项目机会详情*/
     handleInvestOppDetail(row) {
       const projectPoolId = row.projectPoolId;
       getPool(projectPoolId).then((response) => {
@@ -795,16 +843,6 @@ export default {
         })
         .catch(() => {});
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download(
-        "invest/pool/export",
-        {
-          ...this.queryParams,
-        },
-        `pool_${new Date().getTime()}.xlsx`
-      );
-    },
     /** 流程图查看 */
     handleReadImage(row){
       this.readImage.title = "流程图";

+ 85 - 47
ruoyi-ui/src/views/project/approval/applyList.vue

@@ -18,59 +18,33 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="项目负责人" prop="investHead">
+      <el-form-item label="项目概况" prop="projectOverview">
         <el-input
-          v-model.trim="queryParams.investHead"
-          placeholder="请输入项目负责人"
+          v-model.trim="queryParams.projectOverview"
+          placeholder="请输入项目概况"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="公司联系人" prop="projectContacts">
+      <el-form-item label="项目亮点" prop="projectSparkle">
         <el-input
-          v-model.trim="queryParams.projectContacts"
-          placeholder="请输入公司联系人"
+          v-model.trim="queryParams.projectSparkle"
+          placeholder="请输入项目亮点"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="渠道" prop="channel">
-        <el-select v-model="queryParams.channel" placeholder="全部" clearable>
-          <el-option
-            v-for="item in channelList"
-            :key="item.id"
-            :label="item.channelName"
-            :value="item.id"
-          />
-          <el-option
-            label="无"
-            value="-1"
-          />
+      <el-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="所属组别" prop="projectGroup">
-        <el-select
-          v-model="queryParams.projectGroup"
-          placeholder="全部"
-          clearable
-        >
-          <el-option
-            v-for="dict in dict.type.project_group"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-
-      <el-form-item label="项目公司" prop="company">
-        <el-input
-          v-model.trim="queryParams.company"
-          placeholder="请输入项目所属公司"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item class="searchWrapper">
         <el-button
           type="primary"
@@ -86,7 +60,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
@@ -95,6 +69,15 @@
           @click="handleAdd"
           >立项申请</el-button
         >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -118,7 +101,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -128,6 +111,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column-->>
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
 
       <el-table-column label="所属行业" align="center" prop="industry"
@@ -221,6 +211,23 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div  v-if="scope.row.deployId !== null && scope.row.deployId !== undefined && scope.row.deployId !== ''"  :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+          <div v-else :title="scope.row.taskName">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -232,6 +239,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -250,13 +262,17 @@
     ></meetingList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listApprovalList, delPool, } from "@/api/invest/pool";
 import { getAllApprovalList } from "@/api/project/approval/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import meetingList from "../meetingList";
 import businessUpdate from "../../invest/components/businessUpdate";
 import { mapGetters } from "vuex";
@@ -319,8 +335,14 @@ export default {
         createTime: null,
       },
       channelList: [],
-
       projectId: "",
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -508,13 +530,29 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/approval/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `approval_${new Date().getTime()}.xlsx`
       );
     },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const poolId=row.projectPoolId;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/approval/detail", query: { id: poolId , pInstId: pInstId } });
+    },
   },
 };
 </script>

+ 38 - 5
ruoyi-ui/src/views/project/approval/projectItem.vue

@@ -7,6 +7,22 @@
       width="800px"
       append-to-body
     >
+      <!-- 查询表单区域 -->
+      <el-form :model="projectQueryParams" ref="queryForm" inline>
+        <el-form-item label="项目名称" prop="projectName">
+          <el-input
+            v-model.trim="projectQueryParams.projectName"
+            placeholder="请输入项目名称"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <!-- 可继续扩展其他查询表单项目,比如项目编号、负责人等 -->
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
       <el-table
         class="tableWrapper"
         @row-click="clickRow"
@@ -115,7 +131,7 @@
   </div>
 </template>
 <script>
-import { listApprovalList } from "@/api/invest/pool";
+import { applicableListApproval } from "@/api/project/approval/pool";
 import { mapGetters } from "vuex";
 export default {
   props: {
@@ -136,6 +152,8 @@ export default {
         pageSize: 10,
         orderByColumn: "createTime",
         isAsc: "desc",
+        projectStatus:null,
+        projectName:null
       },
 
       // 选中数组
@@ -155,12 +173,12 @@ export default {
   },
   methods: {
     // 刷新项目列表的方法
-    refreshProjectList() {
+    refreshProjectList(isWatch) {
       // 清空现有列表
       this.poolList = [];
       this.projectItemTotal=0;
       // 重新请求接口获取最新数据
-      this.getList();
+      this.getList(isWatch);
     },
     clickRow(row) {
       this.$refs.dataTable.toggleRowSelection(row);
@@ -178,8 +196,13 @@ export default {
       this.ids = selection;
     },
     /** 查询项目池列表 */
-    getList() {
-      listApprovalList(this.projectQueryParams).then((response) => {
+    getList(isWatch) {
+      if(isWatch){
+        this.projectQueryParams.projectStatus=2;
+      }else {
+        this.projectQueryParams.projectStatus=0;
+      }
+      applicableListApproval(this.projectQueryParams).then((response) => {
         this.poolList = response.rows;
         this.projectItemTotal = response.total;
       });
@@ -217,6 +240,16 @@ export default {
     cancel() {
       this.showProjectItem = false;
     },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.projectQueryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
   },
 };
 </script>

+ 11 - 6
ruoyi-ui/src/views/project/decision/audit.vue

@@ -106,6 +106,9 @@
                     :is-detail="true"
                   ></fileItem>
                 </el-form-item>
+                <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="formTJApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
               </el-form>
               <div
                 v-else
@@ -1685,11 +1688,13 @@ export default {
             this.formType=4;
           }
           setTimeout(() => {
-            that.$refs.fileItemTJApply1.handleButton();
-            that.$refs.fileItemTJApply1.fileList = [];
-            that.$refs.fileItemTJApply1.getListFileBusinessId(
-              that.formTJApply.id
-            );
+            this.$refs.fileItemTJApply1.handleButton();
+            this.$refs.fileItemTJApply1.fileList = [];
+            this.$refs.fileItemTJApply1.getListFileBusinessId(that.formTJApply.id,"11");
+            //其他附件
+            this.$refs.otherFileItem.handleButton();
+            this.$refs.otherFileItem.fileList = [];
+            this.$refs.otherFileItem.getListFileBusinessId(that.formLXApply.id, "0");
           }, 300);
         }
       });
@@ -1896,7 +1901,7 @@ export default {
     goBack() {
       this.$router.go(-1);
     },
-    //跳转到我的任务-投资机会
+    //跳转到我的任务
     goMyTask(){
       //this.$router.push({ path: "/myTask/project/decision/myTask"});
       // 关闭当前标签页并返回指定页面

+ 10 - 5
ruoyi-ui/src/views/project/decision/detail.vue

@@ -119,6 +119,9 @@
                     disabled
                   />
                 </el-form-item>-->
+                <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="formTJApply.id" :is-detail="true"></fileItem>
+                </el-form-item>
               </el-form>
               <div
                 v-else
@@ -845,11 +848,13 @@ export default {
             this.getSelectMeetingId();
           }
           setTimeout(() => {
-            that.$refs.fileItemTJApply.handleButton();
-            that.$refs.fileItemTJApply.fileList = [];
-            that.$refs.fileItemTJApply.getListFileBusinessId(
-              that.formTJApply.id
-            );
+            this.$refs.fileItemTJApply.handleButton();
+            this.$refs.fileItemTJApply.fileList = [];
+            this.$refs.fileItemTJApply.getListFileBusinessId(that.formTJApply.id,"11");
+            //其他附件
+            this.$refs.otherFileItem.handleButton();
+            this.$refs.otherFileItem.fileList = [];
+            this.$refs.otherFileItem.getListFileBusinessId(that.formTJApply.id, "0");
           }, 300);
         }
       });

+ 0 - 0
ruoyi-ui/src/views/project/decision/edit.vue


Vissa filer visades inte eftersom för många filer har ändrats