special.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. def check_id(data):
  2. return 1, data
  3. def jiao_yan_xiang_mu(data):
  4. return 1, data
  5. # 经度 113.7869444 113.7536111
  6. def jing_du(data):
  7. if data:
  8. if 113.7869444 > data > 113.7536111:
  9. return 1, data
  10. else:
  11. return 2, data
  12. else:
  13. return 2, data
  14. # 纬度 35.0458333 35.0125
  15. def weidu_du(data):
  16. if data:
  17. if 35.0458333 > data > 35.0125:
  18. return 1, data
  19. else:
  20. return 2, data
  21. else:
  22. return 2, data
  23. # 固件版本号
  24. def gu_jian_ban_ben(data):
  25. if data[0] == data[1]:
  26. return 1, data[0]
  27. else:
  28. return 2, f"设备{data[0]},输入{data[1]}"
  29. # 电压 合格条件(绿色):\n11~15
  30. def dian_ya(data):
  31. if data:
  32. min_num = min(data)
  33. max_num = max(data)
  34. if 11.0 < min_num and max_num < 15.0:
  35. return 1, f"最小值{min_num},最大值{max_num}"
  36. else:
  37. return 2, f"最小值{min_num},最大值{max_num}"
  38. else:
  39. return 2, "没有数据"
  40. # 信号 合格条件(绿色):\n>14
  41. def xin_hao(data):
  42. if data:
  43. min_num = min(data)
  44. max_num = max(data)
  45. if 14.0 < min_num:
  46. return 1, f"最小值{min_num},最大值{max_num}"
  47. else:
  48. return 2, f"最小值{min_num},最大值{max_num}"
  49. else:
  50. return 2, "没有数据"
  51. # sim卡信息 大于等于180天单元格显示绿色\n2、小于180天大于等于30天单元格显示黄色、\n3、小于30天单元格显示为红色
  52. def sim(data):
  53. if 180 <= data:
  54. return 1, f"有效期剩余{data}天"
  55. elif 30 <= data < 180:
  56. return 3, f"有效期剩余{data}天"
  57. elif data < 30:
  58. return 2, f"有效期剩余{data}天"
  59. def wei_zhi(data):
  60. if data == "河南省新乡市原阳县":
  61. return 1, data
  62. else:
  63. return 2, data
  64. # 上传数据条数 合格条件(绿色):\n1、大于7条\n2、两条数据时间间隔小于20分钟的出现频次2次以内、两条数据间隔大于40分钟出现频率2次以内
  65. def shu_ju_tiao_shu(data):
  66. if data:
  67. if len(data) > 7:
  68. # 计算数据间隔
  69. interval = []
  70. for k in range(len(data) - 1):
  71. interval.append(data[k+1] - data[k])
  72. lte_20 = []
  73. gte_40 = []
  74. for i in interval:
  75. if i < 120:
  76. lte_20.append(i)
  77. if i > 240:
  78. gte_40.append(i)
  79. if len(lte_20) < 2 and len(gte_40) < 2:
  80. return 1, f"数据量:{len(data)},间隔<20分钟:{len(lte_20)},间隔>40分钟:{len(gte_40)}"
  81. else:
  82. return 2, f"数据量:{len(data)},间隔<20分钟:{len(lte_20)},间隔>40分钟:{len(gte_40)}"
  83. else:
  84. return 2, f"数据量:{len(data)}"
  85. else:
  86. return 2, "无数据"
  87. # "风速": "合格条件(绿色):\n1、0<示值<10\n2、有1条合格 即可",
  88. def feng_su(data):
  89. if data:
  90. # 去除字段中 -99.99 数据
  91. data = [i for i in data if i != -99.99]
  92. min_num = min(data)
  93. max_num = max(data)
  94. if 0 < min_num and max_num < 10:
  95. return 1, f"最小值{min_num},最大值{max_num}"
  96. else:
  97. return 2, f"最小值{min_num},最大值{max_num}"
  98. else:
  99. return 2, "没有数据"
  100. # "风向": "合格条件(绿色):\n1、0<示值<360\n2、有1条合格即可"
  101. def feng_xiang(data):
  102. if data:
  103. # 去除字段中 -99.99 数据
  104. data = [i for i in data if i != -99.99]
  105. min_num = min(data)
  106. max_num = max(data)
  107. if 0 < min_num and max_num < 360:
  108. return 1, f"最小值{min_num},最大值{max_num}"
  109. else:
  110. return 2, f"最小值{min_num},最大值{max_num}"
  111. else:
  112. return 2, "没有数据"
  113. # "降雨量累计": "合格条件(绿色):\n1、0<示值\n2、00:00示值归零\n3、有1条合格即可"
  114. def jiang_yu(data):
  115. if data:
  116. # 去除字段中 -99.99 数据
  117. data = [i for i in data if i != -99.99]
  118. min_num = min(data)
  119. max_num = max(data)
  120. if 0.1 < min_num :
  121. return 1, f"最小值{min_num},最大值{max_num}"
  122. else:
  123. return 2, f"最小值{min_num},最大值{max_num}"
  124. else:
  125. return 2, "没有数据"
  126. # "土壤含水率": "合格条件(绿色):\n1、0<示值<=100\n2、有1条合格即可
  127. def tu_rang_han_shui(data):
  128. if data:
  129. # 去除字段中 -99.99 数据
  130. data = [i for i in data if i != -99.99]
  131. min_num = min(data)
  132. max_num = max(data)
  133. if 0 < min_num and max_num <= 100:
  134. return 1, f"最小值{min_num},最大值{max_num}"
  135. else:
  136. return 2, f"最小值{min_num},最大值{max_num}"
  137. else:
  138. return 2, "没有数据"
  139. # "土壤温度": "合格条件(绿色):\n1.≠0且在-5~35°C之间\n2、有1条合格即可"
  140. def tu_rang_wen_du(data):
  141. if data:
  142. # 去除字段中 -99.99 数据
  143. data = [i for i in data if i != -99.99]
  144. min_num = min(data)
  145. max_num = max(data)
  146. if -5 < min_num and max_num < 35:
  147. return 1, f"最小值{min_num},最大值{max_num}"
  148. else:
  149. return 2, f"最小值{min_num},最大值{max_num}"
  150. else:
  151. return 2, "没有数据"
  152. # "盐分": "合格条件(绿色):\n1、0<示值<1000#2、有1条合格即可",
  153. def yan_fen(data):
  154. if data:
  155. # 去除字段中 -99.99 数据
  156. data = [i for i in data if i != -99.99]
  157. min_num = min(data)
  158. max_num = max(data)
  159. if 0 < min_num and max_num < 1000:
  160. return 1, f"最小值{min_num},最大值{max_num}"
  161. else:
  162. return 2, f"最小值{min_num},最大值{max_num}"
  163. else:
  164. return 2, "没有数据"
  165. # "电导率": "合格条件(绿色):\n1、0<示值\n2、有1条合格即"
  166. def dian_dao_lv(data):
  167. if data:
  168. # 去除字段中 -99.99 数据
  169. data = [i for i in data if i != -99.99]
  170. min_num = min(data)
  171. max_num = max(data)
  172. if 0 < min_num:
  173. return 1, f"最小值{min_num},最大值{max_num}"
  174. else:
  175. return 2, f"最小值{min_num},最大值{max_num}"
  176. else:
  177. return 2, "没有数据"
  178. # "氮": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  179. def dan(data):
  180. if data:
  181. # 去除字段中 -99.99 数据
  182. data = [i for i in data if i != -99.99]
  183. min_num = min(data)
  184. max_num = max(data)
  185. if 0 < min_num :
  186. return 1, f"最小值{min_num},最大值{max_num}"
  187. else:
  188. return 2, f"最小值{min_num},最大值{max_num}"
  189. else:
  190. return 2, "没有数据"
  191. # "磷": "合格条件(绿色):\n1、0<示值且不能为负值\n2、有1条合格即可",
  192. def lin(data):
  193. if data:
  194. # 去除字段中 -99.99 数据
  195. data = [i for i in data if i != -99.99]
  196. min_num = min(data)
  197. max_num = max(data)
  198. if 0 < min_num:
  199. return 1, f"最小值{min_num},最大值{max_num}"
  200. else:
  201. return 2, f"最小值{min_num},最大值{max_num}"
  202. else:
  203. return 2, "没有数据"
  204. # "光合有效辐射": "合格条件(绿色):\n1、0<示值且不能为负值\n2、有1条合格即可",
  205. def guang_he_fu_she(data):
  206. if data:
  207. # 去除字段中 -99.99 数据
  208. data = [i for i in data if i != -99.99]
  209. min_num = min(data)
  210. max_num = max(data)
  211. if 0 < min_num:
  212. return 1, f"最小值{min_num},最大值{max_num}"
  213. else:
  214. return 2, f"最小值{min_num},最大值{max_num}"
  215. else:
  216. return 2, "没有数据"
  217. # "日照时数": "合格条件(绿色):\n1、0.1≤示值\n2、有1条合格即可",
  218. def ri_zhao(data):
  219. if data:
  220. # 去除字段中 -99.99 数据
  221. data = [i for i in data if i != -99.99]
  222. min_num = min(data)
  223. max_num = max(data)
  224. if 0.1 < min_num:
  225. return 1, f"最小值{min_num},最大值{max_num}"
  226. else:
  227. return 2, f"最小值{min_num},最大值{max_num}"
  228. else:
  229. return 2, "没有数据"
  230. # "PM2.5": "合格条件(绿色):\n1、0<示值且不能为负值\n2、有1条合格即可",
  231. def pm25(data):
  232. if data:
  233. # 去除字段中 -99.99 数据
  234. data = [i for i in data if i != -99.99]
  235. min_num = min(data)
  236. max_num = max(data)
  237. if 0 < min_num:
  238. return 1, f"最小值{min_num},最大值{max_num}"
  239. else:
  240. return 2, f"最小值{min_num},最大值{max_num}"
  241. else:
  242. return 2, "没有数据"
  243. # "PM10": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  244. def pm10(data):
  245. if data:
  246. # 去除字段中 -99.99 数据
  247. data = [i for i in data if i != -99.99]
  248. min_num = min(data)
  249. max_num = max(data)
  250. if 0 < min_num:
  251. return 1, f"最小值{min_num},最大值{max_num}"
  252. else:
  253. return 2, f"最小值{min_num},最大值{max_num}"
  254. else:
  255. return 2, "没有数据"
  256. # "负氧离子": "合格条件(绿色):\n1、0<示值<1000\n2、有1条合格即可",
  257. def fu_li_zi(data):
  258. if data:
  259. # 去除字段中 -99.99 数据
  260. data = [i for i in data if i != -99.99]
  261. min_num = min(data)
  262. max_num = max(data)
  263. if 0 < min_num and max_num < 1000:
  264. return 1, f"最小值{min_num},最大值{max_num}"
  265. else:
  266. return 2, f"最小值{min_num},最大值{max_num}"
  267. else:
  268. return 2, "没有数据"
  269. # "总辐射": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  270. def zong_fu_she(data):
  271. if data:
  272. # 去除字段中 -99.99 数据
  273. data = [i for i in data if i != -99.99]
  274. min_num = min(data)
  275. max_num = max(data)
  276. if 0 < min_num:
  277. return 1, f"最小值{min_num},最大值{max_num}"
  278. else:
  279. return 2, f"最小值{min_num},最大值{max_num}"
  280. else:
  281. return 2, "没有数据"
  282. # "二氧化碳": "合格条件(绿色):\n1、400<示值<1500\n2、有1条合格即可",
  283. def er_yang_hua_tan(data):
  284. if data:
  285. # 去除字段中 -99.99 数据
  286. data = [i for i in data if i != -99.99]
  287. min_num = min(data)
  288. max_num = max(data)
  289. if 400 < min_num and max_num < 1500:
  290. return 1, f"最小值{min_num},最大值{max_num}"
  291. else:
  292. return 2, f"最小值{min_num},最大值{max_num}"
  293. else:
  294. return 2, "没有数据"
  295. # "蒸发量": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  296. def zheng_fa(data):
  297. if data:
  298. # 去除字段中 -99.99 数据
  299. data = [i for i in data if i != -99.99]
  300. min_num = min(data)
  301. max_num = max(data)
  302. if 0 < min_num:
  303. return 1, f"最小值{min_num},最大值{max_num}"
  304. else:
  305. return 2, f"最小值{min_num},最大值{max_num}"
  306. else:
  307. return 2, "没有数据"
  308. # "土壤PH": "合格条件(绿色):\n1、6~8\n2、有1条合格即可",
  309. def tu_rang_ph(data):
  310. if data:
  311. # 去除字段中 -99.99 数据
  312. data = [i for i in data if i != -99.99]
  313. min_num = min(data)
  314. max_num = max(data)
  315. if 6 < min_num and max_num < 8:
  316. return 1, f"最小值{min_num},最大值{max_num}"
  317. else:
  318. return 2, f"最小值{min_num},最大值{max_num}"
  319. else:
  320. return 2, "没有数据"
  321. # "钾": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  322. def jia(data):
  323. if data:
  324. # 去除字段中 -99.99 数据
  325. data = [i for i in data if i != -99.99]
  326. min_num = min(data)
  327. max_num = max(data)
  328. if 0 < min_num:
  329. return 1, f"最小值{min_num},最大值{max_num}"
  330. else:
  331. return 2, f"最小值{min_num},最大值{max_num}"
  332. else:
  333. return 2, "没有数据"
  334. # "紫外辐射": "合格条件(绿色):\n1、0<示 值\n2、有1条合格即可",
  335. def zi_wai_fu_she(data):
  336. if data:
  337. # 去除字段中 -99.99 数据
  338. data = [i for i in data if i != -99.99]
  339. min_num = min(data)
  340. max_num = max(data)
  341. if 0 < min_num:
  342. return 1, f"最小值{min_num},最大值{max_num}"
  343. else:
  344. return 2, f"最小值{min_num},最大值{max_num}"
  345. else:
  346. return 2, "没有数据"
  347. # "空气温度": "合格条件(绿色):\n1.-10~35°C,但不允许为0°C\n2、有1条合格即可",
  348. def keong_qi_wen_du(data):
  349. if data:
  350. # 去除字段中 -99.99 数据
  351. data = [i for i in data if i != -99.99]
  352. min_num = min(data)
  353. max_num = max(data)
  354. if -10 < min_num and max_num < 35 and 0.0 not in data:
  355. return 1, f"最小值{min_num},最大值{max_num}"
  356. else:
  357. return 2, f"最小值{min_num},最大值{max_num}"
  358. else:
  359. return 2, "没有数据"
  360. # "空气湿度": "合格条件(绿色):\n1、0<示值<100\n2、有1条合格即可",
  361. def keong_qi_shi_du(data):
  362. if data:
  363. # 去除字段中 -99.99 数据
  364. data = [i for i in data if i != -99.99]
  365. min_num = min(data)
  366. max_num = max(data)
  367. if 0 < min_num and max_num < 100:
  368. return 1, f"最小值{min_num},最大值{max_num}"
  369. else:
  370. return 2, f"最小值{min_num},最大值{max_num}"
  371. else:
  372. return 2, "没有数据"
  373. # "水质pH": "合格条件(绿色):\n1、6≤示值≤8\n2、有1条合格即可",
  374. def shui_zhi_ph(data):
  375. if data:
  376. # 去除字段中 -99.99 数据
  377. data = [i for i in data if i != -99.99]
  378. min_num = min(data)
  379. max_num = max(data)
  380. if 6 < min_num and max_num < 8:
  381. return 1, f"最小值{min_num},最大值{max_num}"
  382. else:
  383. return 2, f"最小值{min_num},最大值{max_num}"
  384. else:
  385. return 2, "没有数据"
  386. # "水位": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  387. def shui_wei(data):
  388. if data:
  389. # 去除字段中 -99.99 数据
  390. data = [i for i in data if i != -99.99]
  391. min_num = min(data)
  392. max_num = max(data)
  393. if 0 < min_num:
  394. return 1, f"最小值{min_num},最大值{max_num}"
  395. else:
  396. return 2, f"最小值{min_num},最大值{max_num}"
  397. else:
  398. return 2, "没有数据"
  399. # "水质电导率": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  400. def shui_zhi_dao_dian(data):
  401. if data:
  402. # 去除字段中 -99.99 数据
  403. data = [i for i in data if i != -99.99]
  404. min_num = min(data)
  405. max_num = max(data)
  406. if 0 < min_num:
  407. return 1, f"最小值{min_num},最大值{max_num}"
  408. else:
  409. return 2, f"最小值{min_num},最大值{max_num}"
  410. else:
  411. return 2, "没有数据"
  412. # "气压": "合格条件(绿色):\n1、900<示值<1150\n2、有1条合格即可",
  413. def qi_ya(data):
  414. if data:
  415. # 去除字段中 -99.99 数据
  416. data = [i for i in data if i != -99.99]
  417. min_num = min(data)
  418. max_num = max(data)
  419. if 900 < min_num and max_num < 1150:
  420. return 1, f"最小值{min_num},最大值{max_num}"
  421. else:
  422. return 2, f"最小值{min_num},最大值{max_num}"
  423. else:
  424. return 2, "没有数据"
  425. # "光照度": "合格条件(绿色):\n1、0<示值<200000\n2、有1条合格即可",
  426. def guang_zhao_du(data):
  427. if data:
  428. # 去除字段中 -99.99 数据
  429. data = [i for i in data if i != -99.99]
  430. min_num = min(data)
  431. max_num = max(data)
  432. if 0 < min_num and max_num < 200000:
  433. return 1, f"最小值{min_num},最大值{max_num}"
  434. else:
  435. return 2, f"最小值{min_num},最大值{max_num}"
  436. else:
  437. return 2, "没有数据"
  438. # "硫化氢": "合格条件(绿色):\n1、示值=0\n2、有1条合格即可",
  439. def liu_hua_qing(data):
  440. if data:
  441. # 去除字段中 -99.99 数据
  442. data = [i for i in data if i != -99.99]
  443. data = list(set(data))
  444. if len(data) == 1 and data[0] == 0:
  445. return 1, 0
  446. else:
  447. return 2, 0
  448. else:
  449. return 2, 0
  450. # "水温": "合格条件(绿色):\n1.0~30°C,但不允许为0°C\n2、 有1条合格即可",
  451. def shui_wen(data):
  452. if data:
  453. # 去除字段中 -99.99 数据
  454. data = [i for i in data if i != -99.99]
  455. min_num = min(data)
  456. max_num = max(data)
  457. if 1.0 < min_num and max_num < 30:
  458. return 1, f"最小值{min_num},最大值{max_num}"
  459. else:
  460. return 2, f"最小值{min_num},最大值{max_num}"
  461. else:
  462. return 2, "没有数据"
  463. # "溶解氧": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  464. def rong_jie_yang(data):
  465. if data:
  466. # 去除字段中 -99.99 数据
  467. data = [i for i in data if i != -99.99]
  468. min_num = min(data)
  469. max_num = max(data)
  470. if 0 < min_num:
  471. return 1, f"最小值{min_num},最大值{max_num}"
  472. else:
  473. return 2, f"最小值{min_num},最大值{max_num}"
  474. else:
  475. return 2, "没有数据"
  476. # "浊度": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  477. def zhuo_du(data):
  478. if data:
  479. # 去除字段中 -99.99 数据
  480. data = [i for i in data if i != -99.99]
  481. min_num = min(data)
  482. max_num = max(data)
  483. if 0 < min_num:
  484. return 1, f"最小值{min_num},最大值{max_num}"
  485. else:
  486. return 2, f"最小值{min_num},最大值{max_num}"
  487. else:
  488. return 2, "没有数据"
  489. # "氨气": "合格条件(绿色):\n1、示值=0\n2、有1条合格即可",
  490. def an_qi(data):
  491. if data:
  492. # 去除字段中 -99.99 数据
  493. data = [i for i in data if i != -99.99]
  494. data = list(set(data))
  495. if len(data) == 1 and data[0] == 0:
  496. return 1, 0
  497. else:
  498. return 2, 0
  499. else:
  500. return 2, "没有数据"
  501. # "氧气": "合格条件(绿色):\n1、0<示值\n2、有1条合格即可",
  502. def yang_qi(data):
  503. if data:
  504. # 去除字段中 -99.99 数据
  505. data = [i for i in data if i != -99.99]
  506. min_num = min(data)
  507. max_num = max(data)
  508. if 0 < min_num:
  509. return 1, f"最小值{min_num},最大值{max_num}"
  510. else:
  511. return 2, f"最小值{min_num},最大值{max_num}"
  512. else:
  513. return 2, "没有数据"
  514. # "PM100": "合格条件(绿色):\n1、0<示值\n2 、有1条合格即可",
  515. def pm100(data):
  516. if data:
  517. # 去除字段中 -99.99 数据
  518. data = [i for i in data if i != -99.99]
  519. min_num = min(data)
  520. max_num = max(data)
  521. if 0 < min_num:
  522. return 1, f"最小值{min_num},最大值{max_num}"
  523. else:
  524. return 2, f"最小值{min_num},最大值{max_num}"
  525. else:
  526. return 2, "没有数据"
  527. # "露点温度": "合格条件(绿色):\n1.-10~35°C,但不允许为0°C\n2、有1条合格即可",
  528. def lou_dian_wen_du(data):
  529. if data:
  530. # 去除字段中 -99.99 数据
  531. data = [i for i in data if i != -99.99]
  532. min_num = min(data)
  533. max_num = max(data)
  534. if -10 < min_num and max_num < 35 and 0.0 not in data:
  535. return 1, f"最小值{min_num},最大值{max_num}"
  536. else:
  537. return 2, f"最小值{min_num},最大值{max_num}"
  538. else:
  539. return 2, "没有数据"
  540. # 热通量 上传条数的数据在均在±500内(但不能为0),即判定合格,否则不合格
  541. def re_tong_liang(data):
  542. if data:
  543. # 去除字段中 -99.99 数据
  544. data = [i for i in data if i != -99.99]
  545. min_num = min(data)
  546. max_num = max(data)
  547. if -500 < min_num and max_num < 500 and 0.0 not in data:
  548. return 1, f"最小值{min_num},最大值{max_num}"
  549. else:
  550. return 2, f"最小值{min_num},最大值{max_num}"
  551. else:
  552. return 2, "没有数据"
  553. # 合格数量
  554. def he_ge_shu(data):
  555. return data[0], data[1]