@@ -95,10 +95,21 @@ func (z *ZKF) statGasByTableName(tableName string) {
9595 flag := "hour"
9696 if tableName == zkfModel .HourTable {
9797 flag = "hour"
98- dateEnd = dateStart .Add (3599 * time .Second )
98+ dateEnd = dateStart .Add (3600 * time .Second )
99+
100+ //判断这个阶段的数据是否结束,一定要先判断,以防时间差导致结果异常
101+ tx := appModel.Transaction {}
102+ err = z .db .Last (& tx ).Error
103+ if err != nil {
104+ log .Error ("[zkf] => [%s] get latest tx err: %s" , flag , err .Error ())
105+ continue
106+ }
107+ if tx .CreatedAt .Compare (dateEnd ) >= 0 {
108+ calcStatus = zkfConstant .CalcStatusStop
109+ }
99110
100111 //统计
101- row := z .db .Model (& appModel.Transaction {}).Select ("IFNULL(sum(gas_used * effective_gas_price),0),IFNULL(sum(effective_gas_price),0),IFNULL(min(block_number),0),IFNULL(max(block_number),0),IFNULL(max(created_at),now()),IFNULL(count(1),0)" ).Where ("created_at>=? and created_at<= ?" , dateStart , dateEnd ).Row ()
112+ row := z .db .Model (& appModel.Transaction {}).Select ("IFNULL(sum(gas_used * effective_gas_price),0),IFNULL(sum(effective_gas_price),0),IFNULL(min(block_number),0),IFNULL(max(block_number),0),IFNULL(max(created_at),now()),IFNULL(count(1),0)" ).Where ("created_at>=? and created_at<?" , dateStart , dateEnd ).Row ()
102113 err = row .Scan (& totalGasFee , & totalGasPrice , & minBlockNumber , & maxBlockNumber , & maxBlockNumberDate , & count )
103114 if err != nil {
104115 log .Error ("[zkf] => [%s] stat gas data err: %s" , flag , err .Error ())
@@ -108,31 +119,32 @@ func (z *ZKF) statGasByTableName(tableName string) {
108119 log .Warnf ("[zkf] => [%s] tx data is empty" , flag )
109120 continue
110121 }
111-
112- //判断这个阶段的数据是否结束
113- tx := appModel.Transaction {}
114- err = z .db .Last (& tx ).Error
115- if err != nil {
116- log .Error ("[zkf] => [%s] get latest tx err: %s" , flag , err .Error ())
117- continue
118- }
119- if tx .CreatedAt .Compare (dateEnd ) > 0 {
120- calcStatus = zkfConstant .CalcStatusStop
121- }
122122 } else {
123123 tbName := zkfModel .HourTable
124124 if tableName == zkfModel .DailyTable {
125125 flag = "daily"
126126 tbName = zkfModel .HourTable
127- dateEnd = dateStart .AddDate (0 , 0 , 1 ). Add ( - 1 * time . Second )
127+ dateEnd = dateStart .AddDate (0 , 0 , 1 )
128128 }
129129 if tableName == zkfModel .WeeklyTable {
130130 flag = "weekly"
131131 tbName = zkfModel .DailyTable
132- dateEnd = dateStart .AddDate (0 , 0 , 7 ). Add ( - 1 * time . Second )
132+ dateEnd = dateStart .AddDate (0 , 0 , 7 )
133133 }
134+
135+ //判断这个阶段的数据是否结束,一定要先判断,以防时间差导致结果异常
136+ zkfStatGas := zkfModel.ZkfStatGas {}
137+ err = z .db .Table (tbName ).Last (& zkfStatGas ).Error
138+ if err != nil {
139+ log .Errorf ("[zkf] => [%s] get latest tx err: %s" , flag , err .Error ())
140+ continue
141+ }
142+ if zkfStatGas .DateEnd .Compare (dateEnd ) >= 0 {
143+ calcStatus = zkfConstant .CalcStatusStop
144+ }
145+
134146 //统计
135- row := z .db .Table (tbName ).Select ("IFNULL(sum(total_gas_fee),0),IFNULL(sum(total_gas_price),0),IFNULL(min(block_start),0),IFNULL(max(block_end),0),IFNULL(max(date_end),now()),IFNULL(sum(total_tx_count),0)" ).Where ("date_start>=? and date_end<= ?" , dateStart , dateEnd ).Row ()
147+ row := z .db .Table (tbName ).Select ("IFNULL(sum(total_gas_fee),0),IFNULL(sum(total_gas_price),0),IFNULL(min(block_start),0),IFNULL(max(block_end),0),IFNULL(max(date_end),now()),IFNULL(sum(total_tx_count),0)" ).Where ("date_start>=? and date_end<?" , dateStart , dateEnd ).Row ()
136148 err = row .Scan (& totalGasFee , & totalGasPrice , & minBlockNumber , & maxBlockNumber , & maxBlockNumberDate , & count )
137149 if err != nil {
138150 log .Error ("[zkf] => [%s] stat gas data err: %s" , flag , err .Error ())
@@ -143,17 +155,6 @@ func (z *ZKF) statGasByTableName(tableName string) {
143155 log .Warnf ("[zkf] => [%s] %s data is empty" , flag , tbName )
144156 continue
145157 }
146-
147- //判断这个阶段的数据是否结束
148- zkfStatGas := zkfModel.ZkfStatGas {}
149- err = z .db .Table (tbName ).Last (& zkfStatGas ).Error
150- if err != nil {
151- log .Errorf ("[zkf] => [%s] get latest tx err: %s" , flag , err .Error ())
152- continue
153- }
154- if zkfStatGas .DateEnd .Compare (dateEnd ) > 0 {
155- calcStatus = zkfConstant .CalcStatusStop
156- }
157158 }
158159
159160 //若没有新增数据,则继续下一轮,减少数据写入频率
@@ -167,7 +168,8 @@ func (z *ZKF) statGasByTableName(tableName string) {
167168 result .DateEnd = & maxBlockNumberDate
168169 //若结束,则用截止时间
169170 if calcStatus == zkfConstant .CalcStatusStop {
170- result .DateEnd = & dateEnd
171+ end := dateEnd .Add (- 1 * time .Second )
172+ result .DateEnd = & end
171173 }
172174 result .BlockStart = minBlockNumber
173175 result .BlockEnd = maxBlockNumber
0 commit comments