|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
package org.springblade.plugin.operation.workorder.service.impl; |
|
|
|
|
|
|
|
|
|
import com.alibaba.nacos.common.utils.CollectionUtils; |
|
|
|
|
import com.alibaba.nacos.common.utils.StringUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
|
@ -8,16 +9,23 @@ import org.flowable.engine.HistoryService; |
|
|
|
|
import org.flowable.engine.RuntimeService; |
|
|
|
|
import org.flowable.engine.TaskService; |
|
|
|
|
import org.flowable.engine.history.HistoricProcessInstance; |
|
|
|
|
import org.flowable.engine.history.HistoricProcessInstanceQuery; |
|
|
|
|
import org.flowable.task.api.Task; |
|
|
|
|
import org.flowable.task.api.TaskQuery; |
|
|
|
|
import org.flowable.variable.api.history.HistoricVariableInstance; |
|
|
|
|
import org.springblade.core.mp.support.Query; |
|
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
import org.springblade.plugin.operation.workorder.entity.WorkOrder; |
|
|
|
|
import org.springblade.plugin.operation.workorder.service.IWorkOrderService; |
|
|
|
|
import org.springblade.plugin.workflow.core.utils.WfTaskUtil; |
|
|
|
|
import org.springblade.plugin.workflow.process.model.WfProcess; |
|
|
|
|
import org.springblade.system.user.feign.IUserClient; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.time.Duration; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @Description |
|
|
|
|
@ -30,34 +38,45 @@ public class WorkOrderServiceImpl implements IWorkOrderService { |
|
|
|
|
private final TaskService taskService; |
|
|
|
|
private final HistoryService historyService; |
|
|
|
|
private final RuntimeService runtimeService; |
|
|
|
|
private final IUserClient userClient; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public IPage<WorkOrder> historyWorkOrder(WorkOrder workOrder, Query query) { |
|
|
|
|
IPage<WorkOrder> page = new Page<>(); |
|
|
|
|
public IPage<Map<String, Object>> historyWorkOrder(WorkOrder workOrder, Query query) { |
|
|
|
|
IPage<Map<String, Object>> page = new Page<>(); |
|
|
|
|
|
|
|
|
|
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery() |
|
|
|
|
.orderByProcessInstanceDuration() |
|
|
|
|
.orderByProcessInstanceStartTime() |
|
|
|
|
.desc() |
|
|
|
|
// .processInstanceTenantId(WfTaskUtil.getTenantId())
|
|
|
|
|
.listPage((query.getCurrent() - 1) * query.getSize(), (query.getCurrent() - 1) * query.getSize() + query.getSize()); |
|
|
|
|
.processInstanceTenantId(WfTaskUtil.getTenantId()) |
|
|
|
|
.listPage((query.getCurrent() - 1) * query.getSize(), query.getSize()); |
|
|
|
|
|
|
|
|
|
List<WorkOrder> workOrders = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> workOrders = new ArrayList<>(); |
|
|
|
|
if (CollectionUtils.isNotEmpty(list)) { |
|
|
|
|
for (HistoricProcessInstance historicProcessInstance : list) { |
|
|
|
|
Map<String, Object> variables = historicProcessInstance.getProcessVariables(); |
|
|
|
|
WorkOrder order = new WorkOrder(); |
|
|
|
|
order.setTaskType(variables.get("$renwuzhonglei").toString()); |
|
|
|
|
order.setTaskParent(variables.get("renwufulei").toString()); |
|
|
|
|
order.setOperationModule(variables.get("xitongmokuaishujubiao").toString()); |
|
|
|
|
order.setCurrentResponsiblePerson(""); |
|
|
|
|
order.setDept(variables.get("$quanlibumen").toString()); |
|
|
|
|
order.setCompany(variables.get("yunweigongsi").toString()); |
|
|
|
|
order.setSponsor(variables.get("applyUser").toString()); |
|
|
|
|
order.setApprovalStatus(variables.get("").toString()); |
|
|
|
|
order.setCreateTime(historicProcessInstance.getStartTime()); |
|
|
|
|
order.setEndTime(historicProcessInstance.getEndTime()); |
|
|
|
|
order.setExpectedCompletionTime(variables.get("qiwangwanchengshijian").toString()); |
|
|
|
|
workOrders.add(order); |
|
|
|
|
Map<String, Object> varMap = new HashMap<>(); |
|
|
|
|
List<HistoricVariableInstance> historicVars = historyService.createHistoricVariableInstanceQuery() |
|
|
|
|
.processInstanceId(historicProcessInstance.getId()).list(); |
|
|
|
|
historicVars.forEach(var -> |
|
|
|
|
varMap.put(var.getVariableName(), var.getValue())); |
|
|
|
|
|
|
|
|
|
Task task = taskService.createTaskQuery().processInstanceId(historicProcessInstance.getId()).singleResult(); |
|
|
|
|
if (task != null) { |
|
|
|
|
if (task.getAssignee() != null) { |
|
|
|
|
varMap.put("currentResponsiblePerson", userClient.userInfoById(Long.parseLong(task.getAssignee())).getData().getRealName()); |
|
|
|
|
} else { |
|
|
|
|
varMap.put("currentResponsiblePerson", "--"); |
|
|
|
|
} |
|
|
|
|
varMap.put("status", "进行中"); |
|
|
|
|
} else { |
|
|
|
|
varMap.put("currentResponsiblePerson", "--"); |
|
|
|
|
varMap.put("status", "已完成"); |
|
|
|
|
} |
|
|
|
|
varMap.put("startTime", historicProcessInstance.getStartTime()); |
|
|
|
|
varMap.put("endTime", historicProcessInstance.getEndTime()); |
|
|
|
|
varMap.put("startUserId", userClient.userInfoById(Long.parseLong(historicProcessInstance.getStartUserId())).getData().getRealName()); |
|
|
|
|
workOrders.add(varMap); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -65,7 +84,7 @@ public class WorkOrderServiceImpl implements IWorkOrderService { |
|
|
|
|
page.setRecords(workOrders); |
|
|
|
|
// 总条数
|
|
|
|
|
page.setTotal(historyService.createHistoricProcessInstanceQuery() |
|
|
|
|
// .processInstanceTenantId(WfTaskUtil.getTenantId())
|
|
|
|
|
.processInstanceTenantId(WfTaskUtil.getTenantId()) |
|
|
|
|
.orderByProcessInstanceDuration().desc().list().size()); |
|
|
|
|
// 当前页数
|
|
|
|
|
page.setCurrent(query.getCurrent()); |
|
|
|
|
@ -73,4 +92,116 @@ public class WorkOrderServiceImpl implements IWorkOrderService { |
|
|
|
|
page.setSize(query.getSize()); |
|
|
|
|
return page; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public IPage<WorkOrder> myToDo(WorkOrder workOrder, Query query) { |
|
|
|
|
IPage<WorkOrder> page = new Page<>(); |
|
|
|
|
|
|
|
|
|
String taskUser = WfTaskUtil.getTaskUser(); |
|
|
|
|
String taskGroup = WfTaskUtil.getCandidateGroup(); |
|
|
|
|
//当前获取登录人deptid
|
|
|
|
|
String deptId = AuthUtil.getDeptId(); |
|
|
|
|
List<Long> nowUserDepts = Func.toLongList(deptId); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TaskQuery taskQuery = taskService.createTaskQuery() |
|
|
|
|
.orderByTaskCreateTime() |
|
|
|
|
.desc() |
|
|
|
|
.taskTenantId(WfTaskUtil.getTenantId()) |
|
|
|
|
.active(); |
|
|
|
|
// taskQuery.taskCandidateOrAssigned(taskUser)
|
|
|
|
|
// .taskCandidateGroupIn(Func.toStrList(taskGroup));
|
|
|
|
|
|
|
|
|
|
// List<Task> listNeedDo = taskQuery.listPage((query.getCurrent() - 1) * query.getSize(), query.getSize());
|
|
|
|
|
List<Task> listNeedDo = taskQuery.list(); |
|
|
|
|
|
|
|
|
|
List<WorkOrder> workOrders = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for(Task task : listNeedDo){ |
|
|
|
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); |
|
|
|
|
WorkOrder order = new WorkOrder(); |
|
|
|
|
String executionId = task.getExecutionId(); |
|
|
|
|
System.out.println("executionid--" + executionId); |
|
|
|
|
Map<String, Object> variables = runtimeService.getVariables(task.getExecutionId()); |
|
|
|
|
|
|
|
|
|
order.setTaskType(variables.get("renwuzhonglei").toString()); |
|
|
|
|
order.setTaskParent(variables.get("renwufulei").toString()); |
|
|
|
|
order.setOperationModule(variables.get("xitongmingchengshujuku").toString()); |
|
|
|
|
order.setCurrentResponsiblePerson(task.getAssignee()); |
|
|
|
|
order.setDept(variables.get("$guanlibumen").toString()); |
|
|
|
|
order.setCompany(variables.get("yunweigongsi").toString()); |
|
|
|
|
order.setSponsor(userClient.userInfoById(Long.parseLong(historicProcessInstance.getStartUserId())).getData().getRealName()); |
|
|
|
|
order.setApprovalStatus("未完成"); |
|
|
|
|
order.setCreateTime(historicProcessInstance.getStartTime()); |
|
|
|
|
order.setEndTime(historicProcessInstance.getEndTime()); |
|
|
|
|
order.setExpectedCompletionTime(variables.get("qiwangwanchengshijian").toString()); |
|
|
|
|
order.setTaskId(task.getId()); |
|
|
|
|
order.setProcessInsId(task.getProcessInstanceId()); |
|
|
|
|
workOrders.add(order); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务父类
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getTaskParent().equals(workOrder.getTaskParent())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务种类
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getTaskType().equals(workOrder.getTaskType())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 当前责任人
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getCurrentResponsiblePerson().equals(workOrder.getCurrentResponsiblePerson())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 管理部门
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getDept().equals(workOrder.getDept())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务级别
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getTaskType().equals(workOrder.getTaskType())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 审批状态
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getApprovalStatus().equals(workOrder.getApprovalStatus())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 发起人
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> s.getSponsor().equals(workOrder.getSponsor())).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 创建时间范围
|
|
|
|
|
if (StringUtils.isNotBlank(workOrder.getTaskType())) { |
|
|
|
|
workOrders = workOrders.stream().filter(s -> (s.getCreateTime().after(workOrder.getStartTime())) && (s.getCreateTime().before(workOrder.getEndTime()))).collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 分页
|
|
|
|
|
workOrders = workOrders.stream().skip((query.getCurrent() - 1) * query.getSize()).limit(query.getSize()).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// 排序
|
|
|
|
|
workOrders = workOrders.stream().sorted(Comparator.comparing(WorkOrder::getCreateTime).reversed()).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// 数据
|
|
|
|
|
page.setRecords(workOrders); |
|
|
|
|
|
|
|
|
|
// 总条数
|
|
|
|
|
page.setTotal(taskService.createTaskQuery() |
|
|
|
|
.orderByTaskCreateTime() |
|
|
|
|
.desc() |
|
|
|
|
.taskTenantId(WfTaskUtil.getTenantId()) |
|
|
|
|
.active().count()); |
|
|
|
|
|
|
|
|
|
// 当前页数
|
|
|
|
|
page.setCurrent(query.getCurrent()); |
|
|
|
|
|
|
|
|
|
// 当前条数
|
|
|
|
|
page.setSize(query.getSize()); |
|
|
|
|
return page; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|