whychdw
2019-12-20 0a707989b1e298d6c22575ef573b6a4f65d0e036
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
package com.socket;
 
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
 
import com.concentrator.Concentrator_State;
import com.fgkj.dao.DBHelper;
import com.util.Com;
 
import java.util.Date;
 
/**
 *   内阻数据记录线程
 */
public class BattResDataRecordThread extends Thread{
    public static final String TAG = "BattResDataRecordThread";
 
    public BattDataThread battData;                     //电池实时数据
    public DBHelper dbHelper;                           //数据库对象
    public int lastResTestCount = 0;                    //上一次内阻测试的次数
 
    public BattResDataRecordThread(BattDataThread battData,DBHelper dbHelper){
        this.battData = battData;
        this.dbHelper = dbHelper;
 
        dbHelper.Create_battresdata(dbHelper.getWritableDatabase(),battData.battIndex);            //创建当前电池组的内阻数据表
    }
 
    @Override
    public void run() {
        Log.d(TAG, "run: BattResDataRecordThread start at" + Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms));
 
 
        while(true){
            try {
                //Log.e(TAG, "run: "+ battData.isOutTime+"\tlastResTestCount:"+lastResTestCount+"\t count:"+battData.state.getRestestcount());
                if(!battData.isOutTime){
                    if(lastResTestCount != battData.state.getRestestcount()){
                        if(battData.state.monCount >0 && battData.state.mon_ress[battData.state.monCount-1] > 0){
                            //开始记录内阻历史数据
                            int max_test_record_count = queryMaxTestRecordCount(battData.battIndex,dbHelper);                           //查询当前电池组最大的记录笔数
                            Log.e(TAG, "run: MAXCOUNT:"+max_test_record_count );
                            //插入 tb_battresdata_inf 表中
                            insertBattResDataInf(battData.battIndex, battData.state,dbHelper,max_test_record_count);
 
                            //插入 tb_battresdata_id 表中
                            insertBattResDataID(battData.battIndex,battData.state,dbHelper,max_test_record_count);
                            //Log.e(TAG, "run: battindex:"+battData.battIndex+"记录历史数据成功 #############################");
                            lastResTestCount = battData.state.getRestestcount();
                        }
                    }
                }
                sleep(3000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
 
    public static void insertBattResDataID(int battgroupid,Concentrator_State state,DBHelper dbHelper,int test_record_count){
        String sql_str_start = "INSERT INTO tb_battresdata_1(BattGroupId,test_record_count,test_type,test_starttime,group_vol,test_curr,mon_num,mon_vol,mon_tmp,mon_res) VALUES ";
        String sql_str_base = "";
        for(int i = 0;i<state.monCount;i++){
            if(i != 0){
                sql_str_base += ",";
            }
            sql_str_base += "("+battgroupid+","+test_record_count+","+BattDataThread.TESTTYPE_RESTEST+",'"+Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms)+"',"+state.getGroupvol()+","+state.getGroupcurr()+","+(i+1)+","+state.mon_vols[i]+","+state.mon_tmps[i]+","+state.mon_ress[i]+")";
        }
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        //Log.e(TAG, "insertBattResDataID: "+sql_str_start+sql_str_base );
        try {
            db.execSQL(sql_str_start+sql_str_base);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
//            if(db != null){
//                db.close();
//            }
        }
    }
 
    /**
     * 插入内阻数据进入inf表
     * @param battgroupid
     * @param state
     * @param dbHelper
     * @param test_record_count
     */
    public static void insertBattResDataInf(int battgroupid, Concentrator_State state, DBHelper dbHelper, int test_record_count){
        String sql_str = "INSERT INTO tb_battresdata_inf " +
                "(BattGroupId,test_record_count,test_type,test_starttime,record_time,group_vol,test_curr) " +
                "VALUES("
                + battgroupid+","
                + test_record_count+","
                + BattDataThread.TESTTYPE_RESTEST+",'"
                + Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms)+"','"
                + Com.getDateTimeFormat(new Date(),Com.DTF_YMDhms)+"',"
                + state.getGroupvol()+ ","
                + state.getGroupcurr()+"" +
                ");";
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        try {
            //Log.d(TAG, "insertBattResDataInf: "+sql_str);
            db.execSQL(sql_str);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
//            if(db != null){
//                db.close();
//            }
        }
    }
 
 
    /**
     *  查询数据库目前当前电池组的最大
     * @param battgroupid
     * @param dbHelper
     * @return
     */
    public static int queryMaxTestRecordCount(int battgroupid,DBHelper dbHelper){
        int max_test_record_count = 1;
        String sql_str = " SELECT max(test_record_count)as max_test_record_count FROM tb_battresdata_inf WHERE BattGroupId =  " + battgroupid;
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        try {
            Cursor rs = db.rawQuery(sql_str,null);
            if (rs.moveToNext()){
                max_test_record_count = rs.getInt(rs.getColumnIndex("max_test_record_count"))+1;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
//            if(db != null){
//                db.close();
//            }
        }
        return max_test_record_count;
    }
}