shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.iplatform.base.cache;
 
import com.iplatform.base.CategoryCacheProvider;
import com.iplatform.base.Constants;
import com.iplatform.base.service.CategoryServiceImpl;
import com.iplatform.base.util.CategoryUtils;
import com.iplatform.base.util.cache.CategorySortComparator;
import com.iplatform.model.po.S_category;
import com.iplatform.model.vo.CategoryTreeVo;
import com.walker.cache.AbstractCacheProvider;
import com.walker.cache.Cachable;
import com.walker.cache.Cache;
import com.walker.infrastructure.utils.StringUtils;
 
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class LocalCategoryCacheProvider extends AbstractCacheProvider<S_category> implements CategoryCacheProvider {
 
    private final CategorySortComparator sortComparator = new CategorySortComparator();
 
    @Override
    public List<CategoryTreeVo> getTree(Integer type, Integer status, String name, List<Integer> categoryIdList, int owner) {
        List<S_category> allTree = new ArrayList<>();
        S_category tempCategory = null;
 
        for(Iterator<Cachable> it = this.getCache().getIterator(); it.hasNext();){
            tempCategory = (S_category) it.next().getValue();
//            if(owner != tempCategory.getOwner().intValue()){
//                continue;
//            }
//            if(type != null && type.intValue() != tempCategory.getType().intValue()){
//                continue;
//            }
//            if(status != null && status.intValue() != tempCategory.getStatus().intValue()){
//                continue;
//            }
//            if(!StringUtils.isEmptyList(categoryIdList) && !categoryIdList.contains(tempCategory.getId())){
//                logger.debug("不包含在给定的集合中'categoryIdList'");
//                continue;
//            }
            if(CategoryUtils.isCondition(tempCategory, type, status, name, categoryIdList, owner)){
                allTree.add(tempCategory);
            }
        }
 
        return CategoryUtils.acquireListTree(allTree, sortComparator);
//        // 重新排序
//        Collections.sort(allTree, sortComparator);
//
//        //
//        List<CategoryTreeVo> treeList = new ArrayList<>();
//        if(allTree.size() == 0){
//            return treeList;
//        }
//
//        //
//        for (S_category category : allTree) {
//            treeList.add(CategoryUtils.toCategoryTreeVo(category));
//        }
//
//        Map<Integer, CategoryTreeVo> map = new HashMap<>(treeList.size());
//        //ID 为 key 存储到map 中
//        for (CategoryTreeVo categoryTreeVo : treeList) {
//            map.put(categoryTreeVo.getId(), categoryTreeVo);
//        }
//
//        List<CategoryTreeVo> list = new ArrayList<>();
//        CategoryTreeVo parentTree = null;
//        for (CategoryTreeVo tree : treeList) {
//            //子集ID返回对象,有则添加。
//            parentTree = map.get(tree.getPid());
//            if (parentTree != null) {
//                parentTree.getChild().add(tree);
//            } else {
//                list.add(tree);
//            }
//        }
//        return list;
    }
 
    @Override
    public List<CategoryTreeVo> getListTree(Integer type, Integer status, String name, int owner) {
        if(StringUtils.isNotEmpty(name)){
            try {
                name = URLDecoder.decode(name, StringUtils.DEFAULT_CHARSET_UTF8);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
        return getTree(type, status, name, null, owner);
    }
 
    @Override
    public S_category get(int id) {
        return this.getCacheData(String.valueOf(id));
    }
 
    @Override
    public void save(S_category category) {
        this.putCacheData(String.valueOf(category.getId()), category);
    }
 
    @Override
    public void update(S_category category) {
        this.updateCacheData(String.valueOf(category.getId()), category);
    }
 
    @Override
    public void remove(int id) {
        this.removeCacheData(String.valueOf(id));
    }
 
    @Override
    protected int loadDataToCache(Cache cache) {
        List<S_category> data = this.categoryService.selectAll(new S_category());
        if(!StringUtils.isEmptyList(data)){
            for(S_category d : data){
                cache.put(String.valueOf(d.getId()), d);
            }
            return data.size();
        }
        return 0;
    }
 
    @Override
    public String getProviderName() {
        return Constants.CACHE_NAME_CATEGORY;
    }
 
    @Override
    public Class<?> getProviderType() {
        return S_category.class;
    }
 
    public void setCategoryService(CategoryServiceImpl categoryService) {
        this.categoryService = categoryService;
    }
 
    private CategoryServiceImpl categoryService;
}