刘光辉
2 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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<Map<String, Object>> 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<UUID> folderIds = folderPermissions.currentUserPrintFolderIds();
        List<UUID> 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);
    }
}