package jnpf.dmsService; import jnpf.base.Pagination; import jnpf.base.UserInfo; import jnpf.dmsEntity.fenfa.model.DmsWenjianDayinTaizhangQuery; import jnpf.dmsMapper.DmsWenjianDayinTaizhangMapper; import jnpf.dmsPermission.DmsCurrentIdentity; import jnpf.dmsPermission.DmsPermissionError; import jnpf.dmsPermission.DmsPermissionException; import jnpf.util.JsonUtil; import jnpf.flowable.enums.TaskStatusEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; /** 原生待打印视图的数据源;使用与用户授权目录树相同的主体解析。 */ @Service @RequiredArgsConstructor public class DmsWenjianDayinTaizhangService { private final DmsCurrentIdentity identity; private final DmsUserFolderPermissionTreeService folderPermissions; private final DmsWenjianDayinTaizhangMapper mapper; @Transactional(readOnly = true, isolation = Isolation.REPEATABLE_READ) public List> list(Pagination pagination, String search, String showKey, String showValue) { if (pagination == null || pagination.getCurrentPage() < 1 || pagination.getPageSize() < 1 || pagination.getPageSize() > 99999999L) { throw invalid("分页参数无效"); } String taskId = null; if (showKey != null || showValue != null) { if (!("f_id".equals(showKey) || "id".equals(showKey)) || showValue == null || showValue.trim().isEmpty()) { throw invalid("台账回显必须指定 f_id 或 id 及任务ID"); } taskId = showValue.trim(); } long offset; try { offset = Math.multiplyExact(pagination.getCurrentPage() - 1L, pagination.getPageSize()); } catch (ArithmeticException e) { throw invalid("分页范围无效"); } UserInfo actor = identity.requireUser(); String tenantId = identity.tenantId(actor); List folderIds = folderPermissions.currentUserPrintFolderIds(); List workflowVersionIds = folderPermissions.currentUserWorkflowPrintVersionIds(); if (folderIds.isEmpty() && workflowVersionIds.isEmpty()) { pagination.setTotal(0); return Collections.emptyList(); } DmsWenjianDayinTaizhangQuery query = new DmsWenjianDayinTaizhangQuery(); query.setTenantId(tenantId); query.setFolderIdsJson(JsonUtil.getObjectToString(folderIds)); query.setWorkflowPrintVersionIdsJson(JsonUtil.getObjectToString(workflowVersionIds)); query.setUserId(actor.getUserId().trim()); query.setApprovedFlowState(TaskStatusEnum.PASSED.getCode()); query.setSearch(search); query.setTaskId(taskId); query.setOffset(offset); query.setLimit(pagination.getPageSize()); long total = ((Number) mapper.selectCount(query).get("total")).longValue(); pagination.setTotal(total); return total <= offset ? Collections.emptyList() : mapper.selectPage(query); } private DmsPermissionException invalid(String message) { return DmsPermissionException.of(DmsPermissionError.INVALID_REQUEST, message); } }