DecisionController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package com.ruoyi.web.controller.project;
  2. import com.ruoyi.common.annotation.Log;
  3. import com.ruoyi.common.core.controller.BaseController;
  4. import com.ruoyi.common.core.domain.AjaxResult;
  5. import com.ruoyi.common.core.page.TableDataInfo;
  6. import com.ruoyi.common.enums.BusinessType;
  7. import com.ruoyi.common.utils.StringUtils;
  8. import com.ruoyi.common.utils.poi.ExcelUtil;
  9. import com.ruoyi.flowable.service.IDecisionService;
  10. import com.ruoyi.flowable.service.IInvestmentOpportunityService;
  11. import com.ruoyi.invest.domain.*;
  12. import com.ruoyi.invest.domain.dto.DecisionDto;
  13. import com.ruoyi.invest.domain.vo.ProjectDecisionVo;
  14. import com.ruoyi.invest.domain.vo.TProjectPoolVo;
  15. import com.ruoyi.invest.service.*;
  16. import com.ruoyi.system.service.ISysDictDataService;
  17. import io.swagger.annotations.Api;
  18. import io.swagger.annotations.ApiOperation;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.security.access.prepost.PreAuthorize;
  21. import org.springframework.web.bind.annotation.*;
  22. import javax.servlet.http.HttpServletRequest;
  23. import javax.servlet.http.HttpServletResponse;
  24. import java.util.List;
  25. import java.util.stream.Collectors;
  26. /**
  27. * 项目立项Controller
  28. *
  29. * @author ruoyi
  30. * @date 2025-08-08
  31. */
  32. @Api(tags = "项目投决")
  33. @RestController
  34. @RequestMapping("/project/decision")
  35. public class DecisionController extends BaseController {
  36. @Autowired
  37. private IDecisionService decisionService;
  38. @Autowired
  39. private IInvestmentOpportunityService investmentOpportunityService;
  40. @Autowired
  41. private ITProjectMeetingService tProjectMeetingService;
  42. @Autowired
  43. private ITProjectScoringService tProjectScoringService;
  44. @Autowired
  45. private ISysDictDataService dictDataService;
  46. //所有项目投决流程列表
  47. @ApiOperation("所有项目投决流程列表")
  48. @GetMapping("/listAll")
  49. public TableDataInfo listAll(TProjectDecision tProjectDecision)
  50. {
  51. startPage();
  52. List<ProjectDecisionVo> list=decisionService.selectAllDecisionList(tProjectDecision);
  53. return getDataTable(list);
  54. }
  55. /**
  56. * 导出所有项目投决流程列表
  57. */
  58. @ApiOperation("导出所有项目投决流程列表")
  59. @Log(title = "所有项目投决流程列表", businessType = BusinessType.EXPORT)
  60. @PostMapping("/export")
  61. public void export(HttpServletResponse response, TProjectDecision tProjectDecision)
  62. {
  63. List<ProjectDecisionVo> list=decisionService.selectAllDecisionList(tProjectDecision)
  64. .stream().map(n -> {
  65. if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
  66. if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
  67. if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
  68. if(StringUtils.isNotEmpty(n.getProjectStatus())){
  69. if("0".equals(n.getProjectStatus())){
  70. n.setProjectStatus("正常");
  71. }else if("1".equals(n.getProjectStatus())){
  72. n.setProjectStatus("终止");
  73. }else if("2".equals(n.getProjectStatus())){
  74. n.setProjectStatus("观望");
  75. }
  76. }
  77. return n;
  78. })
  79. .collect(Collectors.toList());
  80. ExcelUtil<ProjectDecisionVo> util = new ExcelUtil<ProjectDecisionVo>(ProjectDecisionVo.class);
  81. util.exportExcel(response, list, "所有项目投决流程数据");
  82. }
  83. /**
  84. * 查询可申请项目投决列表
  85. */
  86. @ApiOperation("查询可申请项目投决列表")
  87. @GetMapping("/applicableList")
  88. public TableDataInfo applicableList(TProjectPool tProjectPool)
  89. {
  90. startPage();
  91. tProjectPool.setProjectStage("5");
  92. tProjectPool.setDelFlag("0");
  93. tProjectPool.setDecisionFlag("0");//未发起投决
  94. tProjectPool.setStatus(3);//项目机会流程状态为审批通过
  95. tProjectPool.setProjectStatus(tProjectPool.getProjectStatus());
  96. List<TProjectPool> list = investmentOpportunityService.selectApplicableProjectList(tProjectPool).stream().map(n -> {
  97. n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"TJ"));
  98. if(null != n.gettProjectMeeting()){
  99. n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
  100. }
  101. return n;
  102. }).collect(Collectors.toList());
  103. return getDataTable(list);
  104. }
  105. //我的待办任务
  106. @ApiOperation("我的待办任务列表")
  107. @GetMapping("/getMyTaskList")
  108. public TableDataInfo getMyTaskList(TProjectDecision tProjectDecision)
  109. {
  110. startPage();
  111. //tProjectPool.setProjectStage("1");
  112. List<ProjectDecisionVo> list=decisionService.getMyTaskList(getUserId().toString(),tProjectDecision);
  113. return getDataTable(list);
  114. }
  115. //我的已办任务
  116. @ApiOperation("我的已办任务列表")
  117. @GetMapping("/getMyDoneTaskList")
  118. public TableDataInfo getMyDoneTaskList(TProjectDecision tProjectDecision)
  119. {
  120. startPage();
  121. //tProjectPool.setProjectStage("1");
  122. List<ProjectDecisionVo> list=decisionService.getMyDoneTaskList(getUserId().toString(),tProjectDecision);
  123. return getDataTable(list);
  124. }
  125. //我的待办任务
  126. @ApiOperation("我的单据列表")
  127. @GetMapping("/getMyList")
  128. public TableDataInfo getMyList(TProjectDecision tProjectDecision)
  129. {
  130. startPage();
  131. //tProjectPool.setProjectStage("1");
  132. List<ProjectDecisionVo> list=decisionService.getMyList(getUserId().toString(),tProjectDecision);
  133. return getDataTable(list);
  134. }
  135. /**
  136. * 导出我的已办任务列表
  137. */
  138. @ApiOperation("导出我的待办任务列表")
  139. @Log(title = "我的待办任务列表", businessType = BusinessType.EXPORT)
  140. @PostMapping("/exportMyTask")
  141. public void exportMyTask(HttpServletResponse response, TProjectPool tProjectPool)
  142. {
  143. List<TProjectPoolVo> list=investmentOpportunityService.getMyTaskList(getUserId().toString(),tProjectPool)
  144. .stream().map(n -> {
  145. if(null != n.gettProjectChannel()){
  146. n.setChannel(n.gettProjectChannel().getChannelName());
  147. }
  148. if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
  149. if(null != n.gettProjectCompany()){
  150. n.setCompany(n.gettProjectCompany().getCompanyName());
  151. }
  152. if(null != n.gettProjectContacts()){
  153. n.setProjectContacts(n.gettProjectContacts().getName());
  154. }
  155. if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
  156. if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
  157. if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
  158. if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
  159. if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
  160. if(StringUtils.isNotEmpty(n.getProjectStatus())){
  161. if("0".equals(n.getProjectStatus())){
  162. n.setProjectStatus("正常");
  163. }else if("1".equals(n.getProjectStatus())){
  164. n.setProjectStatus("终止");
  165. }else if("2".equals(n.getProjectStatus())){
  166. n.setProjectStatus("观望");
  167. }
  168. }
  169. return n;
  170. })
  171. .collect(Collectors.toList());
  172. ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
  173. util.exportExcel(response, list, "我的待办任务数据");
  174. }
  175. /**
  176. * 导出我的已办任务列表
  177. */
  178. @ApiOperation("导出我的已办任务列表")
  179. @Log(title = "我的已办任务列表", businessType = BusinessType.EXPORT)
  180. @PostMapping("/exportMyDoneTask")
  181. public void exportMyDoneTask(HttpServletResponse response, TProjectPool tProjectPool)
  182. {
  183. List<TProjectPoolVo> list=investmentOpportunityService.getMyDoneTaskList(getUserId().toString(),tProjectPool)
  184. .stream().map(n -> {
  185. if(null != n.gettProjectChannel()){
  186. n.setChannel(n.gettProjectChannel().getChannelName());
  187. }
  188. if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
  189. if(null != n.gettProjectCompany()){
  190. n.setCompany(n.gettProjectCompany().getCompanyName());
  191. }
  192. if(null != n.gettProjectContacts()){
  193. n.setProjectContacts(n.gettProjectContacts().getName());
  194. }
  195. if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
  196. if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
  197. if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
  198. if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
  199. if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
  200. if(StringUtils.isNotEmpty(n.getProjectStatus())){
  201. if("0".equals(n.getProjectStatus())){
  202. n.setProjectStatus("正常");
  203. }else if("1".equals(n.getProjectStatus())){
  204. n.setProjectStatus("终止");
  205. }else if("2".equals(n.getProjectStatus())){
  206. n.setProjectStatus("观望");
  207. }
  208. }
  209. return n;
  210. })
  211. .collect(Collectors.toList());
  212. ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
  213. util.exportExcel(response, list, "我的已办任务数据");
  214. }
  215. /**
  216. * 导出我的单据列表
  217. */
  218. @ApiOperation("导出我的单据列表")
  219. @Log(title = "我的单据列表", businessType = BusinessType.EXPORT)
  220. @PostMapping("/exportMy")
  221. public void exportMy(HttpServletResponse response, TProjectPool tProjectPool)
  222. {
  223. List<TProjectPoolVo> list=investmentOpportunityService.getMyList(getUserId().toString(),tProjectPool)
  224. .stream().map(n -> {
  225. if(null != n.gettProjectChannel()){
  226. n.setChannel(n.gettProjectChannel().getChannelName());
  227. }
  228. if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
  229. if(null != n.gettProjectCompany()){
  230. n.setCompany(n.gettProjectCompany().getCompanyName());
  231. }
  232. if(null != n.gettProjectContacts()){
  233. n.setProjectContacts(n.gettProjectContacts().getName());
  234. }
  235. if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
  236. if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
  237. if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
  238. if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
  239. if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
  240. if(StringUtils.isNotEmpty(n.getProjectStatus())){
  241. if("0".equals(n.getProjectStatus())){
  242. n.setProjectStatus("正常");
  243. }else if("1".equals(n.getProjectStatus())){
  244. n.setProjectStatus("终止");
  245. }else if("2".equals(n.getProjectStatus())){
  246. n.setProjectStatus("观望");
  247. }
  248. }
  249. return n;
  250. })
  251. .collect(Collectors.toList());
  252. ExcelUtil<TProjectPoolVo> util = new ExcelUtil<TProjectPoolVo>(TProjectPoolVo.class);
  253. util.exportExcel(response, list, "我的单据数据");
  254. }
  255. /**
  256. * 获取项目池详细信息
  257. */
  258. @ApiOperation("获取项目池详细信息")
  259. @GetMapping(value = "/{pInstId}")
  260. public AjaxResult getInfo(@PathVariable("pInstId") String pInstId)
  261. {
  262. return success(decisionService.selectTProjectDecisionByProcInstId(pInstId));
  263. }
  264. //发起流程
  265. @ApiOperation(value = "投资机会申请发起流程")
  266. @Log(title = "发起流程", businessType = BusinessType.INSERT)
  267. @PostMapping("/start")
  268. public AjaxResult start(@RequestBody TProjectDecision tProjectDecision) {
  269. //return decisionService.set
  270. return decisionService.start(tProjectDecision);
  271. }
  272. @ApiOperation(value = "审批任务")
  273. @PutMapping(value = "/complete")
  274. public AjaxResult complete(@RequestBody DecisionDto dto, HttpServletRequest request) {
  275. // 从 DTO 中拆分参数
  276. TProjectDecision tProjectDecision= dto.getProjectDecision();
  277. TProjectMeeting tProjectMeeting = dto.getProjectMeeting();
  278. TProjectScoring tProjectScoring =dto.getProjectScoring();
  279. FlowBaseInfo flowBaseInfo= dto.getFlowBaseInfo();
  280. return decisionService.complete(tProjectDecision,tProjectMeeting,tProjectScoring,flowBaseInfo,request);
  281. }
  282. /**
  283. * 获取通过流程id会议记录详细信息 (会议投决)
  284. */
  285. @ApiOperation("获取会议记录详细信息")
  286. @GetMapping(value = "/getMeetingInfo/{pInstId}")
  287. public AjaxResult getMeetingInfo(@PathVariable("pInstId") String pInstId) {
  288. return success(decisionService.selectTProjectMeetingByProcInstId(pInstId));
  289. }
  290. /**
  291. * 根据流程Id查询汇总分数和平均分数 (总裁室)
  292. */
  293. @ApiOperation("根据会议ID查询汇总分数和平均分数")
  294. @GetMapping(value = "/getSumScore/{pInstId}")
  295. public AjaxResult getSumScore(@PathVariable("pInstId") String pInstId)
  296. {
  297. if (StringUtils.isEmpty(pInstId))
  298. {
  299. return error("查询打分数据'" + getNickName() + "'失败,请选择会议!");
  300. }
  301. return success(decisionService.selectSumScore(pInstId));
  302. }
  303. }