statistics.py 8.4 KB

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