feat:批量审批
This commit is contained in:
1 parent
645240e656
commit
b28f934faa
11 files changed
+564
-330
No files matched your search
+28
@@ -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<String> processInstances;
|
||||
|
||||
/**
|
||||
* 任务本地变量
|
||||
*/
|
||||
private Map<String, Object> taskLocalParamMap;
|
||||
|
||||
|
||||
/**
|
||||
* 是否成功 1是 0否
|
||||
*/
|
||||
private String isSuccess;
|
||||
|
||||
}
|
||||
+3
-2
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+62
-48
@@ -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();
|
||||
|
||||
}
|
||||
+325
-279
@@ -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<IndexPageStatistics> indexPageStatisticsR = flowEngineService
|
||||
.querySimpleData(SecurityUtils.getUser().getId());
|
||||
/**
|
||||
* 查询首页数据看板
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public R queryTaskData() {
|
||||
R<IndexPageStatistics> 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<TaskResultDto> r = flowEngineService.queryTask(taskId, userId);
|
||||
|
||||
R<TaskResultDto> 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<String, Object> 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<String, Object> 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<String, Object> collect = objectMapper.readValue(data, new TypeReference<>() {
|
||||
});
|
||||
paramMap.putAll(collect);
|
||||
|
||||
if (processNodeRecordAssignUser != null) {
|
||||
String data = processNodeRecordAssignUser.getData();
|
||||
if (StrUtil.isNotBlank(data)) {
|
||||
Map<String, Object> collect = objectMapper.readValue(data, new TypeReference<>() {
|
||||
});
|
||||
paramMap.putAll(collect);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 当前节点数据
|
||||
Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData();
|
||||
Map<String, String> formPerms = node.getFormPerms();
|
||||
|
||||
}
|
||||
|
||||
// 当前节点数据
|
||||
Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData();
|
||||
Map<String, String> 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<FormItemVO> formItemVOList = JSONUtil.toList(oaForms.getFormItems(), FormItemVO.class);
|
||||
for (FormItemVO formItemVO : formItemVOList) {
|
||||
List<FormItemVO> 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<Map<String, Object>> subParamList = MapUtil.get(paramMap, id,
|
||||
new cn.hutool.core.lang.TypeReference<>() {
|
||||
});
|
||||
|
||||
Object value = formItemVO.getProps().getValue();
|
||||
|
||||
List<List<FormItemVO>> l = new ArrayList<>();
|
||||
for (Map<String, Object> map : subParamList) {
|
||||
List<FormItemVO> 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<FormItemVO> 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<String> 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<String> getAllStopProcessInstanceIdList(String processInstanceId) {
|
||||
List<ProcessInstanceRecord> list = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId)
|
||||
.list();
|
||||
|
||||
List<String> collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList());
|
||||
|
||||
for (ProcessInstanceRecord processInstanceRecord : list) {
|
||||
List<String> 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<Map<String, Object>> subParamList = MapUtil.get(paramMap, id,
|
||||
new cn.hutool.core.lang.TypeReference<>() {
|
||||
});
|
||||
|
||||
Object value = formItemVO.getProps().getValue();
|
||||
|
||||
List<List<FormItemVO>> l = new ArrayList<>();
|
||||
for (Map<String, Object> map : subParamList) {
|
||||
List<FormItemVO> 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<FormItemVO> 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<String, Object> taskMap = (Map<String, Object>) queryTask(taskDto.getTaskId(), false).getData();
|
||||
List<FormItemVO> formItems = (List<FormItemVO>) taskMap.get("formItems");
|
||||
Map<String, Object> 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<String, Object> 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<String> 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<String> getAllStopProcessInstanceIdList(String processInstanceId) {
|
||||
List<ProcessInstanceRecord> list = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId)
|
||||
.list();
|
||||
|
||||
List<String> collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList());
|
||||
|
||||
for (ProcessInstanceRecord processInstanceRecord : list) {
|
||||
List<String> allStopProcessInstanceIdList = getAllStopProcessInstanceIdList(
|
||||
processInstanceRecord.getProcessInstanceId());
|
||||
|
||||
collect.addAll(allStopProcessInstanceIdList);
|
||||
|
||||
}
|
||||
return collect;
|
||||
}
|
||||
|
||||
}
|
||||
+19
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+17
@@ -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;
|
||||
}
|
||||
+37
@@ -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<DoorRegisterVo> register(@RequestBody DoorRegisterDto dto) {
|
||||
return R.ok(thirdDoorApiService.register(dto));
|
||||
}
|
||||
/* ************************************* end 原创调用 end ************************************* */
|
||||
|
||||
}
|
||||
+15
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
+36
@@ -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;
|
||||
}
|
||||
}
|
||||
+12
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
-1
@@ -68,4 +68,13 @@ zy:
|
||||
# token key
|
||||
# self_token_key: zy_token
|
||||
# token
|
||||
# self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ
|
||||
# self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ
|
||||
|
||||
# 智能柜
|
||||
door:
|
||||
base-url: https://www.365e-life.net:8443/bkopenapi
|
||||
app-id:
|
||||
self-base-url:
|
||||
|
||||
# 旷世识别
|
||||
|
||||
Reference in new issue
Block a user