output_file.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. import app
  2. import xlwt
  3. import log
  4. import threading
  5. import tkinter.messagebox
  6. import sql
  7. import time
  8. import datetime
  9. import os
  10. from reportlab.pdfbase import pdfmetrics
  11. from reportlab.pdfbase.ttfonts import TTFont
  12. from reportlab.platypus import Table, SimpleDocTemplate, Paragraph
  13. from reportlab.lib.pagesizes import A3, landscape
  14. from reportlab.lib.styles import getSampleStyleSheet
  15. from reportlab.lib import colors
  16. from reportlab.graphics.charts.barcharts import VerticalBarChart
  17. from reportlab.graphics.charts.legends import Legend
  18. from reportlab.graphics.shapes import Drawing
  19. pdfmetrics.registerFont(TTFont('SimSun', 'SIMYOU.TTF'))
  20. class output_file(threading.Thread):
  21. def __init__(self, threadID, name, counter, type, datastr='', filepath='', content='', master=None):
  22. threading.Thread.__init__(self)
  23. self.threadID = threadID
  24. self.name = name
  25. self.counter = counter
  26. self.filepath = filepath
  27. self.content = content
  28. self.type = type
  29. self.user_var = app.user_var
  30. self.datastr = datastr
  31. self.user_var = app.user_var
  32. self.sqlclient = sql.sqlclient
  33. self.log_file = log.log_file
  34. self.log_print = log.log_file
  35. def get_product_param(self):
  36. self.user_var.product_data.clear()
  37. idx = 0
  38. for product_name in self.user_var.product_list:
  39. if product_name == '':
  40. continue
  41. sqlstr = "SELECT product_idx,product_name,param_type,startuptime,airtime,presstime, testtime, exhaust, \
  42. maxpress, minpress, setpress, capacity, posthreshold, pnegthreshold \
  43. FROM product_param_tbl WHERE product_name='{0}' ORDER by product_idx ASC".format(product_name)
  44. results = self.sqlclient.sql_inquire_all(sqlstr)
  45. if results != None and len(results) > 0:
  46. for row in results:
  47. if row[2] == 17700:
  48. value = (
  49. row[0]+1, self.user_var.product_17700_list[idx], row[3], row[4], row[5], row[6], row[7], row[8],
  50. row[9], row[10], row[11], row[12], row[13])
  51. else:
  52. value = (
  53. row[0]+1, self.user_var.product_17720_list[idx], row[3], row[4], row[5], row[6], row[7], row[8],
  54. row[9], row[10], row[11], row[12], row[13])
  55. self.user_var.product_data.append(value)
  56. else:
  57. value = ('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')
  58. self.user_var.product_data.append(value)
  59. self.user_var.listview_stat = True
  60. def get_product_data(self):
  61. self.user_var.product_data.clear()
  62. sqlstr = 'SELECT batch,serial, product_name, testok, data_17700, data_17720, team, begin_time, end_time\
  63. FROM product_data_tbl {0}'.format(
  64. self.datastr)
  65. results = self.sqlclient.sql_inquire_all(sqlstr)
  66. if results != None and len(results) > 0:
  67. for row in results:
  68. tt = time.localtime(row[8])
  69. if row[3] == 1:
  70. testok = 'OK'
  71. else:
  72. testok = 'NG'
  73. sqlstr = "SELECT 17700_name,17720_name FROM product_tbl WHERE stat=True and product_name='{0}'".format(
  74. row[2]
  75. )
  76. paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  77. if paramresult != None and len(paramresult) > 0:
  78. for paramrow in paramresult:
  79. name_17700 = paramrow[0]
  80. name_17720 = paramrow[1]
  81. else:
  82. name_17700 = row[2]
  83. name_17720 = row[2]
  84. datalist17700 = [time.strftime("%Y-%m-%d", tt), time.strftime("%H:%M:%S", tt), row[1], row[0], testok,
  85. row[4], row[6], name_17700]
  86. sqlstr = "SELECT startuptime,airtime,presstime, testtime, exhaust, maxpress, minpress, setpress, capacity, \
  87. posthreshold, pnegthreshold FROM product_param_tbl WHERE product_name='{0}' and \
  88. param_type = 17700".format(row[2])
  89. paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  90. if paramresult != None and len(paramresult) > 0:
  91. for paramrow in paramresult:
  92. datalist17700.append(paramrow[0])
  93. datalist17700.append(paramrow[1])
  94. datalist17700.append(paramrow[2])
  95. datalist17700.append(paramrow[3])
  96. datalist17700.append(paramrow[4])
  97. datalist17700.append(paramrow[5])
  98. datalist17700.append(paramrow[6])
  99. datalist17700.append(paramrow[7])
  100. datalist17700.append(paramrow[8])
  101. datalist17700.append(paramrow[9])
  102. datalist17700.append(paramrow[10])
  103. else:
  104. datalist17700.append(0)
  105. datalist17700.append(0)
  106. datalist17700.append(0)
  107. datalist17700.append(0)
  108. datalist17700.append(0)
  109. datalist17700.append(0)
  110. datalist17700.append(0)
  111. datalist17700.append(0)
  112. datalist17700.append(0)
  113. datalist17700.append(0)
  114. datalist17700.append(0)
  115. self.user_var.product_data.append(tuple(datalist17700))
  116. datalist17720 = [time.strftime("%Y-%m-%d", tt), time.strftime("%H:%M:%S", tt), row[1], row[0], testok,
  117. row[5], row[6], name_17720]
  118. sqlstr = "SELECT startuptime, airtime,presstime, testtime, exhaust, maxpress, minpress, setpress, capacity, \
  119. posthreshold, pnegthreshold FROM product_param_tbl WHERE product_name='{0}' and \
  120. param_type = 17720".format(row[2])
  121. paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  122. if paramresult != None and len(paramresult) > 0:
  123. for paramrow in paramresult:
  124. datalist17720.append(paramrow[0])
  125. datalist17720.append(paramrow[1])
  126. datalist17720.append(paramrow[2])
  127. datalist17720.append(paramrow[3])
  128. datalist17720.append(paramrow[4])
  129. datalist17720.append(paramrow[5])
  130. datalist17720.append(paramrow[6])
  131. datalist17720.append(paramrow[7])
  132. datalist17720.append(paramrow[8])
  133. datalist17720.append(paramrow[9])
  134. datalist17720.append(paramrow[10])
  135. else:
  136. datalist17720.append(0)
  137. datalist17720.append(0)
  138. datalist17720.append(0)
  139. datalist17720.append(0)
  140. datalist17720.append(0)
  141. datalist17720.append(0)
  142. datalist17720.append(0)
  143. datalist17720.append(0)
  144. datalist17720.append(0)
  145. datalist17720.append(0)
  146. datalist17720.append(0)
  147. self.user_var.product_data.append(tuple(datalist17720))
  148. self.user_var.listview_stat = True
  149. def save_excel_file(self):
  150. try:
  151. xls = xlwt.Workbook()
  152. sht1 = xls.add_sheet("Sheet1")
  153. for row, row_content in enumerate(self.content):
  154. for column, column_content in enumerate(row_content):
  155. sht1.write(row, column, column_content)
  156. xls.save(self.filepath)
  157. return True
  158. except Exception as e:
  159. self.log_file.logger.error('写入excel文件({0})异常: {1}'.format(self.filepath, e),
  160. exc_info=True, stack_info=True)
  161. return False
  162. def draw_title(self, title):
  163. style = getSampleStyleSheet()
  164. ct = style['Normal']
  165. ct.fontName = 'SimSun'
  166. ct.fontSize = 18
  167. # 设置行距
  168. ct.leading = 50
  169. # 颜色
  170. ct.textColor = colors.green
  171. # 居中
  172. ct.alignment = 1
  173. # 添加标题并居中
  174. title = Paragraph(title, ct)
  175. return title
  176. def draw_table(self, *args):
  177. style = [
  178. ('FONTNAME', (0, 0), (-1, -1), 'SimSun'), # 字体
  179. ('BACKGROUND', (0, 0), (-1, 0), '#d5dae6'), # 设置第一行背景颜色
  180. ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # 对齐
  181. ('VALIGN', (-1, 0), (-2, 0), 'MIDDLE'), # 对齐
  182. ('GRID', (0, 0), (-1, -1), 0.5, colors.grey), # 设置表格框线为grey色,线宽为0.5
  183. ]
  184. table = Table(args, style=style)
  185. return table
  186. def save_pdf_file(self):
  187. try:
  188. content = list()
  189. content.append(self.draw_title('气密数据表'))
  190. content.append(self.draw_table(*self.content))
  191. pdf = SimpleDocTemplate(self.filepath, pagesize=landscape(A3))
  192. pdf.build(content)
  193. return True
  194. except Exception as e:
  195. self.log_file.logger.error('写入pdf文件({0})异常: {1}'.format(self.filepath, e),
  196. exc_info=True, stack_info=True)
  197. return False
  198. def delete_database_data(self):
  199. if self.user_var.del_data_stat == True:
  200. folder_path = 'D:/sqlBAK'
  201. backfileName = '{0}/G01_0350_{1}.sql'.format(folder_path, datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
  202. print(backfileName)
  203. if os.path.isdir(folder_path):
  204. print('Folder exists')
  205. else:
  206. os.mkdir(folder_path)
  207. print('Folder does not exist')
  208. if os.path.exists(backfileName):
  209. os.remove(backfileName)
  210. os.system("mysqldump -h{0} -u{1} -p{2} {3} > {4}".format('localhost', 'root',
  211. '1234qwer!@#$QWER', 'G01_0350', backfileName))
  212. sqlstr = 'DELETE FROM product_data_tbl {0}'.format(self.user_var.del_data_str)
  213. print(sqlstr)
  214. self.sqlclient.sql_action_all(sqlstr)
  215. def run(self):
  216. if self.type == 'save_excel':
  217. stat = self.save_excel_file()
  218. if stat == True:
  219. if self.user_var.del_data_stat == True:
  220. self.delete_database_data()
  221. tkinter.messagebox.showinfo(title='提示', message='文件保存成功,并已在数据库中移除对应数据!')
  222. else:
  223. tkinter.messagebox.showinfo(title='提示', message='文件保存成功!')
  224. else:
  225. tkinter.messagebox.showwarning(title='提示', message='文件保存失败!')
  226. self.user_var.file_save_stat = True
  227. print("{0}保存完成".format(self.filepath))
  228. elif self.type == 'save_pdf':
  229. stat = self.save_pdf_file()
  230. if stat == True:
  231. tkinter.messagebox.showinfo(title='提示', message='文件保存成功!')
  232. else:
  233. tkinter.messagebox.showwarning(title='提示', message='文件保存失败!')
  234. self.user_var.file_save_stat = True
  235. print("{0}保存完成".format(self.filepath))
  236. elif self.type == 'inquire_param':
  237. self.get_product_param()
  238. elif self.type == 'inquire_data':
  239. self.user_var.del_data_str = self.datastr
  240. self.get_product_data()