| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- package com.ruoyi.flowable.service.impl;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.common.core.domain.entity.SysUser;
- import com.ruoyi.common.enums.FileType;
- import com.ruoyi.common.utils.DateUtils;
- import com.ruoyi.common.utils.SecurityUtils;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.common.utils.uuid.IdUtils;
- import com.ruoyi.flowable.common.constant.ProcessConstants;
- import com.ruoyi.flowable.common.constant.UUIDGenerator;
- import com.ruoyi.flowable.common.enums.FlowStatusEnum;
- import com.ruoyi.flowable.factory.FlowServiceFactory;
- import com.ruoyi.flowable.service.IDecisionService;
- import com.ruoyi.flowable.service.IFlowInstanceService;
- import com.ruoyi.flowable.service.IFlowService;
- import com.ruoyi.invest.domain.*;
- import com.ruoyi.invest.domain.vo.ProjectDecisionVo;
- import com.ruoyi.invest.mapper.DecisionMapper;
- import com.ruoyi.invest.mapper.TProjectPoolMapper;
- import com.ruoyi.invest.mapper.TProjectScoringMapper;
- import com.ruoyi.invest.service.*;
- import com.ruoyi.system.mapper.SysDeptMapper;
- import com.ruoyi.system.service.ISysUserService;
- import com.ruoyi.tool.service.ITUnifyFileService;
- import org.flowable.engine.repository.ProcessDefinition;
- import org.flowable.engine.runtime.ProcessInstance;
- import org.flowable.task.api.Task;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.servlet.http.HttpServletRequest;
- import java.io.IOException;
- import java.util.*;
- /**
- * 项目池Service业务层处理
- *
- * @author ruoyi
- * @date 2024-02-21
- */
- @Service
- public class DecisionServiceImpl extends FlowServiceFactory implements IDecisionService
- {
- @Autowired
- private DecisionMapper decisionMapper;
- @Autowired
- private ITProjectDecisionService tProjectDecisionService;
- @Autowired
- private TProjectPoolMapper tProjectPoolMapper;
- @Autowired
- private ITProjectPoolService tProjectPoolService;
- @Autowired
- private ITProjectCompanyService tProjectCompanyService;
- @Autowired
- private ITProjectContactsService tProjectContactsService;
- @Autowired
- private ITProjectCirculationService tProjectCirculationService;
- @Autowired
- private ITUnifyFileService tUnifyFileService;
- @Autowired
- private IFlowBaseInfoService activitiBaseInfoService;
- @Autowired
- private IFlowInstanceService flowInstanceService;
- @Autowired
- private ISysUserService sysUserService;
- @Autowired
- private SysDeptMapper sysDeptMapper;
- @Autowired
- private ITProjectReviewService tProjectReviewService;
- @Autowired
- private IFlowService flowService;
- @Autowired
- private ITProjectMeetingService tProjectMeetingService;
- @Autowired
- private ITProjectScoringService tProjectScoringService;
- @Autowired
- private TProjectScoringMapper tProjectScoringMapper;
- @Override
- public List<ProjectDecisionVo> selectAllDecisionList(TProjectDecision tProjectDecision){
- return decisionMapper.selectAllDecisionList(tProjectDecision);
- }
- @Override
- public List<ProjectDecisionVo> getMyTaskList(String userId, TProjectDecision tProjectDecision){
- return decisionMapper.getMyTaskList(userId, tProjectDecision);
- }
- @Override
- public List<ProjectDecisionVo> getMyDoneTaskList(String userId, TProjectDecision tProjectDecision){
- return decisionMapper.getMyDoneTaskList(userId, tProjectDecision);
- }
- @Override
- public List<ProjectDecisionVo> getMyList(String userId,TProjectDecision tProjectDecision){
- return decisionMapper.getMyList(userId, tProjectDecision);
- }
- /**
- * 查询项目池
- *
- * @param pInstId 流程实例Id
- * @return 项目池
- */
- @Override
- public TProjectDecision selectTProjectDecisionByProcInstId(String pInstId)
- {
- return decisionMapper.selectTProjectDecisionByProcInstId(pInstId);
- }
- @Override
- public AjaxResult start(TProjectDecision tProjectDecision) {
- // 根据key值获取最新的流程部署id
- String pDefId = null;
- ProcessInstance pInst = null;
- try {
- List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
- .processDefinitionKey("dgt-decision-workflow")
- .orderByProcessDefinitionVersion().desc().list();
- if(list.size()==0){
- return AjaxResult.error("未找到该流程,无法开启流程!");
- }
- pDefId = list.get(0).getId();
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(pDefId)
- .latestVersion().singleResult();
- if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
- return AjaxResult.error("流程已被挂起,请先激活流程");
- }
- if(StringUtils.isNotBlank(pDefId)){
- //设置参数
- Map<String, Object> formProperties = new HashMap<String, Object>();
- // 设置流程发起人Id到流程中
- SysUser sysUser = SecurityUtils.getLoginUser().getUser();
- identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
- formProperties.put("auditPass",tProjectDecision.isFlag()?true:false);
- //暂存
- formProperties.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
- //投资部负责人
- String leader=sysDeptMapper.selectDeptLeader("投资部");
- formProperties.put("MANAGER",sysUserService.selectUserByUserName(leader).getUserId());
- pInst = runtimeService.startProcessInstanceById(pDefId, formProperties);
- // ProcessInstance p = runtimeService.startProcessInstanceById(procDefId, variables);
- if(pInst!=null){
- String nickName= SecurityUtils.getLoginUser().getUser().getNickName();
- String userId=SecurityUtils.getLoginUser().getUserId().toString();
- //保存信息
- tProjectDecision.setId(IdUtils.fastSimpleUUID());
- tProjectDecision.setProcInstId(pInst.getProcessInstanceId());
- tProjectDecision.setCreateBy(userId);
- if(tProjectDecision.isFlag()){
- tProjectDecision.setStatus(1);//提交
- }else{
- tProjectDecision.setStatus(0);//暂存
- }
- // todo 保存投决资料
- tUnifyFileService.insertTUnifyFileLists(tProjectDecision.getListFile(),
- tProjectDecision.getProjectPoolId(),
- tProjectDecision.getId(),
- String.valueOf(FileType.DECISION.ordinal()),
- 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");
- // todo 短信提醒
- /*if(StringUtils.isNotEmpty(tProjectDecision.getParticipantsId())){
- StringUtils.str2List(tProjectDecision.getParticipantsId(),",",true,true).stream().forEach(str -> {
- SysUser user = sysUserService.selectUserById(Long.valueOf(str));
- String contents = "您好,"+user.getNickName()+"," + tProjectDecision.getProjectName() + "已发起投决申请。";
- try {
- SmsSenderUtils.sendSms(user.getPhonenumber(),contents);
- } catch (IOException e) {
- logger.error("短信发送失败"+e.getMessage());
- }
- });
- }*/
- // todo 增加项目创建记录
- tProjectCirculationService.insertTProjectCirculation(tProjectDecision.getProjectPoolId(),"投决申请",nickName);
- tProjectDecisionService.insertTProjectDecision(tProjectDecision);
- FlowBaseInfo flowBaseInfo = new FlowBaseInfo();
- flowBaseInfo.setCreateBy(userId);
- flowBaseInfo.setId(UUIDGenerator.uuid());
- flowBaseInfo.setFormProperties(flowInstanceService.getFormProperties(pInst));
- flowBaseInfo.setProcDefId(pDefId);
- flowBaseInfo.setProcInsId(pInst.getId());
- flowBaseInfo.setTaskName("申请人");
- flowBaseInfo.setFlag(true);
- flowBaseInfo.setComment(tProjectDecision.isFlag() ? "[提交]" : "[暂存]");
- flowBaseInfo.setStatus(FlowStatusEnum.STARTED.getName());
- activitiBaseInfoService.addActivitiBaseInfo(flowBaseInfo);
- TProjectPool tProjectPool=new TProjectPool();
- tProjectPool.setId(tProjectDecision.getProjectPoolId());
- tProjectPool.setProjectStage("5");//项目阶段-项目投决
- tProjectPool.setProjectState("h");//项目状态-准备项目投决材料
- tProjectPoolService.updateTProjectPool(tProjectPool);
- return AjaxResult.success();
- }
- return AjaxResult.error();
- }
- return AjaxResult.error();
- } catch (Exception e) {
- /*res.put("status",false);
- res.put("msg", "流程定义id为空, 无法开启流程!");*/
- e.printStackTrace();
- return AjaxResult.error("msg", "流程定义id为空, 无法开启流程!");
- }
- }
- @Override
- public AjaxResult complete(TProjectDecision tProjectDecision, TProjectMeeting tProjectMeeting,TProjectScoring tProjectScoring, FlowBaseInfo flow,HttpServletRequest request){
- //Task task=taskService.createTaskQuery().processInstanceId(tProjectApproval.getProcInstId()).singleResult();
- Task task = taskService.createTaskQuery().taskId(flow.getTaskId()).singleResult();
- if (Objects.isNull(task)) {
- return AjaxResult.error("任务不存在");
- }
- //当前你登录人
- SysUser userInfo=SecurityUtils.getLoginUser().getUser();
- Map<String, Object> rs = new HashMap<String, Object>();
- rs.put("status",true);
- Map<String, Object> formProperties = new HashMap<>();
- formProperties.put("auditPass", tProjectDecision.isFlag());
- //会议投决人
- if("meeting".equals(task.getTaskDefinitionKey())) {
- //立项审批人
- List<String> userIds = Arrays.asList(tProjectDecision.getParticipantsId().split(","));
- //List<String> userIds = Arrays.asList(tProjectMeeting.getParticipantsId().split(","));//会议人
- formProperties.put("decisionList", userIds);
- }
- if(StringUtils.isNotBlank(tProjectDecision.getIsTerminate())) {//不为空代表结束流程
- formProperties.put("whetherToEnd", true);
- }else{
- formProperties.put("whetherToEnd", false);
- }
- Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
- try {
- rs = flowService.taskComplete( task.getId(), tProjectDecision.isFlag(), formProperties, userInfo.getUserId().toString());
- } catch (Exception e) {
- e.printStackTrace();
- rs.put("status", false);
- rs.put("msg", "流程审批失败");
- }
- boolean status = (boolean) rs.get("status");
- // 审核成功, 则记录审核信息
- if (status) {
- TProjectPool tProjectPool=new TProjectPool();
- tProjectPool.setId(tProjectDecision.getProjectPoolId());
- 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());
- tProjectMeeting.setCreateBy(userInfo.getNickName());
- tProjectMeeting.setProjectPoolId(tProjectDecision.getProjectPoolId());
- if(tProjectMeeting.getMeetingType().equals("LX")||tProjectMeeting.getMeetingType().equals("TJ")){
- int number = tProjectMeetingService.selectTProjectMeetingCode(DateUtils.lastTwoDigits()+"-");
- tProjectMeeting.setMeetingCode(tProjectMeeting.getProjectGroup()+"-"+ DateUtils.lastTwoDigits() +"-"+tProjectMeeting.getMeetingType()+"-"+ String.format("%03d",number+1));
- }else{
- int number = tProjectMeetingService.selectTProjectMeetingCode(DateUtils.dateTimeNow("YYYY"));
- tProjectMeeting.setMeetingCode(DateUtils.dateNow()+ String.format("%03d",number+1));
- }
- // todo 保存附件信息
- tUnifyFileService.insertTUnifyFileList(tProjectMeeting.getListFile(),
- tProjectMeeting.getProjectPoolId(),
- tProjectMeeting.getId(),//会议ID
- String.valueOf(FileType.MEETING.ordinal()),//文件类型:会议
- userInfo.getNickName());
- if(StringUtils.isNotBlank(tProjectMeeting.getMeetingTheme())) {
- // todo 增加会议创建记录
- tProjectCirculationService.insertTProjectCirculation(tProjectMeeting.getProjectPoolId(), tProjectMeeting.getMeetingTheme() + "(会议)", userInfo.getNickName());
- }
- // todo 发送短信-参与人-发起人
- if(tProjectMeeting.getMeetingType().equals("LX") || tProjectMeeting.getMeetingType().equals("TJ")){
- // todo 参与人
- /*if(StringUtils.isNotEmpty(tProjectMeeting.getParticipantsId())){
- StringUtils.str2List(tProjectMeeting.getParticipantsId(),",",true,true).stream().forEach(str -> {
- SysUser user = sysUserService.selectUserById(Long.valueOf(str));
- String contents = "您好," + user.getNickName() + ",兹定于 " +
- DateUtils.parseDateToStr("yyyy/MM/dd HH:mm",tProjectMeeting.getStartTime()) + "至" + DateUtils.parseDateToStr("yyyy/MM/dd HH:mm",tProjectMeeting.getEndTime()) +
- "在" + tProjectMeeting.getPlace() + "召开" + tProjectMeeting.getMeetingTheme() + "会议,请提前做好准备按时参加。";
- try {
- SmsSenderUtils.sendSms(user.getPhonenumber(),contents);
- } catch (IOException e) {
- logger.error("短信发送失败"+e.getMessage());
- }
- });
- }*/
- // todo 发起人
- /*if(StringUtils.isNotEmpty(tProjectMeeting.getPromoterId())){
- SysUser user = sysUserService.selectUserById(Long.valueOf(tProjectMeeting.getPromoterId()));
- String contents = "您好," + user.getNickName() + ",兹定于 " +
- DateUtils.parseDateToStr("yyyy/MM/dd HH:mm",tProjectMeeting.getStartTime()) + "至" + DateUtils.parseDateToStr("yyyy/MM/dd HH:mm",tProjectMeeting.getEndTime()) +
- "在" + tProjectMeeting.getPlace() + "召开" + tProjectMeeting.getMeetingTheme() + "会议,请提前做好准备按时参加。";
- try {
- SmsSenderUtils.sendSms(user.getPhonenumber(),contents);
- } catch (IOException e) {
- logger.error("短信发送失败"+e.getMessage());
- }
- }*/
- }
- tProjectMeetingService.insertTProjectMeeting(tProjectMeeting);
- }
- //上传打分表
- if("decision".equals(task.getTaskDefinitionKey())){
- tProjectScoring.setCreateBy(userInfo.getNickName());
- tProjectScoring.setProjectPoolId(tProjectDecision.getProjectPoolId());
- // todo 增加项目创建记录
- tProjectCirculationService.insertTProjectCirculation(tProjectScoring.getProjectPoolId(),"上传打分表", userInfo.getNickName());
- tProjectScoringService.insertTProjectScoring(tProjectScoring);
- }
- if("president".equals(task.getTaskDefinitionKey())){
- tProjectPool.setProjectStage("5");//项目阶段-项目投决
- tProjectPool.setProjectState("i");//项目状态-项目投决通过
- }
- //FlowBaseInfo flow = new FlowBaseInfo();
- if(flow==null){
- flow = new FlowBaseInfo();
- }
- flow.setId(UUIDGenerator.uuid());
- flow.setFormProperties(flowService.getFormProperties(fpMap, request.getParameterMap()));
- flow.setStatus(FlowStatusEnum.RUNNING.getName());
- flow.setProcDefId(task.getProcessDefinitionId());
- flow.setProcInsId(task.getProcessInstanceId());
- flow.setTaskDefKey(task.getTaskDefinitionKey());
- String isOk = tProjectDecision.isFlag() ? "[同意]" : "[驳回]";
- if ("modifyApply".equals(task.getTaskDefinitionKey())) {
- tProjectDecision.setStatus(tProjectDecision.isFlag() ? 1 : 4);
- isOk = tProjectDecision.isFlag() ? "[提交]" : "[关闭]";
- } else {
- tProjectDecision.setStatus(tProjectDecision.isFlag() ? 2 : 0);
- if("president".equals(task.getTaskDefinitionKey())){//总裁室
- if(!tProjectDecision.isFlag()&&StringUtils.isNotBlank(tProjectDecision.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
- isOk= "[关闭]";
- }
- }
- }
- if (null != flow.getComment()) {
- flow.setComment(isOk + flow.getComment());
- } else {
- flow.setComment(isOk);
- }
- flow.setTaskName(task.getName());
- flow.setCreateBy(SecurityUtils.getLoginUser().getUserId().toString());
- ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).active().singleResult();
- // 表示流程已经审批结束了
- if (processInstance == null) {
- flow.setStatus(FlowStatusEnum.ENDED.getName());
- if (!"modifyApply".equals(task.getTaskDefinitionKey())&&!"president".equals(task.getTaskDefinitionKey())) {
- tProjectDecision.setStatus(3);
- tProjectPool.setProjectStage("6");//项目阶段-项目签约
- tProjectPool.setProjectState("j");//项目状态-签约协议沟通中
- tProjectPool.setUpdateBy(userInfo.getNickName());
- tProjectPool.setDecisionDate(new Date());//投决通过日期
- // todo 增加项目创建记录
- tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(),"项目投决完成", userInfo.getNickName());
- }else{
- tProjectPool.setProjectStage("5");//项目阶段-项目投决
- tProjectPool.setProjectState("c");//项目状态-
- tProjectPool.setDecisionFlag("0");
- tProjectPool.setUpdateBy(userInfo.getNickName());
- if("president".equals(task.getTaskDefinitionKey())){//终止和观望
- if(StringUtils.isNotBlank(tProjectDecision.getIsTerminate())) {
- tProjectDecision.setStatus(4);//流程状态为关闭
- if ("1".equals(tProjectDecision.getIsTerminate())) {
- tProjectPool.setProjectStatus("1");//终止
- } else {
- tProjectPool.setProjectStatus("2");//观望
- }
- }
- }
- }
- tProjectPoolService.updateTProjectPool(tProjectPool);
- }
- tProjectDecisionService.updateTProjectDecision(tProjectDecision);
- activitiBaseInfoService.addActivitiBaseInfo(flow);
- }
- return AjaxResult.success();
- }
- public TProjectMeeting selectTProjectMeetingByProcInstId(String pInstId){
- TProjectDecision tProjectDecision=this.selectTProjectDecisionByProcInstId(pInstId);
- TProjectMeeting tProjectMeeting=null;
- if(tProjectDecision!=null){
- tProjectMeeting=tProjectMeetingService.selectTProjectMeetingByProjectPoolId(tProjectDecision.getProjectPoolId());
- }
- return tProjectMeeting;
- }
- /**
- * 根据流程Id查询汇总分数和平均分数
- * @param pInstId
- * @return
- */
- @Override
- public Map<String, String> selectSumScore(String pInstId) {
- TProjectDecision tProjectDecision=this.selectTProjectDecisionByProcInstId(pInstId);
- Map<String, String> sumScore=new HashMap<>();
- if(tProjectDecision!=null){
- TProjectMeeting tProjectMeeting=tProjectMeetingService.selectTProjectMeetingByProjectPoolId(tProjectDecision.getProjectPoolId());
- sumScore=tProjectScoringMapper.selectMeetingId(tProjectMeeting.getId());
- }
- return sumScore;
- }
- }
|