123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import json
- from apps.web.device.models import Device, Group
- from apps.web.eventer.base import WorkEvent, logger
- from apps.web.eventer import EventBuilder
- from apps.web.user.models import MyUser
- class builder(EventBuilder):
- def __getEvent__(self, event_data):
- """
- {
- "cmd" : 100,
- "port" : "02",
- "board" : "01",
- "IMEI" : "860344040810823",
- "status" : "lock",
- "data" : "68010204000016",
- "ts" : 1606467313
- }
- """
- if "status" in event_data:
- return GeZiGuiEvent(self.deviceAdapter, event_data)
- class GeZiGuiEvent(WorkEvent):
- def log_obj(self, obj):
- if isinstance(obj, dict):
- for k, v in obj.items():
- if isinstance(v, object):
- obj[k] = str(v)
- if isinstance(obj, list) or isinstance(obj, tuple) or isinstance(obj, set):
- obj = map(lambda x: str(x) if isinstance(x, object) else x, obj)
- if isinstance(obj, unicode):
- obj = str(obj)
- # print("\33[33m" + json.dumps(obj,ensure_ascii=True,encoding="utf-8") + "\33[0m")
- return "\33[33m" + json.dumps(obj, ensure_ascii=False, encoding="utf-8") + "\33[0m"
- def do(self):
- """
- 判断本次开门是谁开的,用户开启则推送给用户,经销商开启则推送给经销商
- {
- "cmd" : 100,
- "port" : "02",
- "board" : "01",
- "IMEI" : "860344040810823",
- "status" : "lock",
- "data" : "68010204000016",
- "ts" : 1606467313
- }
- """
- ctrInfo = Device.get_dev_control_cache(self.device.devNo)
- boardNum = int(self.event_data.get("boardNum",0))
- portNum = int(self.event_data.get("portNum", 0), 16)
- if not boardNum or not portNum:
- logger.info("invalid event. event data:{}".format(self.log_obj(self.event_data)),)
- # 端口号加载 最多两块板子48端口
- portNum = str(portNum + 24) if boardNum == "02" else str(portNum)
- group = Group.get_group(self.device['groupId'])
- lineInfo = ctrInfo.get(portNum)
- if "openId" in lineInfo and "isStart" in lineInfo:
- user = MyUser.objects.filter(openId=lineInfo.get("openId"), groupId=self.device["groupId"]).first()
- # 给用户推送
- self.notify_user(user.managerialOpenId, 'service_complete',
- **{
- 'title': "欢迎使用自助寄存服务",
- 'service': '您的物品寄存在(设备编号:%s-%s号柜门,地址:%s)' % (
- self.device['logicalCode'], portNum, group['address']),
- 'finishTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
- 'remark': u'谢谢您的支持'
- })
- else:
- # 给经销商推送
- if self.event_data.get("status") == "lock":
- return
- else:
- self.notify_dealer(
- templateName="device_fault",
- title="检测到柜门锁弹开",
- device=u"{groupNumber}组-{logicalCode}".format(groupNumber=self.device["groupNumber"],
- logicalCode=self.device["logicalCode"]),
- location=u"{address}-{groupName}".format(address=group["address"], groupName=group["groupName"]),
- fault='(设备编号:%s,端口:%s,地址:%s)检测到柜门锁弹开' % (
- self.device['logicalCode'], portNum, group['address']),
- notifyTime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- )
|