ny
昨天 b6f169fe43a2b13f351aefc152374fc7f0bc8cb7
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package jnpf.flowable.mapper;
 
import cn.hutool.core.collection.CollectionUtil;
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.mapper.SuperMapper;
import jnpf.flowable.entity.DelegateEntity;
import jnpf.flowable.entity.DelegateInfoEntity;
import jnpf.flowable.model.delegate.DelegateInfoModel;
import jnpf.flowable.model.delegate.DelegateListVO;
import jnpf.flowable.model.delegate.DelegatePagination;
import jnpf.util.JsonUtil;
import jnpf.util.StringUtil;
import jnpf.util.UserProvider;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 类的描述
 *
 * @author JNPF@YinMai Info. Co., Ltd
 * @version 5.0.x
 * @since 2024/9/2 13:39
 */
public interface DelegateInfoMapper extends SuperMapper<DelegateInfoEntity> {
 
    default List<DelegateListVO> getList(DelegatePagination pagination) {
        Integer type = ObjectUtil.equals(pagination.getType(), 2) ? 0 : 1;
        String userId = UserProvider.getLoginUserId();
        MPJLambdaWrapper<DelegateInfoEntity> wrapper = JoinWrappers.lambda(DelegateInfoEntity.class)
                .leftJoin(DelegateEntity.class, DelegateEntity::getId, DelegateInfoEntity::getDelegateId)
                .selectAs(DelegateInfoEntity::getId, DelegateInfoModel::getId)
                .selectAs(DelegateInfoEntity::getDelegateId, DelegateInfoModel::getDelegateId)
                .selectAs(DelegateInfoEntity::getToUserName, DelegateInfoModel::getToUserName)
                .selectAs(DelegateInfoEntity::getStatus, DelegateInfoModel::getConfirmStatus)
                .selectAs(DelegateEntity::getFlowName, DelegateInfoModel::getFlowName)
                .selectAs(DelegateEntity::getUserName, DelegateInfoModel::getUserName)
                .selectAs(DelegateEntity::getStartTime, DelegateInfoModel::getStartTime)
                .selectAs(DelegateEntity::getEndTime, DelegateInfoModel::getEndTime)
                .selectAs(DelegateEntity::getType, DelegateInfoModel::getType)
                .selectAs(DelegateEntity::getDescription, DelegateInfoModel::getDescription)
                .eq(DelegateInfoEntity::getToUserId, userId)
                .eq(DelegateEntity::getType, type);
 
        String keyword = pagination.getKeyword();
        if (StringUtil.isNotBlank(keyword)) {
            wrapper.and(t -> t.like(DelegateEntity::getUserName, keyword).or().like(DelegateEntity::getFlowName, keyword));
        }
 
        wrapper.orderByDesc(DelegateInfoEntity::getCreatorTime);
        Page<DelegateInfoModel> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
        Page<DelegateInfoModel> data = this.selectJoinPage(page, DelegateInfoModel.class, wrapper);
        List<DelegateInfoModel> dataList = pagination.setData(data.getRecords(), page.getTotal());
 
        List<DelegateListVO> voList = new ArrayList<>();
        long time = new Date().getTime();
        List<String> delegateIds = dataList.stream().map(DelegateInfoModel::getDelegateId).distinct().collect(Collectors.toList());
        List<DelegateInfoEntity> list = this.getList(delegateIds);
        for (DelegateInfoModel model : dataList) {
            DelegateListVO vo = JsonUtil.getJsonToBean(model, DelegateListVO.class);
            List<DelegateInfoEntity> infoList = list.stream()
                    .filter(e -> ObjectUtil.equals(e.getDelegateId(), model.getDelegateId())).collect(Collectors.toList());
            long rejectCount = infoList.stream().filter(e -> ObjectUtil.equals(e.getStatus(), 2)).count();
            long acceptCount = infoList.stream().filter(e -> ObjectUtil.equals(e.getStatus(), 1)).count();
            if (time >= vo.getEndTime() || rejectCount == infoList.size()) {// 已失效,1、所有人都拒绝;2、到达结束时间或终止委托
                vo.setStatus(2);
            } else if (time >= vo.getStartTime() && acceptCount > 0) {// 生效中,对方接受且到达开始时间的状态
                vo.setStatus(1);
            } else {// 未生效,两种场景1:对方已接受但未达到开始时间状态为未生效,2、对方未接受状态为未生效
                vo.setStatus(0);
            }
            voList.add(vo);
        }
        return voList;
    }
 
 
    default List<DelegateInfoEntity> getList(List<String> delegateIds) {
        if (CollectionUtil.isEmpty(delegateIds)) {
            return new ArrayList<>();
        }
        QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().in(DelegateInfoEntity::getDelegateId, delegateIds);
        return this.selectList(queryWrapper);
    }
 
    default List<DelegateInfoEntity> getList(String delegateId) {
        QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(DelegateInfoEntity::getDelegateId, delegateId);
        return this.selectList(queryWrapper);
    }
 
    default List<DelegateInfoEntity> getByToUserId(String toUserId) {
        QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(DelegateInfoEntity::getToUserId, toUserId);
        return this.selectList(queryWrapper);
    }
 
    default List<DelegateInfoEntity> getByToUserIds(List<String> userIds) {
        List<DelegateInfoEntity> resList = new ArrayList<>();
        if (CollectionUtil.isEmpty(userIds)) {
            return resList;
        }
        QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().in(DelegateInfoEntity::getToUserId, userIds);
        resList = this.selectList(queryWrapper);
        return resList;
    }
 
    default void delete(String delegateId) {
        QueryWrapper<DelegateInfoEntity> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(DelegateInfoEntity::getDelegateId, delegateId);
        this.delete(wrapper);
    }
 
 
}