历史工单和我的待办接口

main
litao 3 years ago
parent 0ed12af66e
commit 12970e4a33
  1. 54
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/controller/WorkOrderController.java
  2. 7
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/entity/WorkOrder.java
  3. 6
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/IWorkOrderService.java
  4. 181
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/impl/WorkOrderServiceImpl.java
  5. 5
      lab-service-api/lab-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  6. 4
      lab-service/lab-system/src/main/java/org/springblade/system/feign/SysClient.java
  7. 5
      lab-service/lab-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@ -1,21 +1,35 @@
package org.springblade.plugin.operation.workorder.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.flowable.engine.history.HistoricProcessInstance;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.plugin.operation.task.entity.TaskInfo;
import org.springblade.plugin.operation.task.service.ITaskInfoService;
import org.springblade.plugin.operation.workorder.entity.WorkOrder;
import org.springblade.plugin.operation.workorder.service.IWorkOrderService;
import org.springblade.plugin.workflow.process.model.WfProcess;
import org.springblade.system.entity.AuthClient;
import org.springblade.system.entity.Dept;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.feign.IUserClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 工单
*
* @Description
* @Author lt
* @Date 2023年2月17日09:46:45
@ -28,13 +42,51 @@ import org.springframework.web.bind.annotation.RestController;
public class WorkOrderController extends BladeController {
private final IWorkOrderService workOrderService;
private final ITaskInfoService taskInfoService;
private final ISysClient sysClient;
private final IUserClient userClient;
/**
* 历史工单
*/
@GetMapping("/historyWorkOrder")
public R<IPage<WorkOrder>> historyWorkOrder(WorkOrder workOrder, Query query) {
public R<IPage<Map<String, Object>>> historyWorkOrder(WorkOrder workOrder, Query query) {
return R.data(workOrderService.historyWorkOrder(workOrder, query));
}
/**
* 我的待办
*/
@GetMapping("/myToDo")
public R<IPage<WorkOrder>> myToDo(WorkOrder workOrder, Query query) {
return R.data(workOrderService.myToDo(workOrder, query));
}
/**
* 条件数据
*/
@GetMapping("/conditionalData")
public R<Map<String, Object>> conditionalData() {
Map<String, Object> map = new HashMap<>();
// 任务种类
List<TaskInfo> taskInfos = taskInfoService.list(Wrappers.<TaskInfo>lambdaQuery()
.select(TaskInfo::getTaskTypeName, TaskInfo::getId));
map.put("taskInfos", taskInfos);
// 当前责任人
// List<User> users = userClient.listDeptUserByCurrentUser(AuthUtil.getDeptId()).getData();
List<User> users = userClient.allUser().getData();
map.put("users", users);
// 管理部门
List<Dept> depts = sysClient.getDepts().getData();
map.put("depts", depts);
return R.data(map);
}
}

@ -39,4 +39,11 @@ public class WorkOrder {
// 期望完成时间
private String expectedCompletionTime;
private String taskId;
private String processInsId;
private Date startTime;
}

@ -7,6 +7,8 @@ import org.springblade.core.tool.api.R;
import org.springblade.plugin.operation.workorder.entity.WorkOrder;
import org.springblade.plugin.workflow.process.model.WfProcess;
import java.util.Map;
/**
* @Description
* @Author lt
@ -14,5 +16,7 @@ import org.springblade.plugin.workflow.process.model.WfProcess;
*/
public interface IWorkOrderService {
IPage<WorkOrder> historyWorkOrder(WorkOrder workOrder, Query query);
IPage<Map<String, Object>> historyWorkOrder(WorkOrder workOrder, Query query);
IPage<WorkOrder> myToDo(WorkOrder workOrder, Query query);
}

@ -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;
}
}

@ -37,6 +37,7 @@ public interface IUserClient {
String SELECT_USER_LIST = API_PREFIX + "/user-list";
String SELECT_ID_BY_ROLEIDS = API_PREFIX + "/select-id-by-roleids";
String USER_INFO_BY_NAME = API_PREFIX + "/user-name";
String ALL_USER = API_PREFIX + "/all-user";
/**
@ -49,6 +50,10 @@ public interface IUserClient {
R<User> userInfoById(@RequestParam("userId") Long userId);
@GetMapping(ALL_USER)
R<List<User>> allUser();
/**
* 根据账号获取用户信息
*

@ -2,11 +2,13 @@
package org.springblade.system.feign;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.system.entity.*;
import org.springblade.system.service.*;
import org.springblade.system.user.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
@ -190,7 +192,7 @@ public class SysClient implements ISysClient {
@Override
public R<List<Dept>> getDepts() {
return R.data(deptService.list());
return R.data(deptService.list(Wrappers.<Dept>lambdaQuery().select(Dept::getId,Dept::getDeptName)));
}
}

@ -39,6 +39,11 @@ public class UserClient implements IUserClient {
return R.data(service.getById(userId));
}
@Override
public R<List<User>> allUser() {
return R.data(service.list(Wrappers.<User>lambdaQuery().select(User::getRealName, User::getId)));
}
@Override
@GetMapping(USER_INFO_BY_ACCOUNT)
public R<User> userByAccount(String tenantId, String account) {

Loading…
Cancel
Save