InvestigateServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package com.ruoyi.flowable.service.impl;
  2. import com.ruoyi.common.core.domain.AjaxResult;
  3. import com.ruoyi.common.core.domain.entity.SysUser;
  4. import com.ruoyi.common.enums.FileType;
  5. import com.ruoyi.common.utils.DateUtils;
  6. import com.ruoyi.common.utils.SecurityUtils;
  7. import com.ruoyi.common.utils.StringUtils;
  8. import com.ruoyi.common.utils.sms.SmsSenderUtils;
  9. import com.ruoyi.common.utils.uuid.IdUtils;
  10. import com.ruoyi.flowable.common.constant.ProcessConstants;
  11. import com.ruoyi.flowable.common.constant.UUIDGenerator;
  12. import com.ruoyi.flowable.common.enums.FlowStatusEnum;
  13. import com.ruoyi.flowable.factory.FlowServiceFactory;
  14. import com.ruoyi.flowable.service.IFlowInstanceService;
  15. import com.ruoyi.flowable.service.IFlowService;
  16. import com.ruoyi.flowable.service.IInvestigateService;
  17. import com.ruoyi.invest.domain.*;
  18. import com.ruoyi.invest.domain.vo.ProjectInvestigateVo;
  19. import com.ruoyi.invest.mapper.InvestigateMapper;
  20. import com.ruoyi.invest.mapper.TProjectScoringMapper;
  21. import com.ruoyi.invest.service.*;
  22. import com.ruoyi.system.mapper.SysDeptMapper;
  23. import com.ruoyi.system.service.ISysUserService;
  24. import com.ruoyi.tool.service.ITUnifyFileService;
  25. import org.flowable.engine.repository.ProcessDefinition;
  26. import org.flowable.engine.runtime.ProcessInstance;
  27. import org.flowable.task.api.Task;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import javax.servlet.http.HttpServletRequest;
  31. import java.io.IOException;
  32. import java.util.*;
  33. /**
  34. * 项目池Service业务层处理
  35. *
  36. * @author ruoyi
  37. * @date 2024-02-21
  38. */
  39. @Service
  40. public class InvestigateServiceImpl extends FlowServiceFactory implements IInvestigateService
  41. {
  42. @Autowired
  43. private InvestigateMapper investigateMapper;
  44. @Autowired
  45. private ITProjectInvestigateService tProjectInvestigateService;
  46. @Autowired
  47. private ITProjectInvestigatePersonService tProjectInvestigatePersonService;
  48. @Autowired
  49. private ITProjectPoolService tProjectPoolService;
  50. @Autowired
  51. private ITProjectCirculationService tProjectCirculationService;
  52. @Autowired
  53. private ITUnifyFileService tUnifyFileService;
  54. @Autowired
  55. private IFlowBaseInfoService activitiBaseInfoService;
  56. @Autowired
  57. private IFlowInstanceService flowInstanceService;
  58. @Autowired
  59. private ISysUserService sysUserService;
  60. @Autowired
  61. private SysDeptMapper sysDeptMapper;
  62. @Autowired
  63. private IFlowService flowService;
  64. @Autowired
  65. private TProjectScoringMapper tProjectScoringMapper;
  66. @Override
  67. public List<ProjectInvestigateVo> selectAllInvestigateList(TProjectInvestigate tProjectInvestigate){
  68. return investigateMapper.selectAllInvestigateList(tProjectInvestigate);
  69. }
  70. @Override
  71. public List<ProjectInvestigateVo> getMyTaskList(String userId, TProjectInvestigate tProjectInvestigate){
  72. return investigateMapper.getMyTaskList(userId, tProjectInvestigate);
  73. }
  74. @Override
  75. public List<ProjectInvestigateVo> getMyDoneTaskList(String userId, TProjectInvestigate tProjectInvestigate){
  76. return investigateMapper.getMyDoneTaskList(userId, tProjectInvestigate);
  77. }
  78. @Override
  79. public List<ProjectInvestigateVo> getMyList(String userId,TProjectInvestigate tProjectInvestigate){
  80. return investigateMapper.getMyList(userId, tProjectInvestigate);
  81. }
  82. /**
  83. * 查询项目池
  84. *
  85. * @param pInstId 流程实例Id
  86. * @return 项目池
  87. */
  88. @Override
  89. public TProjectInvestigate selectTProjectInvestigateByProcInstId(String pInstId)
  90. {
  91. return investigateMapper.selectTProjectInvestigateByProcInstId(pInstId);
  92. }
  93. @Override
  94. public AjaxResult start(TProjectInvestigate tProjectInvestigate) {
  95. // 根据key值获取最新的流程部署id
  96. String pDefId = null;
  97. ProcessInstance pInst = null;
  98. try {
  99. List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
  100. .processDefinitionKey("dgt-due-workflow")
  101. .orderByProcessDefinitionVersion().desc().list();
  102. if(list.size()==0){
  103. return AjaxResult.error("未找到该流程,无法开启流程!");
  104. }
  105. pDefId = list.get(0).getId();
  106. ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(pDefId)
  107. .latestVersion().singleResult();
  108. if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
  109. return AjaxResult.error("流程已被挂起,请先激活流程");
  110. }
  111. if(StringUtils.isNotBlank(pDefId)){
  112. //设置参数
  113. Map<String, Object> formProperties = new HashMap<String, Object>();
  114. // 设置流程发起人Id到流程中
  115. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  116. identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
  117. formProperties.put("auditPass",tProjectInvestigate.isFlag()?true:false);
  118. //暂存
  119. formProperties.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
  120. //投资部负责人
  121. String leader=sysDeptMapper.selectDeptLeader("投资部");
  122. formProperties.put("MANAGER",sysUserService.selectUserByUserName(leader).getUserId());
  123. //尽职背调上传人
  124. List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
  125. formProperties.put("uploadList", userIds);
  126. pInst = runtimeService.startProcessInstanceById(pDefId, formProperties);
  127. if(pInst!=null){
  128. String nickName= SecurityUtils.getLoginUser().getUser().getNickName();
  129. String userId=SecurityUtils.getLoginUser().getUserId().toString();
  130. //保存信息
  131. tProjectInvestigate.setId(IdUtils.fastSimpleUUID());
  132. tProjectInvestigate.setProcInstId(pInst.getProcessInstanceId());
  133. tProjectInvestigate.setCreateBy(userId);
  134. if(tProjectInvestigate.isFlag()){
  135. tProjectInvestigate.setStatus(1);//提交
  136. }else{
  137. tProjectInvestigate.setStatus(0);//暂存
  138. }
  139. // todo 保存尽职背调附件信息
  140. tUnifyFileService.insertTUnifyFileList(tProjectInvestigate.getListFile(),
  141. tProjectInvestigate.getProjectPoolId(),
  142. tProjectInvestigate.getId(),//尽调ID
  143. String.valueOf(FileType.INVESTIGATE.ordinal()),//文件类型:尽调
  144. nickName);
  145. // todo 增加尽调创建记录
  146. tProjectCirculationService.insertTProjectCirculation(tProjectInvestigate.getProjectPoolId(),tProjectInvestigate.getInvestigateName()+"(尽职背调)",nickName);
  147. // todo 更改尽调状态
  148. tProjectPoolService.updateTProjectPoolByInvestigateFlag(tProjectInvestigate.getProjectPoolId(),"1");
  149. // todo 短信提醒
  150. /*if(StringUtils.isNotEmpty(tProjectInvestigate.getInvestigatePersonId())){
  151. StringUtils.str2List(tProjectInvestigate.getInvestigatePersonId(),",",true,true).stream().forEach(str -> {
  152. SysUser user = sysUserService.selectUserById(Long.valueOf(str));
  153. String contents = "您好,"+user.getNickName()+"," + tProjectInvestigate.getProjectName() + "已开启尽职背调。";
  154. try {
  155. SmsSenderUtils.sendSms(user.getPhonenumber(),contents);
  156. } catch (IOException e) {
  157. logger.error("短信发送失败"+e.getMessage());
  158. }
  159. });
  160. }*/
  161. tProjectInvestigateService.insertTProjectInvestigate(tProjectInvestigate);
  162. FlowBaseInfo flowBaseInfo = new FlowBaseInfo();
  163. flowBaseInfo.setCreateBy(userId);
  164. flowBaseInfo.setId(UUIDGenerator.uuid());
  165. flowBaseInfo.setFormProperties(flowInstanceService.getFormProperties(pInst));
  166. flowBaseInfo.setProcDefId(pDefId);
  167. flowBaseInfo.setProcInsId(pInst.getId());
  168. flowBaseInfo.setTaskName("申请人");
  169. flowBaseInfo.setFlag(true);
  170. flowBaseInfo.setComment(tProjectInvestigate.isFlag() ? "[提交]" : "[暂存]");
  171. flowBaseInfo.setStatus(FlowStatusEnum.STARTED.getName());
  172. activitiBaseInfoService.addActivitiBaseInfo(flowBaseInfo);
  173. TProjectPool tProjectPool=new TProjectPool();
  174. tProjectPool.setId(tProjectInvestigate.getProjectPoolId());
  175. tProjectPool.setProjectStage("4");//项目阶段-尽职背调
  176. tProjectPool.setProjectState("f");//项目状态-尽职背调
  177. tProjectPoolService.updateTProjectPool(tProjectPool);
  178. return AjaxResult.success();
  179. }
  180. return AjaxResult.error();
  181. }
  182. return AjaxResult.error();
  183. } catch (Exception e) {
  184. /*res.put("status",false);
  185. res.put("msg", "流程定义id为空, 无法开启流程!");*/
  186. e.printStackTrace();
  187. return AjaxResult.error("msg", "流程定义id为空, 无法开启流程!");
  188. }
  189. }
  190. @Override
  191. public AjaxResult complete(TProjectInvestigate tProjectInvestigate, TProjectInvestigatePerson tProjectInvestigatePerson, FlowBaseInfo flow,HttpServletRequest request){
  192. //Task task=taskService.createTaskQuery().processInstanceId(tProjectApproval.getProcInstId()).singleResult();
  193. Task task = taskService.createTaskQuery().taskId(flow.getTaskId()).singleResult();
  194. if (Objects.isNull(task)) {
  195. return AjaxResult.error("任务不存在");
  196. }
  197. //当前你登录人
  198. SysUser userInfo=SecurityUtils.getLoginUser().getUser();
  199. Map<String, Object> rs = new HashMap<String, Object>();
  200. rs.put("status",true);
  201. Map<String, Object> formProperties = new HashMap<>();
  202. formProperties.put("auditPass", tProjectInvestigate.isFlag());
  203. //尽职背调上传人
  204. if("modifyApply".equals(task.getTaskDefinitionKey())) {
  205. //尽职背调上传人
  206. List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
  207. formProperties.put("uploadList", userIds);
  208. }
  209. if(StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())) {//不为空代表结束流程
  210. formProperties.put("whetherToEnd", true);
  211. }else{
  212. formProperties.put("whetherToEnd", false);
  213. }
  214. Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
  215. try {
  216. rs = flowService.taskComplete( task.getId(), tProjectInvestigate.isFlag(), formProperties, userInfo.getUserId().toString());
  217. } catch (Exception e) {
  218. e.printStackTrace();
  219. rs.put("status", false);
  220. rs.put("msg", "流程审批失败");
  221. }
  222. boolean status = (boolean) rs.get("status");
  223. // 审核成功, 则记录审核信息
  224. if (status) {
  225. TProjectPool tProjectPool=new TProjectPool();
  226. tProjectPool.setId(tProjectInvestigate.getProjectPoolId());
  227. // todo 保存尽职背调资料
  228. tUnifyFileService.insertTUnifyFileList(tProjectInvestigate.getListFile(),
  229. tProjectInvestigate.getProjectPoolId(),
  230. tProjectInvestigate.getId(),
  231. String.valueOf(FileType.INVESTIGATE.ordinal()),
  232. userInfo.getNickName());
  233. //上传尽职背调报告
  234. if ("upload".equals(task.getTaskDefinitionKey())) {
  235. if(StringUtils.isNull(tProjectInvestigatePerson.getId())){
  236. tProjectInvestigatePerson.setId(IdUtils.fastSimpleUUID());
  237. }
  238. tProjectInvestigatePerson.setInvestigatePerson(userInfo.getNickName());
  239. tProjectInvestigatePerson.setInvestigatePersonId(userInfo.getUserId().toString());
  240. tProjectInvestigatePerson.setDeptId(userInfo.getDeptId());
  241. // todo 保存附件信息
  242. tUnifyFileService.insertTUnifyFileList(tProjectInvestigatePerson.getListFile(),
  243. tProjectInvestigatePerson.getProjectPoolId(),
  244. tProjectInvestigatePerson.getId(),//尽调ID
  245. String.valueOf(FileType.INVESTIGATE.ordinal()),//文件类型:尽调
  246. userInfo.getNickName());
  247. // todo 增加项目创建记录
  248. tProjectCirculationService.insertTProjectCirculation(tProjectInvestigatePerson.getProjectPoolId(),"上传尽调报告", userInfo.getNickName());
  249. tProjectInvestigatePersonService.insertTProjectInvestigatePerson(tProjectInvestigatePerson);
  250. }
  251. if("president".equals(task.getTaskDefinitionKey())){
  252. // tProjectPool.setProjectStage("5");//项目阶段-项目投决
  253. // tProjectPool.setProjectState("i");//项目状态-项目投决通过
  254. }
  255. //FlowBaseInfo flow = new FlowBaseInfo();
  256. if(flow==null){
  257. flow = new FlowBaseInfo();
  258. }
  259. flow.setId(UUIDGenerator.uuid());
  260. flow.setFormProperties(flowService.getFormProperties(fpMap, request.getParameterMap()));
  261. flow.setStatus(FlowStatusEnum.RUNNING.getName());
  262. flow.setProcDefId(task.getProcessDefinitionId());
  263. flow.setProcInsId(task.getProcessInstanceId());
  264. flow.setTaskDefKey(task.getTaskDefinitionKey());
  265. String isOk = tProjectInvestigate.isFlag() ? "[同意]" : "[驳回]";
  266. if ("modifyApply".equals(task.getTaskDefinitionKey())) {
  267. tProjectInvestigate.setStatus(tProjectInvestigate.isFlag() ? 1 : 4);
  268. isOk = tProjectInvestigate.isFlag() ? "[提交]" : "[关闭]";
  269. } else {
  270. tProjectInvestigate.setStatus(tProjectInvestigate.isFlag() ? 2 : 0);
  271. if("president".equals(task.getTaskDefinitionKey())){//总裁室
  272. if(!tProjectInvestigate.isFlag()&&StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
  273. isOk= "[关闭]";
  274. }
  275. }
  276. }
  277. if (null != flow.getComment()) {
  278. flow.setComment(isOk + flow.getComment());
  279. } else {
  280. flow.setComment(isOk);
  281. }
  282. flow.setTaskName(task.getName());
  283. flow.setCreateBy(SecurityUtils.getLoginUser().getUserId().toString());
  284. ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).active().singleResult();
  285. // 表示流程已经审批结束了
  286. if (processInstance == null) {
  287. flow.setStatus(FlowStatusEnum.ENDED.getName());
  288. if (!"modifyApply".equals(task.getTaskDefinitionKey())) {
  289. if(tProjectInvestigate.isFlag()) {//审批通过
  290. tProjectInvestigate.setStatus(3);
  291. tProjectPool.setProjectStage("5");//项目阶段-项目投决
  292. tProjectPool.setProjectState("h");//项目状态-准备项目投决材料
  293. tProjectPool.setUpdateBy(userInfo.getNickName());
  294. // todo 增加项目创建记录
  295. tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(), "尽职背调完成", userInfo.getNickName());
  296. }else{//终止和观望
  297. if(StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())) {
  298. tProjectInvestigate.setStatus(4);//流程状态为关闭
  299. if ("1".equals(tProjectInvestigate.getIsTerminate())) {
  300. tProjectPool.setProjectStatus("1");//终止
  301. } else {
  302. tProjectPool.setProjectStatus("2");//观望
  303. }
  304. tProjectPool.setProjectStage("4");//项目阶段-尽职背调
  305. tProjectPool.setProjectState("f");//项目状态-尽职背调
  306. tProjectPool.setInvestigateFlag("0");
  307. tProjectPool.setUpdateBy(userInfo.getNickName());
  308. }
  309. }
  310. }else{
  311. tProjectPool.setProjectStage("4");//项目阶段-尽职背调
  312. tProjectPool.setProjectState("f");//项目状态-尽职背调
  313. tProjectPool.setInvestigateFlag("0");
  314. tProjectPool.setUpdateBy(userInfo.getNickName());
  315. }
  316. tProjectPoolService.updateTProjectPool(tProjectPool);
  317. }
  318. tProjectInvestigateService.updateTProjectInvestigate(tProjectInvestigate);
  319. activitiBaseInfoService.addActivitiBaseInfo(flow);
  320. }
  321. return AjaxResult.success();
  322. }
  323. public TProjectMeeting selectTProjectMeetingByProcInstId(String pInstId){
  324. TProjectInvestigate tProjectInvestigate=this.selectTProjectInvestigateByProcInstId(pInstId);
  325. TProjectMeeting tProjectMeeting=null;
  326. if(tProjectInvestigate!=null){
  327. //tProjectMeeting=tProjectMeetingService.selectTProjectMeetingByProjectPoolId(tProjectInvestigate.getProjectPoolId());
  328. }
  329. return tProjectMeeting;
  330. }
  331. /**
  332. * 根据流程Id查询汇总分数和平均分数
  333. * @param pInstId
  334. * @return
  335. */
  336. @Override
  337. public Map<String, String> selectSumScore(String pInstId) {
  338. TProjectInvestigate tProjectInvestigate=this.selectTProjectInvestigateByProcInstId(pInstId);
  339. Map<String, String> sumScore=new HashMap<>();
  340. if(tProjectInvestigate!=null){
  341. //TProjectMeeting tProjectMeeting=tProjectMeetingService.selectTProjectMeetingByProjectPoolId(tProjectInvestigate.getProjectPoolId());
  342. //sumScore=tProjectScoringMapper.selectMeetingId(tProjectMeeting.getId());
  343. }
  344. return sumScore;
  345. }
  346. }