diff --git a/src/main/java/neatlogic/module/process/api/processtask/RedoAsyncCreateProcessTaskApi.java b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/RedoAsyncCreateProcessTaskApi.java similarity index 94% rename from src/main/java/neatlogic/module/process/api/processtask/RedoAsyncCreateProcessTaskApi.java rename to src/main/java/neatlogic/module/process/api/processtask/asynccreate/RedoAsyncCreateProcessTaskApi.java index 4517e6c6344d500ba5c8ef71fb81b4719fd47645..230abcc8527ee0af853e613cfbcba505d14eae93 100644 --- a/src/main/java/neatlogic/module/process/api/processtask/RedoAsyncCreateProcessTaskApi.java +++ b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/RedoAsyncCreateProcessTaskApi.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package neatlogic.module.process.api.processtask; +package neatlogic.module.process.api.processtask.asynccreate; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.auth.core.AuthAction; @@ -72,9 +72,12 @@ public class RedoAsyncCreateProcessTaskApi extends PrivateApiComponentBase { Integer serverId = paramObj.getInteger("serverId"); if (id != null) { ProcessTaskAsyncCreateVo processTaskAsyncCreateVo = processTaskAsyncCreateMapper.getProcessTaskAsyncCreateById(id); - if (processTaskAsyncCreateVo != null && Objects.equals(processTaskAsyncCreateVo.getStatus(), "redo")) { + if (processTaskAsyncCreateVo != null + && (Objects.equals(processTaskAsyncCreateVo.getStatus(), "redo") + || Objects.equals(processTaskAsyncCreateVo.getStatus(), "failed")) + ) { Long processTaskId = processTaskAsyncCreateVo.getProcessTaskId(); - if (processTaskMapper.getProcessTaskById(processTaskId) == null) { + if (processTaskMapper.getProcessTaskById(processTaskId) != null) { return resultObj; } processTaskIdArray.add(processTaskId); diff --git a/src/main/java/neatlogic/module/process/api/processtask/asynccreate/SearchAsyncCreateProcessTaskApi.java b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/SearchAsyncCreateProcessTaskApi.java new file mode 100644 index 0000000000000000000000000000000000000000..3c39edb15e59c9ee4dad492a24e30a801f364aa8 --- /dev/null +++ b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/SearchAsyncCreateProcessTaskApi.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2024 深圳极向量科技有限公司 All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package neatlogic.module.process.api.processtask.asynccreate; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.common.dto.BasePageVo; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; +import neatlogic.framework.process.dto.ProcessTaskAsyncCreateVo; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.framework.util.TableResultUtil; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskAsyncCreateMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@Service +@AuthAction(action = PROCESSTASK_MODIFY.class) +@OperationType(type = OperationTypeEnum.SEARCH) +public class SearchAsyncCreateProcessTaskApi extends PrivateApiComponentBase { + + @Resource + private ProcessTaskAsyncCreateMapper processTaskAsyncCreateMapper; + + @Override + public String getName() { + return "nmpapa.searchasynccreateprocesstaskapi.getname"; + } + + @Input({ + @Param(name = "id", type = ApiParamType.LONG, desc = "id"), + @Param(name = "keyword", type = ApiParamType.STRING, desc = "common.keyword"), + @Param(name = "currentPage", type = ApiParamType.INTEGER, desc = "common.currentpage"), + @Param(name = "pageSize", type = ApiParamType.INTEGER, desc = "common.pagesize"), + }) + @Output({ + @Param(name = "tbodyList", explode = ProcessTaskAsyncCreateVo[].class, desc = "term.itsm.processtaskidlist"), + @Param(explode = BasePageVo.class) + }) + @Description(desc = "nmpapa.searchasynccreateprocesstaskapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + List tbodyList = new ArrayList<>(); + Long id = paramObj.getLong("id"); + if (id != null) { + ProcessTaskAsyncCreateVo processTaskAsyncCreateVo = processTaskAsyncCreateMapper.getProcessTaskAsyncCreateById(id); + if (processTaskAsyncCreateVo != null) { + tbodyList.add(processTaskAsyncCreateVo); + } + return TableResultUtil.getResult(tbodyList); + } + ProcessTaskAsyncCreateVo searchVo = paramObj.toJavaObject(ProcessTaskAsyncCreateVo.class); + int rowNum = processTaskAsyncCreateMapper.getProcessTaskAsyncCreateFailedCount(searchVo); + if (rowNum > 0) { + searchVo.setRowNum(rowNum); + tbodyList = processTaskAsyncCreateMapper.getProcessTaskAsyncCreateFailedList(searchVo); + return TableResultUtil.getResult(tbodyList, searchVo); + } + return TableResultUtil.getResult(tbodyList, searchVo); + } + + @Override + public String getToken() { + return "processtask/asynccreate/search"; + } +} diff --git a/src/main/java/neatlogic/module/process/api/processtask/asynccreate/UpdateAsyncCreateProcessTaskApi.java b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/UpdateAsyncCreateProcessTaskApi.java new file mode 100644 index 0000000000000000000000000000000000000000..21d7f9827f5bc1761f6961830c1e048ec356154c --- /dev/null +++ b/src/main/java/neatlogic/module/process/api/processtask/asynccreate/UpdateAsyncCreateProcessTaskApi.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2024 深圳极向量科技有限公司 All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package neatlogic.module.process.api.processtask.asynccreate; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; +import neatlogic.framework.process.dto.ProcessTaskAsyncCreateVo; +import neatlogic.framework.process.dto.ProcessTaskCreateVo; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskAsyncCreateMapper; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +@AuthAction(action = PROCESSTASK_MODIFY.class) +@OperationType(type = OperationTypeEnum.UPDATE) +public class UpdateAsyncCreateProcessTaskApi extends PrivateApiComponentBase { + + @Resource + private ProcessTaskAsyncCreateMapper processTaskAsyncCreateMapper; + + @Override + public String getName() { + return "nmpapa.updateasynccreateprocesstaskapi.getname"; + } + + @Input({ + @Param(name = "id", type = ApiParamType.LONG, isRequired = true, desc = "id"), + @Param(name = "processTaskId", type = ApiParamType.LONG, desc = "term.itsm.processtaskid"), + @Param(name = "title", type = ApiParamType.STRING, desc = "common.title"), + @Param(name = "status", type = ApiParamType.ENUM, rule = "failed,redo", desc = "common.status"), + @Param(name = "serverId", type = ApiParamType.INTEGER, desc = "term.framework.serverid"), + @Param(name = "config", type = ApiParamType.JSONOBJECT, desc = "common.config"), + }) + @Output({ + @Param(name = "Return", type = ApiParamType.BOOLEAN) + }) + @Description(desc = "nmpapa.updateasynccreateprocesstaskapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long id = paramObj.getLong("id"); + ProcessTaskAsyncCreateVo oldProcessTaskAsyncCreateVo = processTaskAsyncCreateMapper.getProcessTaskAsyncCreateById(id); + if (oldProcessTaskAsyncCreateVo == null) { + return false; + } + if (!Objects.equals(oldProcessTaskAsyncCreateVo.getStatus(), "failed") && !Objects.equals(oldProcessTaskAsyncCreateVo.getStatus(), "redo")) { + return false; + } + boolean flag = false; + ProcessTaskAsyncCreateVo processTaskAsyncCreateVo = new ProcessTaskAsyncCreateVo(); + processTaskAsyncCreateVo.setId(id); + Long processTaskId = paramObj.getLong("processTaskId"); + if (processTaskId != null && !Objects.equals(processTaskId, oldProcessTaskAsyncCreateVo.getProcessTaskId())) { + processTaskAsyncCreateVo.setProcessTaskId(processTaskId); + flag = true; + } + String title = paramObj.getString("title"); + if (StringUtils.isNotBlank(title) && !Objects.equals(title, oldProcessTaskAsyncCreateVo.getTitle())) { + processTaskAsyncCreateVo.setTitle(title); + flag = true; + } + String status = paramObj.getString("status"); + if (StringUtils.isNotBlank(status) && !Objects.equals(status, oldProcessTaskAsyncCreateVo.getStatus())) { + processTaskAsyncCreateVo.setStatus(status); + flag = true; + } + Integer serverId = paramObj.getInteger("serverId"); + if (serverId != null && !Objects.equals(serverId, oldProcessTaskAsyncCreateVo.getServerId())) { + processTaskAsyncCreateVo.setServerId(serverId); + flag = true; + } + JSONObject config = paramObj.getJSONObject("config"); + if (MapUtils.isNotEmpty(config) && !Objects.equals(config.toJSONString(), JSONObject.toJSONString(oldProcessTaskAsyncCreateVo.getConfig()))) { + ProcessTaskCreateVo processTaskCreateVo = config.toJavaObject(ProcessTaskCreateVo.class); + processTaskAsyncCreateVo.setConfig(processTaskCreateVo); + flag = true; + } + if (flag) { + processTaskAsyncCreateMapper.updateProcessTaskAsyncCreateForManualIntervention(processTaskAsyncCreateVo); + return true; + } + return false; + } + + @Override + public String getToken() { + return "processtask/asynccreate/update"; + } +} diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.java index f263d9f3e618bdcdb45ab158201cc293d313613f..24e51744bfd048d6d1f1d42292417bd0a39d80bd 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.java +++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.java @@ -30,10 +30,18 @@ public interface ProcessTaskAsyncCreateMapper extends IProcessTaskAsyncCreateCro int getProcessTaskAsyncCreateCount(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); + List getProcessTaskAsyncCreateFailedList(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); + + int getProcessTaskAsyncCreateFailedCount(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); + int insertProcessTaskAsyncCreate(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); int updateProcessTaskAsyncCreate(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); + int updateProcessTaskAsyncCreateStatusToDoingById(Long id); + + int updateProcessTaskAsyncCreateForManualIntervention(ProcessTaskAsyncCreateVo processTaskAsyncCreateVo); + int deleteProcessTaskAsyncCreateById(Long id); int deleteProcessTaskAsyncCreateByIdList(List idList); diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.xml index e217b59820403c55abcdc6ff525bfedca6c43b78..f4d2d1241ba123f93747ad0509522435eef235b4 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.xml +++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskAsyncCreateMapper.xml @@ -25,7 +25,8 @@ `processtask_id` AS processTaskId, `title`, `status`, - `config` AS configStr + `config` AS configStr, + `server_id` AS serverId FROM `processtask_async_create` WHERE `id` = #{value} @@ -51,6 +52,38 @@ AND `server_id` = #{serverId} + + + + INSERT INTO `processtask_async_create` ( `id`, @@ -87,6 +120,35 @@ WHERE `id` = #{id} + + UPDATE `processtask_async_create` + SET + `status` = 'doing' + WHERE `id` = #{id} + + + + UPDATE `processtask_async_create` + SET + + `processtask_id` = #{processTaskId}, + + + `title` = #{title}, + + + `status` = #{status}, + + + `server_id` = #{serverId}, + + + `config` = #{configStr}, + + `lcd` = NOW(3) + WHERE `id` = #{id} + + DELETE FROM `processtask_async_create` WHERE `id` = #{value} diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskAsyncCreateServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskAsyncCreateServiceImpl.java index 8a348767ee35d627c962e58fdf1938ff7deaa2a8..6e36c6e53724a9196e2de4c2ec1e711697c67e4b 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskAsyncCreateServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskAsyncCreateServiceImpl.java @@ -182,7 +182,7 @@ public class ProcessTaskAsyncCreateServiceImpl implements ProcessTaskAsyncCreate if (id == null) { return; } - + processTaskAsyncCreateMapper.updateProcessTaskAsyncCreateStatusToDoingById(id); boolean offer = blockingQueue.offer(id); if (!offer && logger.isDebugEnabled()) { logger.debug("异步创建工单数据加入队列失败, id: " + id);