statistics.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # -*- coding:utf-8 -*-
  2. # @Time : 2018/5/22 1:25 PM
  3. # @Author : Swing
  4. import pymongo
  5. import time
  6. import re
  7. import email_util
  8. MONGO_HOST = 'mongodb://logdb:logdb@dds-uf6da0fedc9881d41450-pub.mongodb.rds.aliyuncs.com:3717,dds-uf6da0fedc9881d42459-pub.mongodb.rds.aliyuncs.com:3717/logdb?replicaSet=mgset-12835903'
  9. def daily_statistic():
  10. now_date: time = time.localtime(time.time())
  11. year = now_date.tm_year
  12. month = now_date.tm_mon
  13. day = now_date.tm_mday
  14. month_str = str(year) + '-'
  15. if month < 10:
  16. month_str += '0'
  17. month_str += str(month)
  18. day_str = month_str + '-'
  19. if day < 10:
  20. day_str += '0'
  21. day_str += str(day)
  22. date_reg = re.compile(day_str)
  23. area_reg = re.compile(r'(^[5][5-9][^\d])|(^[6][0-5][^\d])')
  24. city_residential_query_args = {'date': date_reg, 'area': area_reg, 'property_type': '普通住宅', 'decoration': {'$in': ['精装修', '豪华装修']}}
  25. city_department_query_args = {'date': date_reg, 'area': area_reg, 'property_type': '公寓', 'decoration': {'$in': ['精装修', '豪华装修']}}
  26. part_residential_query_args = {'date': date_reg, 'area': area_reg, 'property_type': '普通住宅', 'decoration': {'$in': ['精装修', '豪华装修']}}
  27. part_department_query_args = {'date': date_reg, 'area': area_reg, 'property_type': '公寓', 'decoration': {'$in': ['精装修', '豪华装修']}}
  28. city_residential_query_args_sold = {'date': date_reg, 'property_type': '普通住宅'}
  29. city_department_query_args_sold = {'date': date_reg, 'property_type': '公寓'}
  30. part_residential_query_args_sold = {'date': date_reg, 'property_type': '普通住宅'}
  31. part_department_query_args_sold = {'date': date_reg, 'property_type': '公寓'}
  32. task_args = [
  33. city_residential_query_args,
  34. city_department_query_args,
  35. part_residential_query_args,
  36. part_department_query_args,
  37. city_residential_query_args_sold,
  38. city_department_query_args_sold,
  39. part_residential_query_args_sold,
  40. part_department_query_args_sold
  41. ]
  42. city_residential_average_rental = 0
  43. city_department_average_rental = 0
  44. part_residential_average_rental = 0
  45. part_department_average_rental = 0
  46. city_residential_average_sold = 0
  47. city_department_average_sold = 0
  48. part_residential_average_sold = 0
  49. part_department_average_sold = 0
  50. db = __open_db()
  51. for i in range(len(task_args)):
  52. col_name = ''
  53. if i in [0, 1]:
  54. col_name = 'rental_house'
  55. elif i in [2, 3]:
  56. col_name = 'sjk_rental_house'
  57. elif i in [4, 5]:
  58. col_name = 'nb_resold_house'
  59. elif i in [6, 7]:
  60. col_name = 'sjk_resold_house'
  61. data_list = __query_data(col_name, task_args[i], db)
  62. if data_list.count() == 0:
  63. continue
  64. average = __calculate_average_price(data_list)
  65. if i == 0:
  66. city_residential_average_rental = average
  67. elif i == 1:
  68. city_department_average_rental = average
  69. elif i == 2:
  70. part_residential_average_rental = average
  71. elif i == 3:
  72. part_department_average_rental = average
  73. elif i == 4:
  74. city_residential_average_sold = average
  75. elif i == 5:
  76. city_department_average_sold = average
  77. elif i == 6:
  78. part_residential_average_sold = average
  79. elif i == 7:
  80. part_department_average_sold = average
  81. # 住宅出租均价
  82. rental_residential_filter_args = {
  83. 'day': day_str,
  84. 'property_type': '1'
  85. }
  86. rental_residential_update_args = {
  87. 'city_price': city_residential_average_rental if city_residential_average_rental > 0 else 2290,
  88. 'part_price': part_residential_average_rental if part_residential_average_rental > 0 else 3100,
  89. 'month': month_str,
  90. 'update_date': time.strftime('%Y-%m-%d %H:%M:%S'),
  91. 'house_id': '109'
  92. }
  93. __update_data(db, 'rental_statistics', rental_residential_filter_args, rental_residential_update_args)
  94. # 公寓出租均价
  95. rental_department_filter_args = {
  96. 'day': day_str,
  97. 'property_type': '2'
  98. }
  99. rental_department_update_args = {
  100. 'city_price': city_department_average_rental if city_department_average_rental > 0 else 2330,
  101. 'part_price': part_department_average_rental if part_department_average_rental > 0 else 2850,
  102. 'month': month_str,
  103. 'update_date': time.strftime('%Y-%m-%d %H:%M:%S'),
  104. 'house_id': '109'
  105. }
  106. __update_data(db, 'rental_statistics', rental_department_filter_args, rental_department_update_args)
  107. # 住宅出售均价
  108. sold_residential_filter_args = {
  109. 'day': day_str,
  110. 'property_type': '1'
  111. }
  112. sold_residential_update_args = {
  113. 'city_price': city_residential_average_sold if city_residential_average_sold > 0 else 19920,
  114. 'part_price': part_residential_average_sold if part_residential_average_sold > 0 else 24450,
  115. 'month': month_str,
  116. 'update_date': time.strftime('%Y-%m-%d %H:%M:%S'),
  117. 'house_id': '109'
  118. }
  119. __update_data(db, 'sold_statistics', sold_residential_filter_args, sold_residential_update_args)
  120. # 公寓出售均价
  121. sold_department_filter_args = {
  122. 'day': day_str,
  123. 'property_type': '2'
  124. }
  125. sold_department_update_args = {
  126. 'city_price': city_department_average_sold if city_department_average_sold > 0 else 15650,
  127. 'part_price': part_department_average_sold if part_department_average_sold > 0 else 21560,
  128. 'month': month_str,
  129. 'update_date': time.strftime('%Y-%m-%d %H:%M:%S'),
  130. 'house_id': '109'
  131. }
  132. __update_data(db, 'sold_statistics', sold_department_filter_args, sold_department_update_args)
  133. # 关闭数据库连接
  134. db.client.close()
  135. # 每日统计数据 通知谷晓晨
  136. statistic_data = '宁波公寓租金: ' + str(city_department_average_rental) + '\n'
  137. statistic_data += ('宁波住宅租金: ' + str(city_residential_average_rental) + '\n')
  138. statistic_data += ('三江口公寓租金: ' + str(part_department_average_rental) + '\n')
  139. statistic_data += ('三江口住宅租金: ' + str(part_residential_average_rental) + '\n')
  140. statistic_data += ('宁波公寓售价: ' + str(city_department_average_sold) + '\n')
  141. statistic_data += ('宁波住宅售价: ' + str(city_residential_average_sold) + '\n')
  142. statistic_data += ('三江口公寓售价: ' + str(part_department_average_sold) + '\n')
  143. statistic_data += ('三江口住宅售价: ' + str(part_residential_average_sold) + '\n')
  144. email_util.send_email('每日统计数据', statistic_data, ['guxc@elab-plus.com', 'liuhx@elab-plus.com', 'zhaojh@elab-plus.com'])
  145. # 计算平均值
  146. def __calculate_average_price(data_list):
  147. price_list = []
  148. for data in data_list:
  149. try:
  150. date_str = re.search(r'[0-9]{4,}', data['price']).group()
  151. if date_str:
  152. price_list.append(float(date_str))
  153. except Exception as err:
  154. pass
  155. sum = 0
  156. for price in price_list:
  157. sum += price
  158. if len(price_list) == 0:
  159. return 0
  160. average = int(round(sum / len(price_list)))
  161. return average
  162. # db 操作
  163. def __query_data(collection, query_args, db):
  164. coll = db[collection]
  165. data_list = coll.find(query_args).sort('data', -1)
  166. return data_list
  167. # 更新数据
  168. def __update_data(db, collection, filter, update):
  169. coll = db[collection]
  170. coll.update_one(filter, {'$set': update}, upsert=True)
  171. # 打开数据库
  172. def __open_db():
  173. # client = pymongo.MongoClient('101.132.106.154', authSource='logdb', authMechanism='SCRAM-SHA-1')
  174. client = pymongo.MongoClient(MONGO_HOST, authSource='logdb')
  175. db = client['logdb']
  176. return db
  177. # list = [
  178. # '2018-05-01',
  179. # '2018-05-02',
  180. # '2018-05-03',
  181. # '2018-05-04',
  182. # '2018-05-05',
  183. # '2018-05-06',
  184. # '2018-05-07',
  185. # '2018-05-08',
  186. # '2018-05-09',
  187. # '2018-05-10',
  188. # '2018-05-11',
  189. # '2018-05-12',
  190. # '2018-05-13',
  191. # '2018-05-14',
  192. # '2018-05-15',
  193. # '2018-05-16',
  194. # '2018-05-17',
  195. # '2018-05-18',
  196. # '2018-05-19',
  197. # '2018-05-20',
  198. # '2018-05-21',
  199. # '2018-05-22'
  200. # ]
  201. #
  202. # for i in list:
  203. # daily_statistic()