diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCreateApi.java b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCreateApi.java index fb391c158d90342a7b11e0420da0089bdc58f8cb..0d8eee87e2a20f1a2d85d9d590317eda5dbf97bd 100644 --- a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCreateApi.java +++ b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCreateApi.java @@ -48,7 +48,8 @@ public class ProcessTaskCreateApi extends PrivateApiComponentBase { @Param(name = "filePathList", type = ApiParamType.JSONARRAY, desc = "common.filepathlist"), @Param(name = "fileIdList", type = ApiParamType.JSONARRAY, desc = "common.fileidlist"), @Param(name = "handlerStepInfo", type = ApiParamType.JSONOBJECT, desc = "term.itsm.handlerstepinfo"), - @Param(name = "source", type = ApiParamType.STRING, desc = "common.source") + @Param(name = "source", type = ApiParamType.STRING, desc = "common.source"), + @Param(name = "isAsync", type = ApiParamType.INTEGER, rule="0,1", desc = "是否异步模式") }) @Output({ @Param(name = "processTaskId", type = ApiParamType.LONG, desc = "term.itsm.processtaskid") diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftSaveApi.java b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftSaveApi.java index 19b0388f12841f4033fb7246877592f1ef2d25e9..d9134859d56460bdb48102f4b5ff10fd09d32439 100644 --- a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftSaveApi.java +++ b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftSaveApi.java @@ -165,7 +165,7 @@ public class ProcessTaskDraftSaveApi extends PrivateApiComponentBase { // if (indexHandler != null) { // indexHandler.createIndex(startProcessTaskStepVo.getProcessTaskId()); // } - return processTaskService.saveProcessTaskDraft(jsonObj); + return processTaskService.saveProcessTaskDraft(jsonObj, null); } } diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java index 0f8938c84469dadb03b0dc38ecc0a36a131db846..4a722cbe88ee26cb228b3e0506403824ece507d9 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java @@ -2,11 +2,14 @@ package neatlogic.module.process.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.asynchronization.thread.NeatLogicThread; import neatlogic.framework.asynchronization.threadlocal.UserContext; +import neatlogic.framework.asynchronization.threadpool.CachedThreadPool; import neatlogic.framework.common.constvalue.GroupSearch; import neatlogic.framework.common.constvalue.SystemUser; import neatlogic.framework.dao.mapper.UserMapper; import neatlogic.framework.dto.AuthenticationInfoVo; +import neatlogic.framework.dto.JwtVo; import neatlogic.framework.dto.UserVo; import neatlogic.framework.exception.user.UserNotFoundException; import neatlogic.framework.file.dao.mapper.FileMapper; @@ -34,10 +37,13 @@ import neatlogic.framework.process.exception.process.ProcessNotFoundException; import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepIllegalException; import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepOverOneException; import neatlogic.framework.service.AuthenticationInfoService; +import neatlogic.framework.util.SnowflakeUtil; import neatlogic.module.process.dao.mapper.ProcessMapper; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -46,6 +52,7 @@ import java.util.*; @Service public class ProcessTaskCreatePublicServiceImpl implements ProcessTaskCreatePublicService, IProcessTaskCreatePublicCrossoverService { + private Logger logger = LoggerFactory.getLogger(ProcessTaskCreatePublicServiceImpl.class); @Resource private ChannelMapper channelMapper; @@ -348,28 +355,64 @@ public class ProcessTaskCreatePublicServiceImpl implements ProcessTaskCreatePubl reporterUserVo = userMapper.getUserByUuid(reporterUserVo.getUuid()); } AuthenticationInfoVo authenticationInfoVo = authenticationInfoService.getAuthenticationInfo(userVo.getUuid()); - UserContext.init(reporterUserVo, authenticationInfoVo, SystemUser.SYSTEM.getTimezone()); + JwtVo jwtVo = UserContext.get().getJwtVo(); + UserContext.get().init(reporterUserVo, authenticationInfoVo, SystemUser.SYSTEM.getTimezone()).setJwtVo(jwtVo); } - //暂存 - //TODO isNeedValid 参数是否需要??? - paramObj.put("isNeedValid", 1); - JSONObject saveResultObj = processTaskService.saveProcessTaskDraft(paramObj); + Long processTaskId = null; + Integer isAsync = paramObj.getInteger("isAsync"); + if (Objects.equals(isAsync, 1)) { + Long newProcessTaskId = SnowflakeUtil.uniqueLong(); + NeatLogicThread neatLogicThread = new NeatLogicThread("PUBLIC_CREATE_PROCESSTASK_" + newProcessTaskId, true) { + @Override + protected void execute() { + try { + //暂存 + //TODO isNeedValid 参数是否需要??? + paramObj.put("isNeedValid", 1); + JSONObject saveResultObj = processTaskService.saveProcessTaskDraft(paramObj, newProcessTaskId); - //查询可执行下一 步骤 - Long processTaskId = saveResultObj.getLong("processTaskId"); - List nextStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(saveResultObj.getLong("processTaskStepId"), ProcessFlowDirection.FORWARD.getValue()); - if (nextStepIdList.isEmpty()) { - throw new ProcessTaskNextStepIllegalException(processTaskId); - } - if (nextStepIdList.size() != 1) { - throw new ProcessTaskNextStepOverOneException(processTaskId); - } - saveResultObj.put("nextStepId", nextStepIdList.get(0)); + //查询可执行下一 步骤 + Long processTaskId = saveResultObj.getLong("processTaskId"); + List nextStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(saveResultObj.getLong("processTaskStepId"), ProcessFlowDirection.FORWARD.getValue()); + if (nextStepIdList.isEmpty()) { + throw new ProcessTaskNextStepIllegalException(processTaskId); + } + if (nextStepIdList.size() != 1) { + throw new ProcessTaskNextStepOverOneException(processTaskId); + } + saveResultObj.put("nextStepId", nextStepIdList.get(0)); - //流转 - processTaskService.startProcessProcessTask(saveResultObj); + //流转 + processTaskService.startProcessProcessTask(saveResultObj); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + }; + CachedThreadPool.execute(neatLogicThread); + processTaskId = newProcessTaskId; + } else { + //暂存 + //TODO isNeedValid 参数是否需要??? + paramObj.put("isNeedValid", 1); + JSONObject saveResultObj = processTaskService.saveProcessTaskDraft(paramObj, null); + + //查询可执行下一 步骤 + processTaskId = saveResultObj.getLong("processTaskId"); + List nextStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(saveResultObj.getLong("processTaskStepId"), ProcessFlowDirection.FORWARD.getValue()); + if (nextStepIdList.isEmpty()) { + throw new ProcessTaskNextStepIllegalException(processTaskId); + } + if (nextStepIdList.size() != 1) { + throw new ProcessTaskNextStepOverOneException(processTaskId); + } + saveResultObj.put("nextStepId", nextStepIdList.get(0)); + + //流转 + processTaskService.startProcessProcessTask(saveResultObj); + } - result.put("processTaskId", saveResultObj.getString("processTaskId")); + result.put("processTaskId", processTaskId); return result; } } diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskService.java b/src/main/java/neatlogic/module/process/service/ProcessTaskService.java index 1720413285a2ebd38fd10e6b1114bb016a5557a8..25db927da90cc707e4d8327848b2814d23ffed64 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskService.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskService.java @@ -355,7 +355,7 @@ public interface ProcessTaskService { * @param jsonObj * @return */ - JSONObject saveProcessTaskDraft(JSONObject jsonObj) throws Exception; + JSONObject saveProcessTaskDraft(JSONObject jsonObj, Long newProcessTaskId) throws Exception; /** * 提交上报工单 diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java index c1d487308e87e11059a927d9ee0b6d7bd3232cab..813c005bc1f9701d902d1230cceb915a41358ac2 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java @@ -2277,7 +2277,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC * @return */ @Override - public JSONObject saveProcessTaskDraft(JSONObject jsonObj) throws Exception { + public JSONObject saveProcessTaskDraft(JSONObject jsonObj, Long newProcessTaskId) throws Exception { String channelUuid = jsonObj.getString("channelUuid"); if (channelMapper.checkChannelIsExists(channelUuid) == 0) { throw new ChannelNotFoundException(channelUuid); @@ -2384,7 +2384,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC processTaskStepDataVo.setFcu(UserContext.get().getUserUuid(true)); startProcessTaskStepVo.getParamObj().putAll(jsonObj); - handler.saveDraft(startProcessTaskStepVo); + handler.saveDraft(startProcessTaskStepVo, newProcessTaskId); processTaskStepDataVo.setData(jsonObj.toJSONString()); processTaskStepDataVo.setProcessTaskId(startProcessTaskStepVo.getProcessTaskId());