main.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # encoding=utf-8
  2. from cgi import print_arguments
  3. from multiprocessing.managers import DictProxy
  4. from operator import delitem
  5. from unittest import result
  6. from PyQt5 import QtCore, QtGui, QtWidgets
  7. import os
  8. import sys
  9. import re
  10. import ast
  11. from urllib import parse
  12. import json
  13. import time
  14. import datetime
  15. import requests
  16. import uuid
  17. import pymongo
  18. import pymysql
  19. from collections import defaultdict, Counter
  20. from xlsxwriter.workbook import Workbook
  21. from mongoclient import (
  22. get_qxz_conf,
  23. device_detail_deivce_id,
  24. get_sa_qxz_info_record,
  25. get_sa_qxz_data,
  26. get_conf_data,
  27. get_sim_info
  28. )
  29. from utils import (
  30. merge_title_format,
  31. toji_format,
  32. formal_format,
  33. error_format,
  34. common_format,
  35. default_formal,
  36. get_excel_content,
  37. head_dict,
  38. sim_info
  39. )
  40. def run():
  41. start = "2023-08-28 10:00:00"
  42. end = "2023-08-31 20:00:00"
  43. dever_num = "111"
  44. # 获取所有的device_id
  45. device_list = get_excel_content("F:\\scripting_tools\\热通量增加测试.xlsx")
  46. workbook = Workbook("F:\\test.xlsx")
  47. worksheet = workbook.add_worksheet()
  48. merge_title_style = workbook.add_format(merge_title_format)
  49. toji_style = workbook.add_format(toji_format)
  50. default_style = workbook.add_format(default_formal)
  51. red_style = workbook.add_format(error_format)
  52. green_style = workbook.add_format(formal_format)
  53. yellow_style = workbook.add_format(common_format)
  54. style_dict = {
  55. 2: red_style,
  56. 1: green_style,
  57. 3: yellow_style,
  58. 4: default_style
  59. }
  60. title_name_list = [
  61. "ID",
  62. "检验项目",
  63. "电压",
  64. "信号强度",
  65. "经度",
  66. "纬度",
  67. "固件版本号",
  68. "sim卡信息",
  69. "位置信息"
  70. ]
  71. # 查找第一台设备的配置文件,获取配置项
  72. device_id, _, _, _, _ = device_detail_deivce_id(device_list[0])
  73. conf = get_qxz_conf(device_id)
  74. title_name_list += [v.split("#")[0] for k, v in conf.items()]
  75. title_name_list.append("单台合格数")
  76. head_list = [i.split("#")[0] for i in title_name_list]
  77. worksheet.merge_range(0, 0, 0, len(head_list) - 1, "物联网气象站设备质检表格", merge_title_style)
  78. toji_data = [
  79. "任务单号",
  80. "set_order",
  81. "检验时间",
  82. "start_time_str",
  83. "end_time_str",
  84. "报告日期",
  85. (datetime.datetime.now()).strftime("%y-%m-%d %H:%M:%S"),
  86. "合格数"
  87. ]
  88. # 生成Excel表格第2行, 本次数据概要
  89. for index, k in enumerate(toji_data):
  90. value = str(k)
  91. worksheet.write(1, index, value, toji_style)
  92. # 生成Excel表格第3行, 检测标题
  93. for index, k in enumerate(title_name_list):
  94. worksheet.write(2, index, k, default_style)
  95. # 生成Excel表格第4行, 检测标准
  96. for index, k in enumerate(title_name_list):
  97. value = (head_dict.get(k, ["无判定条件", ""]))[0]
  98. worksheet.write(3, index, value, default_style)
  99. plus = 12 if index in [0, 1] else 8
  100. c_n = len(value) / 2 + plus
  101. worksheet.set_column(index, index, c_n)
  102. # 输入数据
  103. is_pass_count = 0
  104. for index, id in enumerate(device_list):
  105. device_id, dver_num, lng, lat, position = device_detail_deivce_id(id)
  106. # 获取电压,信号强度历史数据
  107. valt_rssi = get_sa_qxz_info_record(device_id, start, end)
  108. # 获取sim卡信息
  109. sim = get_sim_info(device_id, start, end)
  110. sim_in = sim_info(sim)
  111. # 第一部分拼接 表头及数据
  112. org_data = {
  113. "id_1": {"data": id, "explan": "ID"},
  114. "id_2": {"data": device_id, "explan": "检验项目"},
  115. "id_3": valt_rssi.get("volt"), # 电压
  116. "id_4": valt_rssi.get("rssi"), # 信号强度
  117. "id_5": {"data": lng, "explan": "经度"},
  118. "id_6": {"data": lat, "explan": "纬度"},
  119. "id_7": {"data": [dver_num.replace("/", "-"), dever_num], "explan": "固件版本号"},
  120. "id_8": {"data": sim_in, "explan": "sim卡信息"},
  121. "id_9": {"data": position, "explan": "位置信息"},
  122. }
  123. conf = get_qxz_conf(device_id)
  124. # 获取数据
  125. qx_data = get_sa_qxz_data(device_id, start, end, conf)
  126. # 第二部分拼接 表头及数据 获取气象与数据结合
  127. conf_data = get_conf_data(conf, qx_data)
  128. org_data.update(conf_data)
  129. i = 0
  130. is_right = 0
  131. for t, v in org_data.items():
  132. # 执行方法
  133. name = v.get("explan")
  134. data = v.get("data")
  135. func = head_dict.get(name)[1]
  136. if data:
  137. print(name)
  138. print(data)
  139. print("-"*100)
  140. temp = func(data)
  141. if temp[0] == 1:
  142. is_right += 1
  143. else:
  144. temp = [2, "没有数据"]
  145. worksheet.write(index + 4, i, temp[1], style_dict[temp[0]])
  146. i += 1
  147. last = []
  148. if is_right == len(title_name_list) - 3:
  149. last = [1, "合格"]
  150. is_pass_count += 1
  151. else:
  152. last = [2, f"不合格: {len(title_name_list) - is_right - 3}"]
  153. worksheet.write(index + 4, i, last[1], style_dict[last[0]])
  154. worksheet.write(1, 8, is_pass_count, toji_style)
  155. workbook.close()
  156. if __name__ == "__main__":
  157. run()