|
|
@@ -1,29 +1,41 @@ |
|
|
|
package com.ningdatech.pmapi.projectdeclared.manage; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.TypeReference; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
import com.ningdatech.basic.function.VUtils; |
|
|
|
import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum; |
|
|
|
import com.ningdatech.pmapi.common.helper.UserInfoHelper; |
|
|
|
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; |
|
|
|
import com.ningdatech.pmapi.organization.model.entity.DingOrganization; |
|
|
|
import com.ningdatech.pmapi.organization.service.IDingOrganizationService; |
|
|
|
import com.ningdatech.pmapi.projectdeclared.model.dto.ProjectConditionDTO; |
|
|
|
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO; |
|
|
|
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.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; |
|
|
|
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; |
|
|
|
import com.ningdatech.pmapi.user.util.LoginUserUtil; |
|
|
|
import com.wflow.bean.entity.WflowModels; |
|
|
|
import com.wflow.bean.entity.WflowOrgModels; |
|
|
|
import com.wflow.enums.OrgTypeEnum; |
|
|
|
import com.wflow.enums.ProcessDefTypeEnum; |
|
|
|
import com.wflow.exception.BusinessException; |
|
|
|
import com.wflow.service.OrgProcdefService; |
|
|
|
import com.wflow.workflow.bean.dto.OrgInfoDTO; |
|
|
|
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto; |
|
|
|
import com.wflow.workflow.bean.vo.ProcessStartParamsVo; |
|
|
|
import com.wflow.workflow.service.ProcessInstanceService; |
|
|
|
import com.wflow.workflow.service.ProcessModelService; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Objects; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
@@ -45,6 +57,14 @@ public class DefaultDeclaredProjectManage { |
|
|
|
private final IDingOrganizationService dingOrganizationService; |
|
|
|
private final OrgProcdefService orgProcdefService; |
|
|
|
|
|
|
|
private final ProcessModelService processModelService; |
|
|
|
|
|
|
|
private final ProcessInstanceService processService; |
|
|
|
|
|
|
|
private final IProjectInstService projectInstService; |
|
|
|
|
|
|
|
private final StateMachineUtils stateMachineUtils; |
|
|
|
|
|
|
|
//项目名称去重 |
|
|
|
public void checkDuplication(ProjectDTO project){ |
|
|
|
VUtils.isTrue(projectService.count(Wrappers.lambdaQuery(Project.class) |
|
|
@@ -120,4 +140,70 @@ public class DefaultDeclaredProjectManage { |
|
|
|
orgMap.put(OrgTypeEnum.TARGET_LABEL.name(),orgInfoDTO); |
|
|
|
return orgMap; |
|
|
|
} |
|
|
|
|
|
|
|
//直接提交预审方法 提取 在省级联审通过的时候 也可以用 |
|
|
|
public String directStartProcess(Project projectInfo){ |
|
|
|
UserInfoDetails userInfoDetails = LoginUserUtil.loginUserDetail(); |
|
|
|
Long userId = userInfoDetails.getUserId(); |
|
|
|
|
|
|
|
ProcessStartParamsVo params = new ProcessStartParamsVo(); |
|
|
|
params.setUser(buildUser(userId)); |
|
|
|
params.setProcessUsers(Collections.emptyMap()); |
|
|
|
//放入条件判断的项目字段 |
|
|
|
ProjectConditionDTO conditionDto = new ProjectConditionDTO(); |
|
|
|
BeanUtils.copyProperties(projectInfo, conditionDto); |
|
|
|
params.setFormData(JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference<Map<String, Object>>() { |
|
|
|
})); |
|
|
|
|
|
|
|
String regionCode = projectInfo.getAreaCode(); |
|
|
|
|
|
|
|
WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) |
|
|
|
.eq(WflowModels::getRegionCode, regionCode) |
|
|
|
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS.getCode()) |
|
|
|
.last("limit 1")); |
|
|
|
|
|
|
|
if (Objects.isNull(model)) { |
|
|
|
log.error("此 【{}】区域找不到 预审流程配置", regionCode); |
|
|
|
throw new BusinessException(String.format("此 【%s】区域找不到 预审流程配置", regionCode)); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 |
|
|
|
Map<String, OrgInfoDTO> orgModelMap = getOrgModelInfo(userId,projectInfo); |
|
|
|
String instanceId = processService.newStartProcess(model.getProcessDefId(),model.getFormId(), params,orgModelMap); |
|
|
|
log.info("提交预审项目成功 【{}】", instanceId); |
|
|
|
|
|
|
|
//保存预审项目 |
|
|
|
modifyProject(projectInfo, instanceId); |
|
|
|
|
|
|
|
return instanceId; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 提交预审项目 时 更新信息 |
|
|
|
* |
|
|
|
* @param project |
|
|
|
* @param instanceId |
|
|
|
*/ |
|
|
|
private void modifyProject(Project project, String instanceId) { |
|
|
|
//流程启动之后 入库项目 重要业务信息 用于列表查询 展示 |
|
|
|
try { |
|
|
|
project.setUpdateOn(LocalDateTime.now()); |
|
|
|
project.setInstCode(instanceId); |
|
|
|
//调用状态机 进入下一个通过状态 |
|
|
|
stateMachineUtils.pass(project); |
|
|
|
projectService.updateById(project); |
|
|
|
|
|
|
|
//保存项目和实例的关系 |
|
|
|
ProjectInst projectInst = new ProjectInst(); |
|
|
|
projectInst.setProjectId(project.getId()); |
|
|
|
projectInst.setInstCode(instanceId); |
|
|
|
projectInst.setCreatOn(LocalDateTime.now()); |
|
|
|
projectInst.setUpdateOn(LocalDateTime.now()); |
|
|
|
projectInst.setInstType(ProjectProcessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS.getCode()); |
|
|
|
projectInstService.save(projectInst); |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("提交预审 项目信息修改 错误 ", e); |
|
|
|
throw new BusinessException("提交预审 项目信息修改 错误 :" + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |