riku
2024-01-10 a9e8e27e0503552b7b2a99c821da732175d4f071
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
U
Tá(eäiã@sÒddlmZddlmZddlZddlmZddlm    Z    ddlm
Z
ddlTddlm Z ddl m Z dd    lmZdd
lmZdd lmZdd lmZddlTdd lmZeƒZeƒZeƒZeƒZGdd„dƒZdS)é)Údatebase_single_obj)ÚupdateN)Ú cal_average)Úremove_site_data)Ú*)Útext)Ú    EAnalysis)Ú DustSiteInfo)Ú DustSiteData)ÚDustLatestTime)Ú DustException)Ú FormatUtilsc@sheZdZdZeedœdd„ZdFeeedœdd„Z    eed    œd
d „Z
d d „Z dd„Z edœdd„Z dd„Zeedœdd„Zedœdd„Zeeedœdd„Zdd„Zed œd!d"„Zd#d$„Zed œd%d&„Zed'œd(d)„Zed œd*d+„Zed œd,d-„Zed.œd/d0„Zeed1œd2d3„Zd4d5„Zd6d7„Zeed8œd9d:„Zeeed;œd<d=„Zd>d?„Z eed@œdAdB„Z!eed@œdCdD„Z"dES)GÚ
Repositoryu æ‰€æœ‰çš„写数据库操作
    )Úhave_removed_site_dataÚreturnc Csb|rDt|ƒ}t |¡}t ¡|_t ¡}zÄ| ¡|j    tj
|dddd|  ¡t j  d¡t|ƒ}| ¡D]Z\}}t|ƒ}|d}    ddlm}
|
 ¡} |
 |    d| ¡} t| ƒ} | |    d|    d| ¡qrt j  d    ¡t d¡WW5QR£d
Stk
r6}z$| ¡t j  d t|ƒ›¡‚W5d }~XYnXW5QRXnt j  d ¡t d¡dSd S)uÃ爬去后的监测数据写入站点数据表中
 
        Args:
            have_removed_site_data (list): åŽ»é‡åŽçš„ç«™ç‚¹æ•°æ®
 
        Returns:
            bool: æ˜¯å¦å†™å…¥æˆåŠŸ
        ÚappendF©ÚnameÚconÚ    if_existsÚindexZ index_labelu浓度数据写入完成! éÿÿÿÿr)Ú    DateUtilséu$站点最新数据时间更新成功Tu写入浓度数据失败!Nu无浓度数据写入)rÚpdÚ    DataFrameÚ    site_dataÚparams_to_listÚcolumnsrÚconnect_remote_database_writeÚbeginÚto_sqlÚ
table_nameÚcommitÚ    log_utilsÚLogUtilsÚinfoZgroup_by_first_elementÚitemsZsorted_by_time_listZutils.date_utilsrÚnow_timeZ time_distanceZback_device_status_by_diff_daysÚ!update_one_line_latest_time_tabler Z
line_breakÚ    ExceptionÚrollbackÚstrÚwarn)ÚselfrÚaÚdfrZ grouped_dictÚkeyÚvalueZ    group_ascÚdrÚnowZ    diff_daysÚ device_statusÚe©r7ú4e:\PycharmProject\fugitive_dust_new\db\repository.pyÚwrite_site_data_tables:    
 
 
  
z Repository.write_site_data_tabler)Úmn_codeÚtimer5c
Cs²zft ¡}tƒ tjj|k¡j||d}| |¡}|     ¡|j
dkrdt j   d|›d¡| ||¡WnFtk
r¬}z(| ¡t j  |›d|›d|›¡W5d}~XYnXdS)uÐ将该设备编号对应的时间,更新至最新时间表
 
        Args:
            mn_code (str): è®¾å¤‡ç¼–号
            time (str): å¯¹åº”的时间
            device_status(int):设备状态
        )Z latest_timer5éu未找到表中设备编号与u匹配ú,u数据最新时间更新失败N)rrrÚwhereZsite_latest_timeÚcr:ÚvaluesÚexecuter#Úrowcountr$r%r-Úwrite_latest_time_tabler*r+Úerror)r.r:r;r5rÚstmtÚresultr6r7r7r8r)[s    
 
z,Repository.update_one_line_latest_time_table)r:r;c    Csng}| |¡| |¡t |g¡}t ¡|_t ¡.}|jtj    |ddddt
j   |›d¡W5QRXdS)uå°†ä¸€æ¡è®°å½•写入最新时间表中
 
        Args:
            mn_code (str): è®¾å¤‡ç¼–号
            time (str): å¯¹åº”的时间
        rFru*写入站点数据最新时间表成功!N) rrrÚsite_data_latest_timerrrrr!r"r$r%r&)r.r:r;Útempr0rr7r7r8rC}s
 
 
 
z"Repository.write_latest_time_tablecCstj d¡dS)Nu$写入基本信息表方法被调用)r$r%r&©r.r7r7r8Ú#dust_site_basis_info_store_to_mysql’s z.Repository.dust_site_basis_info_store_to_mysqlc    CsDt ¡2}tjdtj›|d}|j ¡}tj     
d¡W5QRX|S)Nzselect DISTINCT mn_code from ©ru$读取不同的设备编号成功!© rÚconnect_remote_database_readrÚread_sqlrr"r@Útolistr$r%r&)r.Úcon_readr0Úresr7r7r8Úread_diffierent_mncode˜s
 
 
z!Repository.read_diffierent_mncode)r:c    Cslt ¡Z}tjdtj›d|›d|d}|j ¡}tt    |ƒƒD]}||d 
d¡||d<q>W5QRX|S)Nzselect mn_code, max(lst) from z where mn_code = "ú"rKr<ú%Y-%m-%d %H:%M:%S) rrMrrNrr"r@rOÚrangeÚlenÚstrftime)r.r:rPr0rQÚir7r7r8Úread_site_latest_time_by_mncode¤s 
 
&z*Repository.read_site_latest_time_by_mncodec    Cspt ¡^}tjdtj›|d}|j ¡}tt    |ƒƒD]}||d 
d¡||d<q6t j   d¡W5QRX|S)ud查询读取站点最新数据的时间
 
        Returns:
            _type_: _description_
        ú select mn_code,latest_time from rKr<rTõ$读取该站点最新时间成功!©rrMrrNrGr"r@rOrUrVrWr$r%r&)r.rPr0rQrXr7r7r8Úread_site_latest_time²s
 
z Repository.read_site_latest_time)r5rc    Csvt ¡d}tjdtj›d|›|d}|j ¡}tt    |ƒƒD]}||d 
d¡||d<q<t j   d¡W5QRX|S)uy根据站点状态查询设备编号和最新数据的时间
 
        Returns:
            _type_: _description_
        rZz where device_status = rKr<rTr[r\)r.r5rPr0rQrXr7r7r8Ú*read_site_mncode_and_latest_time_by_statusÃs
 
z5Repository.read_site_mncode_and_latest_time_by_status)Únew_timec    Cs„t ¡f}| tdtj›ƒ¡tj d¡t     dd¡t ¡}t
  |¡}t  ¡|_ |jtj|ddddW5QRXtj d¡dS)    Nztruncate table u删除最新时间成功ÚremoteÚwriterFru更新站点最新时间成功)rrrArrGr"r$r%r&Z
disconnectrrrrr!)r.r_rr0r7r7r8Úupdate_latest_timeÖs
 
 
 zRepository.update_latest_time)Ú
begin_timeÚend_timerc    CsRt ¡@}tjdtj›d|›d|›d|d}|j ¡}tj     
d¡W5QRX|S)uí从站点数据表中读取某时间段的数据
 
        Args:
            begin_time (str, optional): å½“前时间.
            end_time (str, optional): å‰ä¸€å¤©æ—¶é—´. 
 
        Returns:
            list: ç«™ç‚¹åŽ†å²æ•°æ®
        z/select mn_code,dust_value,noise_value,lst from z where lst between "ú" and "rSrKu读取站点数据成功!rL)r.rcrdrPr0rQr7r7r8Úread_from_site_data_tableés
 
 
$
z$Repository.read_from_site_data_tablec    Cs²g}|D]Z}g}| |d¡| d¡| d¡| d¡| |d¡| |d¡| |¡qt |¡}t ¡|_t ¡}|jtj    |ddddW5QRXt
j   d    ¡dS)
Nru断网或掉线õ    é‡‘山区r<érFru断点或断网写入完成!© rrrÚsite_exceptionZparams_Part_to_listrrrr!r"r$r%r&©r.Ú result_listÚdataÚitemrHr0rr7r7r8Úwrite_exception_tableûs
 
 
 
 
 
 z Repository.write_exception_table)rlc    Cs¾g}|D]f}g}| |dd¡| d¡| d¡| d¡| |dd¡| |dd¡| |¡qt |¡}t ¡|_t ¡}|jtj    |dd    d    d
W5QRXt
j   d ¡dS) Nré
u数据长时段无波动rrgér<rFru+数据长时段无波动异常写入完成!rirkr7r7r8Ú)long_time_unchanged_write_exception_tables
 
 
 
 
 
 z4Repository.long_time_unchanged_write_exception_tablec    Cs¾g}|D]f}g}| |dd¡| d¡| d¡| d¡| |dd¡| |dd¡| |¡qt |¡}t ¡|_t ¡}|jtj    |dd    d    d
W5QRXt
j   d ¡dS) Nrrpu临近超标异常érgrqr<rFru临近超标异常写入完成!rirkr7r7r8Ú0near_exceeding_standard_write_to_exception_table%s
 
 
 
 
 
 z;Repository.near_exceeding_standard_write_to_exception_tablec    Cs¾g}|D]f}g}| |dd¡| d¡| d¡| d¡| |dd¡| |dd¡| |¡qt |¡}t ¡|_t ¡}|jtj    |dd    d    d
W5QRXt
j   d ¡d S) uW写入异常表
 
        Args:
            result_list (list): å¼‚常的数据
        rrpu单日超标次数临界异常érgrqrrFru+单日超标次数临界异常写入完成!Nrirkr7r7r8Ú$borderline_num_write_exception_table<s
 
 
 
 
 
 z/Repository.borderline_num_write_exception_table)Úmutation_exceptionc    CsÌg}|D]t}g}| |dd¡| d¡| d¡| d¡| |dd¡| |dd¡| t|ƒ¡| |¡qt |¡}t ¡|_t ¡}|j    tj
|dd    d    d
W5QRXt j   d ¡d S) ud写入异常表
 
        Args:
            mutation_exception (list): å¼‚常区间的数据
        rrpu滑动平均值突变Ú7rgrqrrFru"滑动平均值突变写入完成!N)rrrrrjrrrrr!r"r$r%r&)r.rwÚ    exceptionrnrHr0rr7r7r8Ú$moving_average_write_exception_tableXs 
 
 
 
 
 
 z/Repository.moving_average_write_exception_tablec    Cs²g}|D]Z}g}| |d¡| d¡| d¡| d¡| |d¡| |d¡| |¡qt |¡}t ¡|_t ¡}|jtj    |ddddW5QRXt
j   d    ¡d
S) õ‡å°†æ•°æ®è¶…低的站点数据写入扬尘异常表
 
        Args:
            result_list (list): æ•°æ®è¶…低的站点数据
        ÚMNCodeu 数据超低r<rgÚLSTrFru数据超低异常写入完成!Nrirkr7r7r8Úvalue_low_write_exception_tablews
 
 
 
 
 
 z*Repository.value_low_write_exception_tablec    Cs²g}|D]Z}g}| |d¡| d¡| d¡| d¡| |d¡| |d¡| |¡qt |¡}t ¡|_t ¡}|jtj    |ddddW5QRXt
j   d    ¡d
S) r{r|u 数据超标rhrgr}rFru数据超标异常写入完成!Nrirkr7r7r8Ú%value_exceeding_write_exception_table•s
 
 
 
 
 
 z0Repository.value_exceeding_write_exception_table)rmc    Cs¾g}|D]f}g}| |dd¡| d¡| d¡| d¡| |dd¡| |dd¡| |¡qt |¡}t ¡|_t ¡}|jtj    |dddd    W5QRXt
j   d
¡d S) uw将量级突变异常区间写入站点数据表中
 
        Args:
            data (list): å¼‚常区间数据
        ru量级突变异常Ú4rgrqr<rFru量级突变异常写入完成!Nri)r.rmZ    data_temprnrHr0rr7r7r8Úwrite_to_dust_exception_table¯s
 
 
 
 
 
 z(Repository.write_to_dust_exception_table)rmrc    CsT|dd}t ¡,}tjdtj›dtj›d|›d|d}W5QRX|j ¡}|S)Nré    zselect a.* from z  as a join z/ as b on a.mn_code = b.mn_code where b.name = "z" order by lst desc limit 1rK)    rrMrrNrr"Ú    site_infor@rO)r.rmZ    site_namerPr0rQr7r7r8Ú latest_dataÎs
 
0
zRepository.latest_datac    Cst ¡æ}d}tj||d}|j ¡}|ddt_|ddt_|ddt_    |ddt_
|ddt_ |dd    t_ |dd
t_ |dd t_|dd t_|dd t_|ddt_|ddt_|ddt_|ddt_W5QRXtj d¡dS)NzFselect * from dust_exception_setting order by update_time desc limit 1rKrérsrurqér‚rpé é é ééééu异常配置更新完成!)rrMrrNr@rOrZmiss_data_minutesZdata_lowZlong_time_no_changeZ mutation_numZ mutation_rateZnear_exceed_low_valueZnear_exceed_high_valueZnear_exceed_numZday_exceed_borderline_low_numZday_exceed_borderline_high_numZchange_trend_groupZchange_trend_intervalZchange_trend_rateZexceeding_standardr$r%r&©r.rPÚqueryr0rQr7r7r8Úread_global_exception_settingÙs&
 
z(Repository.read_global_exception_settingc    Cs†t ¡p}d}tj||d}|j ¡}|dd d¡|dd<|dd d¡|dd<|dd d¡|dd<W5QRX|dS)NzIselect * from dust_request_time_inteval order by update_time desc limit 1rKrrsrTrurq)rrMrrNr@rOrWrŽr7r7r8Ú!read_request_time_inteval_settingñs
 
$z,Repository.read_request_time_inteval_setting)Úmncoderc
Cszt ¡h}d|›d}tj||d}|j ¡}t|ƒdkrHW5QR£dS|dd|ddfW5QR£SW5QRXdS)u©è¯»å–指定设备编号的id和场景类型
 
        Args:
            mncode (str): è®¾å¤‡ç¼–号
 
        Returns:
            str: å…ƒç»„。id和场景类型
        z=select id,typename from ja_t_dust_site_info where mn_code = "rSrKr)NNr<N)rrMrrNr@rOrV)r.r’rPrr0rQr7r7r8Úread_site_names    
 
 zRepository.read_site_name)rcrdÚday_typec    CsPt ¡6}d|›d|›d|›d}tj||d}|j ¡}W5QRX|ddS)u读取指定时间段统计分析表数据数量
 
        Args:
            begin_time (str): å¼€å§‹æ—¶é—´
            end_time (str): ç»“束时间
            day_type (str): å¯é€‰å€¼â€œday”,"month"
        
        Returns:
            _type_: æ•°æ®æ¡æ•°
        z>select count(*) from dust_statistics_value where lst between "rez" and type = "rSrKr)rrMrrNr@rO)r.rcrdr”rPrr0rQr7r7r8Ú#read_statics_counts_in_special_times
 
z.Repository.read_statics_counts_in_special_timecCsdS)Nr7rIr7r7r8Úis_hava_data_in_statics_table*sz(Repository.is_hava_data_in_statics_table)rcrdc    Cs@t ¡"}| td|›d|›dƒ¡W5QRXtj d¡dS)u æ•°æ®ç»Ÿè®¡åˆ†æž æ¯æ—¥a3
            insert into  dust_statistics_value(mn_code,lst,day_avg,min,max,day_online,day_valid,day_exceeding,type)
            select  a.*
            from  (select
                    mn_code as mn_code,
                    DATE(lst) as lst,
                    ROUND(AVG(dust_value),3)  as day_avg,
                    min(dust_value) as min,
                    max(dust_value) as max,
                    CONCAT(ROUND(COUNT(*)/96*100, 2), '%')  as day_online,
                    CONCAT(ROUND(SUM(CASE WHEN dust_value >0 THEN 1 ELSE 0 END)/96 *100, 2), '%') as day_valid,
                    CONCAT(ROUND(SUM(CASE WHEN dust_value >= 1  THEN 1 ELSE 0 END)/96*100,2),'%') as  day_exceeding,
                            'day' as type
                    from ja_t_dust_site_data_info
            where  lst between "rezH"
            GROUP BY mn_code,DATE(lst)
            ) as a
            u日数据统计完成N©rrrArr$r%r&©r.rcrdrr7r7r8Údo_statics_daily.s
òòzRepository.do_statics_dailyc    Cs@t ¡"}| td|›d|›dƒ¡W5QRXtj d¡dS)u æ•°æ®ç»Ÿè®¡åˆ†æž æœˆåº¦a?
            insert into  dust_statistics_value(mn_code,lst,day_avg,min,max,day_online,day_valid,day_exceeding,type)
            select  a.*
            from  (
            SELECT
                mn_code AS mn_code,
                DATE_FORMAT(lst, '%Y-%m-01') AS month,
                ROUND(AVG(dust_value), 3) AS month_avg,
                MIN(dust_value) AS min,
                MAX(dust_value) AS max,
                CONCAT(ROUND(COUNT(*) / 2976 * 100, 2), '%') AS month_online,
                CONCAT(ROUND(SUM(CASE WHEN dust_value > 0 THEN 1 ELSE 0 END) / 2976 * 100, 2), '%') AS month_valid,
                CONCAT(ROUND(SUM(CASE WHEN dust_value >= 1 THEN 1 ELSE 0 END) / 2976 * 100, 2), '%') AS month_exceeding,
                    'month' as type
            FROM ja_t_dust_site_data_info
            WHERE lst BETWEEN "rez\"
            GROUP BY mn_code, DATE_FORMAT(lst, '%Y-%m-01')
            ) as a
            u月数据统计完成Nr—r˜r7r7r8Údo_statics_monthlyGs
ññzRepository.do_statics_monthlyN)r)#Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚlistÚboolr9r,Úintr)rCrJrRrYr]r^rbrfrorrrtrvrzr~rrr„rr‘Útupler“r•r–r™ršr7r7r7r8rs6<"  r)Zdb.database_connectrÚ
sqlalchemyrZpandasrÚutils.log_utilsr$Zget_page.data_transformationrrrZ setting.exception_nanlysis_parmsrZdb.entity.DustSiteInfor    Zdb.entity.DustSiteDatar
Zdb.entity.DustLatestTimer Zdb.entity.DustExceptionr Zdb.table.DustLatestTimeZutils.format_utilsr rƒrrGrjrr7r7r7r8Ú<module>s&