package jnpf.flowable.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import jnpf.base.service.SuperServiceImpl; import jnpf.flowable.entity.CirculateEntity; import jnpf.flowable.entity.TaskEntity; import jnpf.flowable.entity.TemplateEntity; import jnpf.flowable.enums.TaskStatusEnum; import jnpf.flowable.mapper.CirculateMapper; import jnpf.flowable.model.operator.OperatorVo; import jnpf.flowable.model.task.TaskPagination; import jnpf.flowable.service.CirculateService; import jnpf.util.StringUtil; import jnpf.util.UserProvider; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author :JNPF开发平台组 * @version: V3.1.0 * @copyright 引迈信息技术有限公司 * @date :2024/4/29 下午5:21 */ @Service public class CirculateServiceImpl extends SuperServiceImpl implements CirculateService { @Override public List getList(String taskId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CirculateEntity::getTaskId, taskId); return this.list(queryWrapper); } @Override public List getList(TaskPagination pagination) { String userId = StringUtil.isNotEmpty(pagination.getUserId()) ? pagination.getUserId() : UserProvider.getLoginUserId(); MPJLambdaWrapper wrapper = JoinWrappers.lambda(CirculateEntity.class) .selectAll(TaskEntity.class) .leftJoin(TaskEntity.class, TaskEntity::getId, CirculateEntity::getTaskId) .leftJoin(TemplateEntity.class, TemplateEntity::getId, TaskEntity::getTemplateId) .selectAs(TemplateEntity::getSystemId, OperatorVo::getSystemName) .selectAs(CirculateEntity::getNodeName, OperatorVo::getNodeName) .selectAs(CirculateEntity::getNodeCode, OperatorVo::getNodeCode) .selectAs(CirculateEntity::getId, OperatorVo::getId) .selectAs(TaskEntity::getId, OperatorVo::getTaskId) .selectAs(TaskEntity::getUrgent, OperatorVo::getFlowUrgent) .selectAs(CirculateEntity::getCreatorTime, OperatorVo::getCreatorTime) .ne(TaskEntity::getStatus, TaskStatusEnum.CANCEL.getCode()) .eq(CirculateEntity::getUserId, userId); //关键字(流程名称、流程编码) String keyWord = pagination.getKeyword(); if (ObjectUtil.isNotEmpty(keyWord)) { wrapper.and(t -> t.like(TaskEntity::getEnCode, keyWord).or().like(TaskEntity::getFullName, keyWord)); } //日期范围(近7天、近1月、近3月、自定义) if (ObjectUtil.isNotEmpty(pagination.getStartTime()) && ObjectUtil.isNotEmpty(pagination.getEndTime())) { wrapper.between(TaskEntity::getStartTime, new Date(pagination.getStartTime()), new Date(pagination.getEndTime())); } //所属流程 String templateId = pagination.getTemplateId(); if (ObjectUtil.isNotEmpty(templateId)) { wrapper.eq(TaskEntity::getTemplateId, templateId); } //所属分类 String category = pagination.getFlowCategory(); if (ObjectUtil.isNotEmpty(category)) { List categoryList = Arrays.stream(category.split(",")).collect(Collectors.toList()); wrapper.in(TaskEntity::getFlowCategory, categoryList); } //是否已读 Integer status = pagination.getStatus(); if (ObjectUtil.isNotEmpty(status)) { wrapper.in(CirculateEntity::getCirculateRead, status); } //发起人员 String creatorUserId = pagination.getCreatorUserId(); if (ObjectUtil.isNotEmpty(creatorUserId)) { wrapper.in(TaskEntity::getCreatorUserId, creatorUserId); } //紧急程度 Integer flowUrgent = pagination.getFlowUrgent(); if (ObjectUtil.isNotEmpty(flowUrgent)) { wrapper.in(TaskEntity::getUrgent, flowUrgent); } //应用主建 String systemId = pagination.getSystemId(); if (ObjectUtil.isNotEmpty(systemId)) { wrapper.eq(TemplateEntity::getSystemId, systemId); } wrapper.orderByDesc(CirculateEntity::getCreatorTime); Page page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize()); Page data = this.selectJoinListPage(page, OperatorVo.class, wrapper); return pagination.setData(data.getRecords(), page.getTotal()); } }