xiejun
2024-08-23 84237d1fb40c38f9501c2f4e501f23e6c167df60
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package com.vci.web.service.impl;
 
import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
import com.vci.starter.web.enumpck.DataSecretEnum;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.properties.VciSessionProperties;
import com.vci.starter.web.util.ApplicationContextProvider;
import com.vci.web.properties.WebProperties;
import com.vci.web.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
 
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
 
/**
 * 初始化后的处理缓存的服务
 * @author weidy
 * @date 2022-1-12
 */
@Component
public class WebInitServiceImpl {
 
    /**
     * 业务类型
     */
    @Autowired
    private OsBtmServiceI btmService;
 
    /**
     * 链接类型
     */
    @Autowired
    private OsLinkTypeServiceI linkTypeService;
 
    /**
     * UI
     */
    @Autowired
    private UIEngineServiceI uiEngineService;
 
    /**
     * 菜单
     */
    @Autowired
    private ISmFunctionQueryService functionQueryService;
    /**
     * 密级服务
     */
    @Autowired
    private WebSecretServiceI webSecretService;
 
    /**
     * 状态的服务
     */
    @Autowired
    private OsStatusServiceI statusService;
 
    /**
     * 生命周期的服务
     */
    @Autowired
    private OsLifeCycleServiceI lifeCycleService;
 
    /**
     * 枚举的服务
     */
    @Autowired
    private OsEnumServiceI enumService;
 
    /**
     * 规则的服务
     */
    @Autowired
    private OsRevisionRuleServiceI revisionRuleService;
 
    /**
     * 属性的服务
     */
    @Autowired
    private OsAttributeServiceI attributeService;
 
    /**
     * 会话的信息
     */
    @Autowired(required = false)
    private VciSessionProperties sessionProperties;
 
    /**
     * web相关配置
     */
    @Autowired
    private WebProperties webProperties;
 
    /**
     * 业务类型的服务
     */
    @Autowired
    private WebBoServiceI boService;
 
    /**
     * 主服务是否在执行缓存
     * @return true表示没有执行,执行中会抛出异常
     */
    public boolean checkMainServerUnCache(){
        //看看主服务在执行刷新缓存没有
        boolean finishInitCache = false;
        for(int i = 0 ; i < 10 ; i++){
            if(boService.queryCountBySql("select count(*) from plcachetemp",new HashMap<>()) ==0){
                finishInitCache = true;
                break;
            }else{
                //说明主服务在执行
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        if(!finishInitCache){
            throw new VciBaseException("暂时不能刷新,因为主服务还正在执行初始化缓存");
        }
        return finishInitCache;
    }
 
    /**
     * 清除所有的缓存
     */
    public void clearAllCache(){
        Map<String, OsBaseServiceI> beans = ApplicationContextProvider.getApplicationContext().getBeansOfType(OsBaseServiceI.class);
        if(!CollectionUtils.isEmpty(beans)){
            beans.forEach((name,bean)->{
                bean.clearCache();
            });
        }
    }
 
    /**
     *  初始化服务端的缓存
     * @throws Exception 查询的时候出现错误的时候
     */
    public void initServerCache(){
        long currentTime = System.currentTimeMillis();
        System.out.println("开始启动状态池的缓存,时间有点长,请耐心等待");
        statusService.selectAllStatusMap();
        System.out.println("状态池的刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新生命周期");
        currentTime = System.currentTimeMillis();
        lifeCycleService.selectAllLifeCycleMap();
        System.out.println("生命周期刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新枚举");
        currentTime = System.currentTimeMillis();
        enumService.selectAllEnumMap();
 
        System.out.println(DataSecretEnum.NONE.getValue());
        System.out.println("枚举刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新版本规则");
        currentTime = System.currentTimeMillis();
        revisionRuleService.selectAllRevisionMap();
        System.out.println("版本规则刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新属性");
        currentTime = System.currentTimeMillis();
        attributeService.selectAllAttributeMap();
        System.out.println("属性刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新业务类型");
        currentTime = System.currentTimeMillis();
        btmService.selectAllBtmMap();
        System.out.println("业务类型刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新链接类型");
        currentTime = System.currentTimeMillis();
        linkTypeService.selectAllLinkMap();
        System.out.println("链接类型刷新完成,耗时" + (System.currentTimeMillis()-currentTime) + ",开始刷新UI上下文");
        currentTime = System.currentTimeMillis();
        if(webProperties.isCacheUIOnInit()) {
            uiEngineService.selectAllFormMap();
        }
        uiEngineService.selectAllActionMap();
        System.out.println("UI上下文刷新完成,耗时" + (System.currentTimeMillis()-currentTime) );
        currentTime = System.currentTimeMillis();
        functionQueryService.selectAllFunctionMap();
        System.out.println("菜单刷新,耗时" + (System.currentTimeMillis()-currentTime) );
    }
}