Просмотр исходного кода

初审人员 和 自动下一状态

master
PoffyZhang 1 год назад
Родитель
Сommit
1e11a6e2f3
3 измененных файлов: 111 добавлений и 0 удалений
  1. +18
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java
  2. +5
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectDetailVO.java
  3. +88
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/ProcessStartListener.java

+ 18
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java Просмотреть файл

@@ -32,10 +32,13 @@ import com.ningdatech.pmapi.organization.model.entity.DingOrganization;
import com.ningdatech.pmapi.organization.service.IDingOrganizationService;
import com.ningdatech.pmapi.projectdeclared.model.dto.DelayedApplyDTO;
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract;
import com.ningdatech.pmapi.projectdeclared.model.entity.PreInsAcceptancePerson;
import com.ningdatech.pmapi.projectdeclared.model.entity.Purchase;
import com.ningdatech.pmapi.projectdeclared.model.vo.ContractVO;
import com.ningdatech.pmapi.projectdeclared.model.vo.PreInsAcceptancePersonVO;
import com.ningdatech.pmapi.projectdeclared.model.vo.PurchaseVO;
import com.ningdatech.pmapi.projectdeclared.service.IContractService;
import com.ningdatech.pmapi.projectdeclared.service.IPreInsAcceptancePersonService;
import com.ningdatech.pmapi.projectdeclared.service.IPurchaseService;
import com.ningdatech.pmapi.projectdeclared.utils.GenerateProjectCodeUtil;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
@@ -97,6 +100,8 @@ public class ProjectLibManage {

private final IPurchaseService purchaseService;

private final IPreInsAcceptancePersonService acceptancePersonService;

public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) {
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req);
query.eq(Project::getNewest,Boolean.TRUE);
@@ -538,6 +543,11 @@ public class ProjectLibManage {
vo.setContract(BeanUtil.copyProperties(contract, ContractVO.class));

//查询初验信息
List<PreInsAcceptancePerson> acceptancePersons = acceptancePersonService.list(Wrappers.lambdaQuery(PreInsAcceptancePerson.class)
.eq(PreInsAcceptancePerson::getProjectId, projectId)
.orderByAsc(PreInsAcceptancePerson::getCreateOn));
vo.setAcceptancePersons(convertPersons(acceptancePersons));

//查询终验信息

//查询年度投资金额 要是已验收的项目
@@ -771,4 +781,12 @@ public class ProjectLibManage {

return PageVo.of(res,page.getTotal());
}

private List<PreInsAcceptancePersonVO> convertPersons(List<PreInsAcceptancePerson> acceptancePersons) {
if(CollUtil.isEmpty(acceptancePersons)){
return Collections.emptyList();
}

return acceptancePersons.stream().map(u -> BeanUtil.copyProperties(u,PreInsAcceptancePersonVO.class)).collect(Collectors.toList());
}
}

+ 5
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectDetailVO.java Просмотреть файл

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.ningdatech.pmapi.common.util.BizUtils;
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract;
import com.ningdatech.pmapi.projectdeclared.model.vo.ContractVO;
import com.ningdatech.pmapi.projectdeclared.model.vo.PreInsAcceptancePersonVO;
import com.ningdatech.pmapi.projectdeclared.model.vo.PurchaseVO;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum;
import io.swagger.annotations.ApiModel;
@@ -363,6 +364,10 @@ public class ProjectDetailVO {
@ApiModelProperty("采购信息")
private PurchaseVO purchase;

@ApiModelProperty("初审人员")
private List<PreInsAcceptancePersonVO> acceptancePersons;


public String getProjectTypeName() {
if (Objects.nonNull(this.projectType)) {
Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType))


+ 88
- 0
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/ProcessStartListener.java Просмотреть файл

@@ -0,0 +1,88 @@
package com.ningdatech.pmapi.scheduler.listener;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.BizConst;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst;
import com.ningdatech.pmapi.projectlib.service.IProjectInstService;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.wflow.workflow.notify.event.ProcessStartEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.HistoryService;
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
* 工作流开始 事件监听
*
* @author ZPF
* @return
* @since 2023/04/14 14:19
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ProcessStartListener {
private final TaskService taskService;
private final HistoryService historyService;
private final IProjectInstService projectInstService;

private final IProjectService projectService;

private final StateMachineUtils stateMachineUtils;

@Async
@EventListener
public void onApplicationEvent(ProcessStartEvent event) {
log.info("进入工作流开始 事件监听!{}", event.getInstCode());
String instCode = event.getInstCode();

log.info("instCode:{}", instCode);

//休息3秒
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}

//1.去查找 项目实例关系表
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
.eq(ProjectInst::getInstCode, instCode)
.last(BizConst.LIMIT_1));

if (Objects.isNull(projectInst)) {
return;
}

List<Task> tasks = taskService.createTaskQuery()
.processInstanceId(instCode)
.active()
.list();

List<HistoricTaskInstance> historyTasks = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(instCode)
.finished()
.list();

if (CollUtil.isEmpty(tasks) && CollUtil.isEmpty(historyTasks)) {
//如果真的没有实时任务和历史任务 那么说明 该项目没有人审批 需要去调用状态机
Long projectId = projectInst.getProjectId();
Project project = projectService.getNewProject(projectId);
stateMachineUtils.pass(project);
project.setUpdateOn(LocalDateTime.now());
projectService.updateById(project);
}
}
}

Загрузка…
Отмена
Сохранить