whycxzp
2022-11-02 757570cdb14b3774bb865885b6485df3a838dd88
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
package com.whyc.listener;
 
import com.whyc.dto.ServiceModel;
import com.whyc.factory.FaceEngineFactory;
import com.whyc.mapper.LicenseMapper;
import com.whyc.mapper.PageParamUserMapper;
import com.whyc.service.InterfaceService;
import com.whyc.service.LicenseService;
import com.whyc.util.ActionUtil;
import com.whyc.util.HttpUtil;
import com.whyc.util.PropertiesUtil;
import org.springframework.beans.factory.annotation.Autowired;
 
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Properties;
 
/**
 * 应用启动时初始化
 * 应用关闭时销毁
 */
@WebListener
public class ApplicationListener implements ServletContextListener {
    @Resource
    private PageParamUserMapper pageParamUserMapper;
 
    @Autowired
    private InterfaceService interfaceService;
    /*PowerACDCDataServer powerACDCDataServer = new PowerACDCDataServer();
    PowerAlarmServer powerAlarmServer = new PowerAlarmServer();
    PowerInsulateServer powerInsulateServer = new PowerInsulateServer();
    PowerChargerServer powerChargerServer = new PowerChargerServer();*/
 
    Thread thread_calculateTimeInUse = new Thread(new CalculateTimeInUse(),"Thread_calculateTimeInUse");
 
 
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //license凭证使用时长计时
        thread_calculateTimeInUse.start();
 
        //载入config.properties文件数据流
        PropertiesUtil.props = new Properties();
        try {
            String path = (getClass().getClassLoader().getResource("").toURI()).getPath();
            //FileInputStream fis = new FileInputStream(path + "config.properties");
            FileInputStream fis = new FileInputStream(path + "config.properties");
            PropertiesUtil.props.load(new InputStreamReader(fis, StandardCharsets.UTF_8));
        }catch (Exception e){
            e.printStackTrace();
        }
        //应用启动时,检查是否存在表,不存在则新建--聚合平台,弃用
        /*boolean exist = DAOHelper.exist("web_site", "tb_weather_city");
        if(!exist){
            boolean createStatus = false;
            while (!createStatus){
                createStatus = new WeatherCityDao().createTable();
            }
        }
        //刷新 天气城市的数据--聚合平台,弃用
        new WeatherCityService().insertBatch();*/
        //视频token获取存入
        String resultJson = HttpUtil.doPost(HttpUtil.VIDEO_URL, HttpUtil.VIDEO_REQUEST_BODY);
        ServiceModel model = ActionUtil.getGson().fromJson(resultJson, ServiceModel.class);
        ServletContext application = servletContextEvent.getServletContext();
        application.setAttribute("videoToken",model);
 
        //版本迭代需要打补丁,PageParamUser追加字段type,扩展表的使用范围,原来表记录的type字段统一追加为1
        pageParamUserMapper.setOldRecord();
        //告警实时数据
        Map<String, Object> alarmMap = interfaceService.getAlarmMap();
        application.setAttribute("alarmMap",alarmMap);
 
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        int i = FaceEngineFactory.getInstance().unInit();
        System.out.println("faceEngine引擎卸载");
        thread_calculateTimeInUse.interrupt();
        System.out.println("计算时长线程终止");
        /*try {
            powerACDCDataServer.stop();
            powerAlarmServer.stop();
            powerInsulateServer.stop();
            powerChargerServer.stop();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }*/
 
    }
 
    class CalculateTimeInUse implements Runnable{
        @Resource
        private LicenseMapper licenseMapper;
        @Resource
        private LicenseService licenseService;
        @Override
        public void run() {
            boolean exist = licenseMapper.selectExist()>0;
            if(!exist){
                licenseMapper.createTable();
            }else{
                boolean existColumn = licenseMapper.existColumn()>0;
                if(!existColumn){
                    //这里
                    licenseMapper.reCreateTable();
                }
            }
            while (true){
                //更新单位为60s
                boolean flag = licenseService.updateTimeInUse();
                /*if (!flag){
                    throw new LicenseTimeInUseUpdateException();
                }*/
                try {
                    Thread.sleep(60000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}