ct_cbd.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # coding=utf-8
  2. import os
  3. import sys
  4. import time
  5. import datetime
  6. import pymongo
  7. from urllib import parse
  8. import django
  9. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  10. sys.path.append(BASE_DIR)
  11. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
  12. django.setup()
  13. from apps.DeviceCount.models import CbdPhoto
  14. user = parse.quote_plus("root")
  15. passwd = parse.quote_plus("yfkj@6020")
  16. # 账号密码方式连接MongoDB | "mongodb://用户名:密码@公网ip:端口/"
  17. myclient = pymongo.MongoClient("mongodb://{0}:{1}@8.136.98.49:57017/".format(user,passwd))
  18. db = myclient.smartfarming
  19. device = db.sa_device
  20. cbdphoto_a_collection = db.sa_device_cbdphoto
  21. cbdphoto_b_collection = db.sa_device_cbdphoto
  22. cbdphoto_c_collection = db.sa_device_cbdphoto
  23. def main():
  24. now = time.time()
  25. # 过去 16.5 小时间戳
  26. last = int(now) - 16.5 * 3600
  27. date_format = datetime.datetime.fromtimestamp(now).strftime("%Y-%m-%d")
  28. query = [
  29. {
  30. "$match": {
  31. "addtime":{
  32. "$gte": last
  33. }
  34. }
  35. },
  36. {
  37. "$group": {
  38. "_id": "$device_id",
  39. "count": {"$sum": 1}
  40. }
  41. },
  42. {
  43. "$sort": {"count": -1}
  44. }
  45. ,
  46. {
  47. "$match": {
  48. "count": {
  49. "$gte": 100
  50. }
  51. }
  52. }
  53. ]
  54. a_result = cbdphoto_a_collection.aggregate(query)
  55. a_result_lst = list(a_result)
  56. ids = [int(i.get("_id")) for i in a_result_lst]
  57. devices = device.find({"id": {"$in": ids}}, {"device_id": 1, "id": 1, "_id": 0})
  58. id_de = {
  59. str(i.get("id")): i.get("device_id")
  60. for i in list(devices)
  61. }
  62. for k in a_result_lst:
  63. id = k.get("_id")
  64. org_photo_ct = k.get("count")
  65. device_id = id_de.get(id)
  66. cbd_photo, is_created = CbdPhoto.objects.get_or_create(
  67. day = date_format,
  68. device_id = device_id,
  69. defaults={
  70. "day": date_format,
  71. "device_id": device_id,
  72. "org_photo_ct": org_photo_ct
  73. }
  74. )
  75. print(cbd_photo, is_created)
  76. myclient.close()
  77. if __name__ == "__main__":
  78. main()