gezigui.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import json
  5. from apps.web.device.models import Device, Group
  6. from apps.web.eventer.base import WorkEvent, logger
  7. from apps.web.eventer import EventBuilder
  8. from apps.web.user.models import MyUser
  9. class builder(EventBuilder):
  10. def __getEvent__(self, event_data):
  11. """
  12. {
  13. "cmd" : 100,
  14. "port" : "02",
  15. "board" : "01",
  16. "IMEI" : "860344040810823",
  17. "status" : "lock",
  18. "data" : "68010204000016",
  19. "ts" : 1606467313
  20. }
  21. """
  22. if "status" in event_data:
  23. return GeZiGuiEvent(self.deviceAdapter, event_data)
  24. class GeZiGuiEvent(WorkEvent):
  25. def log_obj(self, obj):
  26. if isinstance(obj, dict):
  27. for k, v in obj.items():
  28. if isinstance(v, object):
  29. obj[k] = str(v)
  30. if isinstance(obj, list) or isinstance(obj, tuple) or isinstance(obj, set):
  31. obj = map(lambda x: str(x) if isinstance(x, object) else x, obj)
  32. if isinstance(obj, unicode):
  33. obj = str(obj)
  34. # print("\33[33m" + json.dumps(obj,ensure_ascii=True,encoding="utf-8") + "\33[0m")
  35. return "\33[33m" + json.dumps(obj, ensure_ascii=False, encoding="utf-8") + "\33[0m"
  36. def do(self):
  37. """
  38. 判断本次开门是谁开的,用户开启则推送给用户,经销商开启则推送给经销商
  39. {
  40. "cmd" : 100,
  41. "port" : "02",
  42. "board" : "01",
  43. "IMEI" : "860344040810823",
  44. "status" : "lock",
  45. "data" : "68010204000016",
  46. "ts" : 1606467313
  47. }
  48. """
  49. ctrInfo = Device.get_dev_control_cache(self.device.devNo)
  50. boardNum = int(self.event_data.get("boardNum",0))
  51. portNum = int(self.event_data.get("portNum", 0), 16)
  52. if not boardNum or not portNum:
  53. logger.info("invalid event. event data:{}".format(self.log_obj(self.event_data)),)
  54. # 端口号加载 最多两块板子48端口
  55. portNum = str(portNum + 24) if boardNum == "02" else str(portNum)
  56. group = Group.get_group(self.device['groupId'])
  57. lineInfo = ctrInfo.get(portNum)
  58. if "openId" in lineInfo and "isStart" in lineInfo:
  59. user = MyUser.objects.filter(openId=lineInfo.get("openId"), groupId=self.device["groupId"]).first()
  60. # 给用户推送
  61. self.notify_user(user.managerialOpenId, 'service_complete',
  62. **{
  63. 'title': "欢迎使用自助寄存服务",
  64. 'service': '您的物品寄存在(设备编号:%s-%s号柜门,地址:%s)' % (
  65. self.device['logicalCode'], portNum, group['address']),
  66. 'finishTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
  67. 'remark': u'谢谢您的支持'
  68. })
  69. else:
  70. # 给经销商推送
  71. if self.event_data.get("status") == "lock":
  72. return
  73. else:
  74. self.notify_dealer(
  75. templateName="device_fault",
  76. title="检测到柜门锁弹开",
  77. device=u"{groupNumber}组-{logicalCode}".format(groupNumber=self.device["groupNumber"],
  78. logicalCode=self.device["logicalCode"]),
  79. location=u"{address}-{groupName}".format(address=group["address"], groupName=group["groupName"]),
  80. fault='(设备编号:%s,端口:%s,地址:%s)检测到柜门锁弹开' % (
  81. self.device['logicalCode'], portNum, group['address']),
  82. notifyTime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  83. )