From b28f934faa07fb425c5e9af3f29f68082885c39d Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 8 Apr 2025 12:43:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=B9=E9=87=8F=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/task/dto/BatchCompleteTaskDto.java | 28 + .../flow/task/controller/TaskController.java | 5 +- .../flow/task/service/ITaskService.java | 110 ++-- .../task/service/impl/TaskServiceImpl.java | 604 ++++++++++-------- .../thirdparty/vo/door/DoorBaseVo.java | 19 + .../pjcloud/thirdparty/config/DoorConfig.java | 17 + .../door/ThirdDoorApiController.java | 37 ++ .../service/ThirdDoorApiService.java | 15 + .../impl/door/ThirdDoorApiServiceImpl.java | 36 ++ .../thirdparty/utils/door/api/DoorApi.java | 12 + .../src/main/resources/application.yml | 11 +- 11 files changed, 564 insertions(+), 330 deletions(-) create mode 100644 pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java new file mode 100644 index 000000000..7f983dbdb --- /dev/null +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.flow.task.dto; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + + +@Data +public class BatchCompleteTaskDto { + + /** + * 任务id + */ + private List processInstances; + + /** + * 任务本地变量 + */ + private Map taskLocalParamMap; + + + /** + * 是否成功 1是 0否 + */ + private String isSuccess; + +} diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java index 8853e6bce..9fb201efe 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.flow.task.controller; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.flow.task.dto.BatchCompleteTaskDto; import com.bsd.pjcloud.flow.task.dto.TaskParamDto; import com.bsd.pjcloud.flow.task.service.ITaskService; import lombok.RequiredArgsConstructor; @@ -63,8 +64,8 @@ public class TaskController { */ @SneakyThrows @PostMapping("batchCompleteTask") - public R batchCompleteTask(@RequestBody TaskParamDto completeParamDto) { - return taskService.completeTask(completeParamDto); + public R batchCompleteTask(@RequestBody BatchCompleteTaskDto dto) { + return R.ok(taskService.batchCompleteTask(dto)); } /** diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java index 8779c5894..be40dd881 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.flow.task.service; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.flow.task.dto.BatchCompleteTaskDto; import com.bsd.pjcloud.flow.task.dto.TaskParamDto; /** @@ -8,60 +9,73 @@ import com.bsd.pjcloud.flow.task.dto.TaskParamDto; */ public interface ITaskService { - /** - * 查询任务 - * @param taskId - * @param view - * @return - */ - R queryTask(String taskId, boolean view); + /** + * 查询任务 + * + * @param taskId + * @param view + * @return + */ + R queryTask(String taskId, boolean view); - /** - * 完成任务 - * @param taskParamDto - * @return - */ - R completeTask(TaskParamDto taskParamDto); + /** + * 完成任务 + * + * @param taskParamDto + * @return + */ + R completeTask(TaskParamDto taskParamDto); - /** - * 前加签 - * @param taskParamDto - * @return - */ - R delegateTask(TaskParamDto taskParamDto); + /** + * 批量完成任务 + */ + R batchCompleteTask(BatchCompleteTaskDto dto); - /** - * 加签完成任务 - * @param taskParamDto - * @return - */ - R resolveTask(TaskParamDto taskParamDto); + /** + * 前加签 + * + * @param taskParamDto + * @return + */ + R delegateTask(TaskParamDto taskParamDto); - /** - * 设置执行人 - * @param taskParamDto - * @return - */ - R setAssignee(TaskParamDto taskParamDto); + /** + * 加签完成任务 + * + * @param taskParamDto + * @return + */ + R resolveTask(TaskParamDto taskParamDto); - /** - * 结束流程 - * @param taskParamDto - * @return - */ - R stopProcessInstance(TaskParamDto taskParamDto); + /** + * 设置执行人 + * + * @param taskParamDto + * @return + */ + R setAssignee(TaskParamDto taskParamDto); - /** - * 退回 - * @param taskParamDto - * @return - */ - R back(TaskParamDto taskParamDto); + /** + * 结束流程 + * + * @param taskParamDto + * @return + */ + R stopProcessInstance(TaskParamDto taskParamDto); - /** - * 查询首页数据看板 - * @return - */ - R queryTaskData(); + /** + * 退回 + * + * @param taskParamDto + * @return + */ + R back(TaskParamDto taskParamDto); + + /** + * 查询首页数据看板 + * + * @return + */ + R queryTaskData(); } diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java index b0e03f9f3..86f021d66 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java @@ -4,8 +4,13 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Dict; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.flow.task.dto.*; import com.bsd.pjcloud.flow.task.entity.Process; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -15,10 +20,6 @@ import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowEngineService; import com.bsd.pjcloud.flow.task.constant.FormTypeEnum; import com.bsd.pjcloud.flow.task.constant.NodeStatusEnum; import com.bsd.pjcloud.flow.task.constant.ProcessInstanceConstant; -import com.bsd.pjcloud.flow.task.dto.IndexPageStatistics; -import com.bsd.pjcloud.flow.task.dto.Node; -import com.bsd.pjcloud.flow.task.dto.TaskParamDto; -import com.bsd.pjcloud.flow.task.dto.TaskResultDto; import com.bsd.pjcloud.flow.task.entity.ProcessCopy; import com.bsd.pjcloud.flow.task.entity.ProcessInstanceRecord; import com.bsd.pjcloud.flow.task.entity.ProcessNodeRecordAssignUser; @@ -31,6 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -40,299 +42,343 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class TaskServiceImpl implements ITaskService { - private final RemoteFlowEngineService flowEngineService; + private final RemoteFlowEngineService flowEngineService; - private final IProcessService processService; + private final IProcessService processService; - private final IProcessCopyService processCopyService; + private final IProcessCopyService processCopyService; - private final IProcessNodeDataService nodeDataService; + private final IProcessNodeDataService nodeDataService; - private final IProcessNodeRecordAssignUserService processNodeRecordAssignUserService; + private final IProcessNodeRecordAssignUserService processNodeRecordAssignUserService; - private final IProcessInstanceRecordService processInstanceRecordService; + private final IProcessInstanceRecordService processInstanceRecordService; - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - /** - * 查询首页数据看板 - * @return - */ - @Override - public R queryTaskData() { - R indexPageStatisticsR = flowEngineService - .querySimpleData(SecurityUtils.getUser().getId()); + /** + * 查询首页数据看板 + * + * @return + */ + @Override + public R queryTaskData() { + R indexPageStatisticsR = flowEngineService + .querySimpleData(SecurityUtils.getUser().getId()); - // 获取抄送任务 - Long copyCount = processCopyService.lambdaQuery() - .eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId()) - .count(); - indexPageStatisticsR.getData().setCopyNum(copyCount); - return indexPageStatisticsR; - } + // 获取抄送任务 + Long copyCount = processCopyService.lambdaQuery() + .eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId()) + .count(); + indexPageStatisticsR.getData().setCopyNum(copyCount); + return indexPageStatisticsR; + } + + /** + * 查询任务 + * + * @param taskId + * @param view + * @return + */ + @SneakyThrows + @Override + public R queryTask(String taskId, boolean view) { - /** - * 查询任务 - * @param taskId - * @param view - * @return - */ - @SneakyThrows - @Override - public R queryTask(String taskId, boolean view) { + long userId = SecurityUtils.getUser().getId(); - long userId = SecurityUtils.getUser().getId(); + R r = flowEngineService.queryTask(taskId, userId); - R r = flowEngineService.queryTask(taskId, userId); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } - if (!r.isOk()) { - return R.failed(r.getMsg()); - } + TaskResultDto taskResultDto = r.getData(); - TaskResultDto taskResultDto = r.getData(); + // 变量 + Map paramMap = taskResultDto.getVariableAll(); + // 是否是当前活动任务 + Boolean currentTask = taskResultDto.getCurrentTask(); + if (!currentTask) { + ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService.lambdaQuery() + .eq(ProcessNodeRecordAssignUser::getTaskId, taskId) + .eq(ProcessNodeRecordAssignUser::getUserId, userId) + .eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()) + .last("limit 1") + .orderByDesc(ProcessNodeRecordAssignUser::getEndTime) + .one(); - // 变量 - Map paramMap = taskResultDto.getVariableAll(); - // 是否是当前活动任务 - Boolean currentTask = taskResultDto.getCurrentTask(); - if (!currentTask) { - ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService.lambdaQuery() - .eq(ProcessNodeRecordAssignUser::getTaskId, taskId) - .eq(ProcessNodeRecordAssignUser::getUserId, userId) - .eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()) - .last("limit 1") - .orderByDesc(ProcessNodeRecordAssignUser::getEndTime) - .one(); + if (processNodeRecordAssignUser != null) { + String data = processNodeRecordAssignUser.getData(); + if (StrUtil.isNotBlank(data)) { + Map collect = objectMapper.readValue(data, new TypeReference<>() { + }); + paramMap.putAll(collect); - if (processNodeRecordAssignUser != null) { - String data = processNodeRecordAssignUser.getData(); - if (StrUtil.isNotBlank(data)) { - Map collect = objectMapper.readValue(data, new TypeReference<>() { - }); - paramMap.putAll(collect); + } + } + + } - } - } + // 当前节点数据 + Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData(); + Map formPerms = node.getFormPerms(); - } - - // 当前节点数据 - Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData(); - Map formPerms = node.getFormPerms(); - - Process oaForms = processService.getByFlowId(taskResultDto.getFlowId()); - if (oaForms == null) { - return R.failed("流程不存在"); - } + Process oaForms = processService.getByFlowId(taskResultDto.getFlowId()); + if (oaForms == null) { + return R.failed("流程不存在"); + } - List formItemVOList = JSONUtil.toList(oaForms.getFormItems(), FormItemVO.class); - for (FormItemVO formItemVO : formItemVOList) { + List formItemVOList = JSONUtil.toList(oaForms.getFormItems(), FormItemVO.class); + for (FormItemVO formItemVO : formItemVOList) { - String id = formItemVO.getId(); - - String perm = formPerms.get(id); - - if (StrUtil.isNotBlank(perm)) { - - formItemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(perm) - ? ProcessInstanceConstant.FormPermClass.READ : perm) : perm); - - } - else { - formItemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - if (formItemVO.getType().equals(FormTypeEnum.LAYOUT.getType())) { - // 明细 - - List> subParamList = MapUtil.get(paramMap, id, - new cn.hutool.core.lang.TypeReference<>() { - }); - - Object value = formItemVO.getProps().getValue(); - - List> l = new ArrayList<>(); - for (Map map : subParamList) { - List subItemList = Convert.toList(FormItemVO.class, value); - for (FormItemVO itemVO : subItemList) { - itemVO.getProps().setValue(map.get(itemVO.getId())); - - String permSub = formPerms.get(itemVO.getId()); - if (StrUtil.isNotBlank(permSub)) { - itemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(permSub) - ? ProcessInstanceConstant.FormPermClass.READ : permSub) : permSub); - - } - else { - itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - } - l.add(subItemList); - } - formItemVO.getProps().setValue(l); - { - List subItemList = Convert.toList(FormItemVO.class, value); - for (FormItemVO itemVO : subItemList) { - - String permSub = formPerms.get(itemVO.getId()); - if (StrUtil.isNotBlank(permSub)) { - - itemVO.setPerm(permSub); - - } - else { - itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - } - formItemVO.getProps().setOriForm(subItemList); - - } - - } - else { - formItemVO.getProps().setValue(paramMap.get(id)); - - } - - } - Dict set = Dict.create() - .set("processInstanceId", taskResultDto.getProcessInstanceId()) - .set("node", taskResultDto.getTaskNode()) - .set("process", oaForms.getProcess()) - .set("delegateAgain", taskResultDto.getDelegate()) - .set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING")) - - .set("formItems", formItemVOList); - - return R.ok(set); - } - - /** - * 完成任务 - * @param taskParamDto - * @return - */ - @Override - public R completeTask(TaskParamDto taskParamDto) { - long userId = SecurityUtils.getUser().getId(); - taskParamDto.setUserId(String.valueOf(userId)); - - R r = flowEngineService.completeTask(taskParamDto); - - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 前加签 - * @param taskParamDto - * @return - */ - @Transactional - @Override - public R delegateTask(TaskParamDto taskParamDto) { - - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - - R r = flowEngineService.delegateTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 加签完成任务 - * @param taskParamDto - * @return - */ - @Override - public R resolveTask(TaskParamDto taskParamDto) { - R r = flowEngineService.resolveTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 设置执行人 - * @param taskParamDto - * @return - */ - @Override - public R setAssignee(TaskParamDto taskParamDto) { - R r = flowEngineService.transferTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 结束流程 - * @param taskParamDto - * @return - */ - @Override - public R stopProcessInstance(TaskParamDto taskParamDto) { - - String processInstanceId = taskParamDto.getProcessInstanceId(); - - List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList(processInstanceId); - CollUtil.reverse(allStopProcessInstanceIdList); - allStopProcessInstanceIdList.add(processInstanceId); - - taskParamDto.setProcessInstanceIdList(allStopProcessInstanceIdList); - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - R r = flowEngineService.stopProcessInstance(taskParamDto); - - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 退回 - * @param taskParamDto - * @return - */ - @Override - public R back(TaskParamDto taskParamDto) { - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - R r = flowEngineService.back(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - private List getAllStopProcessInstanceIdList(String processInstanceId) { - List list = processInstanceRecordService.lambdaQuery() - .eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId) - .list(); - - List collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList()); - - for (ProcessInstanceRecord processInstanceRecord : list) { - List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList( - processInstanceRecord.getProcessInstanceId()); - - collect.addAll(allStopProcessInstanceIdList); - - } - return collect; - } + String id = formItemVO.getId(); + + String perm = formPerms.get(id); + + if (StrUtil.isNotBlank(perm)) { + + formItemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(perm) + ? ProcessInstanceConstant.FormPermClass.READ : perm) : perm); + + } else { + formItemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + if (formItemVO.getType().equals(FormTypeEnum.LAYOUT.getType())) { + // 明细 + + List> subParamList = MapUtil.get(paramMap, id, + new cn.hutool.core.lang.TypeReference<>() { + }); + + Object value = formItemVO.getProps().getValue(); + + List> l = new ArrayList<>(); + for (Map map : subParamList) { + List subItemList = Convert.toList(FormItemVO.class, value); + for (FormItemVO itemVO : subItemList) { + itemVO.getProps().setValue(map.get(itemVO.getId())); + + String permSub = formPerms.get(itemVO.getId()); + if (StrUtil.isNotBlank(permSub)) { + itemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(permSub) + ? ProcessInstanceConstant.FormPermClass.READ : permSub) : permSub); + + } else { + itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + } + l.add(subItemList); + } + formItemVO.getProps().setValue(l); + { + List subItemList = Convert.toList(FormItemVO.class, value); + for (FormItemVO itemVO : subItemList) { + + String permSub = formPerms.get(itemVO.getId()); + if (StrUtil.isNotBlank(permSub)) { + + itemVO.setPerm(permSub); + + } else { + itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + } + formItemVO.getProps().setOriForm(subItemList); + + } + + } else { + formItemVO.getProps().setValue(paramMap.get(id)); + + } + + } + Dict set = Dict.create() + .set("processInstanceId", taskResultDto.getProcessInstanceId()) + .set("node", taskResultDto.getTaskNode()) + .set("process", oaForms.getProcess()) + .set("delegateAgain", taskResultDto.getDelegate()) + .set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING")) + + .set("formItems", formItemVOList); + + return R.ok(set); + } + + /** + * 完成任务 + * + * @param taskParamDto + * @return + */ + @Override + public R completeTask(TaskParamDto taskParamDto) { + long userId = SecurityUtils.getUser().getId(); + taskParamDto.setUserId(String.valueOf(userId)); + + R r = flowEngineService.completeTask(taskParamDto); + + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + @Override + public R batchCompleteTask(BatchCompleteTaskDto dto) { + if (ObjectUtil.isEmpty(dto.getProcessInstances())) return R.failed(); + PjcloudUser user = SecurityUtils.getUser(); + TaskParamDto taskParamDto = new TaskParamDto(); + taskParamDto.setUserId(String.valueOf(user.getId())); + for (String v : dto.getProcessInstances()) { + TaskDto taskDto = flowEngineService.queryAssignTaskOne(v).getData(); + if (ObjectUtil.isEmpty(taskDto)) continue; + TaskParamDto currentTaskDto = BeanUtils.toBean(taskParamDto, TaskParamDto.class); + currentTaskDto.setTaskId(taskDto.getTaskId()); + currentTaskDto.setTaskLocalParamMap(dto.getTaskLocalParamMap()); + if (ObjectUtil.equals(dto.getIsSuccess(), YesNoEnum.YES.getCode())) { + Map taskMap = (Map) queryTask(taskDto.getTaskId(), false).getData(); + List formItems = (List) taskMap.get("formItems"); + Map paramsMap = new HashMap<>(); + for (FormItemVO i : formItems) { + if (ObjectUtil.isNotEmpty(i.getProps()) && ObjectUtil.isNotEmpty(i.getProps().getValue())) { + paramsMap.put(i.getId(), i.getProps().getValue()); + } + } + paramsMap.put(taskDto.getNodeId() + "_approve_condition", true); + currentTaskDto.setParamMap(paramsMap); + } else if (ObjectUtil.equals(dto.getIsSuccess(), YesNoEnum.NO.getCode())) { + Map errorParamsMap = new HashMap<>(); + errorParamsMap.put(taskDto.getNodeId() + "_approve_condition", false); + currentTaskDto.setParamMap(errorParamsMap); + } else { + continue; + } + try { + String data = flowEngineService.completeTask(currentTaskDto).getData(); + log.info("批量审批结果:{}", data); + } catch (Exception e) { + log.error("批量审批错误", e); + } + } + return null; + } + + /** + * 前加签 + * + * @param taskParamDto + * @return + */ + @Transactional + @Override + public R delegateTask(TaskParamDto taskParamDto) { + + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + + R r = flowEngineService.delegateTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 加签完成任务 + * + * @param taskParamDto + * @return + */ + @Override + public R resolveTask(TaskParamDto taskParamDto) { + R r = flowEngineService.resolveTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 设置执行人 + * + * @param taskParamDto + * @return + */ + @Override + public R setAssignee(TaskParamDto taskParamDto) { + R r = flowEngineService.transferTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 结束流程 + * + * @param taskParamDto + * @return + */ + @Override + public R stopProcessInstance(TaskParamDto taskParamDto) { + + String processInstanceId = taskParamDto.getProcessInstanceId(); + + List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList(processInstanceId); + CollUtil.reverse(allStopProcessInstanceIdList); + allStopProcessInstanceIdList.add(processInstanceId); + + taskParamDto.setProcessInstanceIdList(allStopProcessInstanceIdList); + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + R r = flowEngineService.stopProcessInstance(taskParamDto); + + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 退回 + * + * @param taskParamDto + * @return + */ + @Override + public R back(TaskParamDto taskParamDto) { + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + R r = flowEngineService.back(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + private List getAllStopProcessInstanceIdList(String processInstanceId) { + List list = processInstanceRecordService.lambdaQuery() + .eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId) + .list(); + + List collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList()); + + for (ProcessInstanceRecord processInstanceRecord : list) { + List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList( + processInstanceRecord.getProcessInstanceId()); + + collect.addAll(allStopProcessInstanceIdList); + + } + return collect; + } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java new file mode 100644 index 000000000..e50f3ba3d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java @@ -0,0 +1,19 @@ +package com.bsd.pjcloud.thirdparty.vo.door; + +import cn.hutool.core.util.ObjectUtil; +import lombok.Data; + +@Data +public class DoorBaseVo { + + static private Integer successCode = 20000; + + private Integer code; + + private String message; + + public boolean isSuccess() { + return ObjectUtil.equal(code, DoorBaseVo.successCode); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java new file mode 100644 index 000000000..b95b68892 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.thirdparty.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "door") +@Data +public class DoorConfig { + + private String baseUrl; + + private String appId; + + private String selfBaseUrl; +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java new file mode 100644 index 000000000..ada67b7fe --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.thirdparty.controller.door; + + +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-door") +@Tag(description = "third-door", name = "智能柜") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdDoorApiController { + + private final ThirdDoorApiService thirdDoorApiService; + + /* ************************************* start 原创调用 start ************************************* */ + @Inner + @Operation(summary = "本地一卡通交易数据同步") + @PostMapping("/register") + public R register(@RequestBody DoorRegisterDto dto) { + return R.ok(thirdDoorApiService.register(dto)); + } + /* ************************************* end 原创调用 end ************************************* */ + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java new file mode 100644 index 000000000..abd396d85 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.thirdparty.service; + + +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; + +public interface ThirdDoorApiService { + + /** + * 设备注册 + */ + DoorRegisterVo register(DoorRegisterDto dto); + + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java new file mode 100644 index 000000000..629b153d1 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java @@ -0,0 +1,36 @@ +package com.bsd.pjcloud.thirdparty.service.impl.door; + +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; +import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +@Service +@Validated +@Slf4j +@RequiredArgsConstructor +public class ThirdDoorApiServiceImpl implements ThirdDoorApiService { + + /** + * 设备注册 + */ + @Override + public DoorRegisterVo register(DoorRegisterDto dto) { + long startTime = System.currentTimeMillis(); + DoorApi.Api registerApi = DoorApi.REGISTER; + try { + String res = registerApi.getHttpRequest().body(JSONUtil.toJsonStr(dto)).execute().body(); + } catch (Exception e) { + + } finally { + + } + return null; + } +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java index 1ca75242f..c39af463c 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java @@ -1,6 +1,8 @@ package com.bsd.pjcloud.thirdparty.utils.door.api; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; import com.bsd.pjcloud.thirdparty.constant.ThordDoorApiTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -55,5 +57,15 @@ public class DoorApi { private String contentType; private ThordDoorApiTypeEnum type; + + public HttpRequest getHttpRequest() { + if (ObjectUtil.equals(method, "post")) { + return HttpRequest.post(url).contentType(contentType); + } else if (ObjectUtil.equals(method, "get")) { + return HttpRequest.get(url).contentType(contentType); + } else { + return null; + } + } } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml index 87ce99714..5824833b5 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -68,4 +68,13 @@ zy: # token key # self_token_key: zy_token # token - # self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ \ No newline at end of file + # self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ + +# 智能柜 +door: + base-url: https://www.365e-life.net:8443/bkopenapi + app-id: + self-base-url: + +# 旷世识别 +