jianye_report.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. from mysql_db import MysqlDB
  2. from sql import Sql
  3. from report_public_funs_utils import ReportPublicFunsUtils as rpfu
  4. from mail_content_text import MailContentText
  5. from email_util import EmailUtil
  6. from report_file_utils import ReportFileUtils
  7. class JianYeReport(object):
  8. """
  9. 建业报表数据处理
  10. """
  11. customer_mails = ['plf@centralchina.com', 'liutt@elab-plus.com', 'binrenzhang@qq.com']
  12. #
  13. index_type = {
  14. 6: 'fenxianghuodian',
  15. 7: 'liebianhuodian',
  16. 8: 'saomadaofang',
  17. 9: 'quanminjingjiren',
  18. 10: 'laoyezhu',
  19. 11: 'baobeichenggong',
  20. 12: 'baobeidaofang'
  21. }
  22. head_1 = ['城市', '项目名称', '浏览量', '浏览人数', '新增用户', '新增获电', '推荐用户', '分享获电', '裂变获电', '扫码到访数', '全民经纪人注册数', '报备成功数', '报备到访数']
  23. brand_id = '13'
  24. def __init__(self):
  25. self.db = MysqlDB('bi_report')
  26. def get_city_house_id(self):
  27. return self.db.select(Sql.sql_1)
  28. def get_report_customers(self, task_key):
  29. return self.db.select(Sql.sql_2, [task_key])
  30. def get_mail_title(self, type, name):
  31. """
  32. 获取邮件名称
  33. :param type:1:项目,2:集团,3:区域
  34. :param name: 项目 区域名称
  35. :return:
  36. """
  37. month_day = rpfu.get_montho_day()
  38. if type == 1:
  39. return '[{}]{}数据报表'.format(month_day, name)
  40. elif type == 2:
  41. return '[{}]建业云集团数据报表'.format(month_day)
  42. elif type == 3:
  43. return '[{}]建业云{}数据报表'.format(month_day, name)
  44. def get_mail_content(self, customer_type):
  45. """
  46. 根据客户类型获取邮件正文
  47. :param customer_type:
  48. :return:
  49. """
  50. if customer_type == 2:
  51. return MailContentText.text_1
  52. else:
  53. return '本期的数据报告已经准备完成,请点击附件查阅.'
  54. # 项目级别的统计
  55. def house_data_detail(self, time_range):
  56. result = self.db.select(Sql.sql_8, [time_range[0], time_range[1]])
  57. return result
  58. def user_data_volume_statistics(self, time_range, house_ids):
  59. """
  60. 用户浏览量,人数,新增获客,新增获点数据统计
  61. :param time_range:
  62. :param house_ids:
  63. :return:
  64. """
  65. # 1:总浏览量
  66. result = []
  67. data_1_1 = self.db.select(Sql.sql_3, [time_range[0], time_range[1], house_ids])
  68. number_1_1 = data_1_1[0][0]
  69. data_1_2 = self.db.select(Sql.sql_4, [time_range[0], time_range[1], house_ids])
  70. number_1_2 = data_1_2[0][0]
  71. number_1 = rpfu.add(number_1_1, number_1_2)
  72. result.append(number_1)
  73. # 2: 总浏览人数
  74. data_2 = self.db.select(Sql.sql_5, [time_range[0], time_range[1], house_ids, time_range[0], time_range[1], house_ids])
  75. number_2 = data_2[0][0]
  76. result.append(number_2)
  77. # 3:新增获客
  78. time_1 = time_range[0] + ' 00:00:00'
  79. time_2 = time_range[1] + ' 23:59:59'
  80. data_3 = self.db.select(Sql.sql_6, [time_1, time_2, house_ids, time_1, time_2, house_ids])
  81. number_3 = data_3[0][0]
  82. result.append(number_3)
  83. # 4:新增获电
  84. data_4 = self.db.select(Sql.sql_7, [time_1, time_2, house_ids, house_ids, time_1, time_2])
  85. number_4 = data_4[0][0]
  86. result.append(number_4)
  87. return result
  88. def region_house_id(self):
  89. return self.db.select(Sql.sql_11)
  90. def get_recommend_data(self, time_range):
  91. return self.db.select(Sql.sql_9, [time_range[0], time_range[1]])
  92. def get_house_id_by_brand_id(self, brand_id):
  93. result = []
  94. for x in self.get_city_house_id():
  95. if str(x[0]) == brand_id:
  96. result.append(x[1])
  97. return result
  98. def brand_data_of_time(self, time_range):
  99. result = []
  100. ids = self.get_house_id_by_brand_id(self.brand_id)
  101. data_1 = self.user_data_volume_statistics(time_range, ids)
  102. data_2 = 0
  103. for x in self.get_recommend_data(time_range):
  104. if str(x[0]) == self.brand_id:
  105. data_2 = x[1]
  106. data_3 = []
  107. for key in self.index_type.keys():
  108. type_value = self.index_type.get(key)
  109. for x in self.db.select(Sql.sql_10, [time_range[0], time_range[1]]):
  110. if x[0] == type_value:
  111. data_3.append(x[1])
  112. result.extend(data_1)
  113. result.extend(data_2)
  114. result.extend(data_3)
  115. return result
  116. def brand_data(self):
  117. """
  118. 集团数据总览, 表一。
  119. :return:
  120. """
  121. result = []
  122. time_rang_1 = rpfu.get_prd_day()
  123. time_rang_2 = rpfu.get_time_range_month()
  124. time_range_3 = rpfu.get_all_time_data_range()
  125. result.extend(self.brand_data_of_time(time_rang_1))
  126. result.extend(self.brand_data_of_time(time_rang_2))
  127. result.extend(self.brand_data_of_time(time_range_3))
  128. return result
  129. def house_data_of_time(self, time_range, house_ids):
  130. # brand_id, house_id, house_name, city
  131. city_info = self.get_city_house_id()
  132. data_1 = []
  133. for id in house_ids:
  134. sub = [id]
  135. sub.extend(self.user_data_volume_statistics(time_range, [id]))
  136. data_1.append(sub)
  137. data_2 = []
  138. for id in house_ids:
  139. for x in self.get_recommend_data(time_range):
  140. if id == x[0]:
  141. sub = [id]
  142. sub.append(x[1])
  143. data_2.append(sub)
  144. data_3 = []
  145. for house_id in house_ids:
  146. sub = []
  147. for x in self.house_data_detail(time_range):
  148. # house_id, type, COUNT(DISTINCT customer_mobile)
  149. if house_id == x[0]:
  150. sub.append(x)
  151. house_data = []
  152. for key in self.index_type.keys():
  153. value = self.index_type.get(key)
  154. for x in sub:
  155. if value == x[1]:
  156. house_data.append(x[2])
  157. data_3.append(house_data)
  158. result = []
  159. for id in house_ids:
  160. sub = []
  161. for x in city_info:
  162. if id == x[1]:
  163. sub.extend([x[4], x[3]])
  164. for x in data_1:
  165. if id == x[0]:
  166. sub.extend(x[1:])
  167. for x in data_2:
  168. if id == x[0]:
  169. sub.extend(x[1:])
  170. for x in data_3:
  171. if id == x[0]:
  172. sub.extend(x[1:])
  173. result.append(sub)
  174. return result
  175. def house_data(self, house_ids):
  176. time_rang_1 = rpfu.get_prd_day()
  177. time_rang_2 = rpfu.get_time_range_month()
  178. time_range_3 = rpfu.get_all_time_data_range()
  179. result = []
  180. result.append(self.house_data_of_time(time_rang_1, house_ids))
  181. result.append(self.house_data_of_time(time_rang_2, house_ids))
  182. result.append(self.house_data_of_time(time_range_3, house_ids))
  183. pass
  184. def send_mail_to_customer(self, task_key):
  185. """
  186. 统计数据推送给客户, 表二
  187. :param: task_key
  188. :return:
  189. """
  190. send_mail_info = []
  191. customers = self.get_report_customers(task_key)
  192. for customer in customers:
  193. name = customer[3]
  194. customer_type = customer[2]
  195. mail = customer[4]
  196. ids = customer[5]
  197. if customer_type == 2:
  198. # 集团
  199. pass
  200. else:
  201. # 项目或区域
  202. pass
  203. pass
  204. if __name__ == '__main__':
  205. pass