Administrator
2021-08-09 92aad2bdb3fc2552dfc199801c32b8bd9bb61472
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
package com.batttest;
 
import java.sql.SQLException;
import java.util.Calendar;
 
import com.battmonitor.base.Com;
import com.battmonitor.data.BattData_RT_Array;
import com.battmonitor.data.BattStatData;
import com.battmonitor.sql.MysqlConnPool;
import com.battmonitor.sql.Sql_Mysql;
import com.config.AppConfig;
 
public class BattAutoStorePro_Thread extends Thread {
    
    private BattData_RT_Array m_Data;
    private MysqlConnPool m_Conn_Pool;
    
    private int start_up_delay = 60;
    private int auto_save_minute_interval = 10;
    private int auto_save_daycount_max = 10;
    
    public BattAutoStorePro_Thread(MysqlConnPool pool, AppConfig cfg, BattData_RT_Array data)
    {
        m_Conn_Pool = pool;
        m_Data = data;
        
        start_up_delay = cfg.getBattAutoStoreDelayForStartUp();
        auto_save_minute_interval = cfg.getBattAutoStoreMinuteInterval();
        auto_save_daycount_max = cfg.getBattAutoStoreDayCountMax();
    }
    //-----------------------------------------------------------------------------//
    
    
    /**
     * ´Ótb_battresdata_inf±íÖÐɾ³ýtest_type=1²¢ÇÒ¿ªÊ¼Ê±¼äÔÚday_countÌìǰ µÄµçµ¼²âÊԼǼ
     * @param conn_pool
     * @param bg_id
     * @param day_count
     */
    private void deleteDataFromResTable(MysqlConnPool conn_pool, int bg_id, int day_count)
    {
        Calendar cld = Calendar.getInstance();
        cld.set(Calendar.HOUR_OF_DAY, 0);
        cld.set(Calendar.MINUTE, 0);
        cld.set(Calendar.SECOND, 0);
        cld.add(Calendar.DAY_OF_MONTH, day_count*(-1));
        
        Sql_Mysql sql = new Sql_Mysql(conn_pool.getConn());
        try {
            sql.sqlMysqlUseDB(Sql_Mysql.DB_BATT_TESTDATA);
            
            String tb_name = "tb_BattResData_" + bg_id;
            if(true == sql.sqlMysqlCheckIfTableExist(tb_name))
            {
                String sql_str = "DELETE FROM " + tb_name + " WHERE test_record_count IN " 
                                    + "(SELECT test_record_count FROM " + Sql_Mysql.BattResDataInf_Table
                                    + " WHERE BattGroupId=" + bg_id
                                    + " AND test_type=" + BattStatData.BATTDATA_FLOAT
                                    + " AND test_starttime<'" 
                                    + Com.getDateTimeFormat(cld.getTime(), Com.DTF_YMDhms) + "')";
                String sql_str1 = "DELETE FROM " + Sql_Mysql.BattResDataInf_Table
                                    + " WHERE BattGroupId=" + bg_id
                                    + " AND test_type=" + BattStatData.BATTDATA_FLOAT
                                    + " AND test_starttime<'" 
                                    + Com.getDateTimeFormat(cld.getTime(), Com.DTF_YMDhms) + "'";
                try {
                    sql.mysql_con.setAutoCommit(false);
                    sql.sqlMysqlExecute(sql_str);
                    sql.sqlMysqlExecute(sql_str1);
                    sql.mysql_con.commit();
                } catch (SQLException e) {
                    sql.mysql_con.rollback();
                    //System.out.println(sql_str);
                    e.printStackTrace();
                } finally {
                    sql.mysql_con.setAutoCommit(true);
                }
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally
        {
            sql.close_con();
        }
    }
    
    @Override
    public void run() {
        
        System.out.println(this.getName() + " - BattAutoStorePro_Thread Started, "
                                            + "start_up_delay(s): " + start_up_delay + ", "
                                            + "auto_save_minute_interval(m):" + auto_save_minute_interval);
        
        try {
            for(int s=0; s<start_up_delay; s++)
            {
                sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        while(true)
        {
            try 
            {
                //------------------------------------------------------------------------//
                for(int n=0; n<m_Data.getItemCount(); n++)
                {
                    BattResStorePro_Thread.insertDataToResTable(m_Conn_Pool, m_Data.getItem(n), BattStatData.BATTDATA_FLOAT);
                    deleteDataFromResTable(m_Conn_Pool, m_Data.getItem(n).BattGroupId, auto_save_daycount_max);
                }
                
                //------------------------------------------------------------------------//
                for(int d=0; d<auto_save_minute_interval; d++)
                {
                    for(int s=0; s<60; s++)
                    {
                        sleep(1000);
                    }
                }
                //------------------------------------------------------------------------//
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}