# -*- coding: utf-8 -*- # !/usr/bin/env python import datetime import logging import struct from typing import TYPE_CHECKING from apps.web.core.accounting import Accounting from apps.web.device.models import Device from apps.web.device.timescale import FluentedEngine, OfflineManager from script.eventer.handlers import Handler logger = logging.getLogger(__name__) if TYPE_CHECKING: pass class ShakeHandHandler(Handler): def parse(self): logger.debug('orginal payload len: {}'.format(len(self.payload))) payload = struct.pack('<{}s4s'.format(len(self.payload)), self.payload, '0000') logger.debug('now payload len: {}'.format(len(payload))) offset = 0 ts = struct.unpack_from(', money=<{}>'.format(order_id, money)) from apps.web.user.models import ConsumeRecord from mongoengine import Q order = ConsumeRecord.objects.filter(Q(orderNo=order_id) | Q(startKey=order_id)).first() if not order: continue lts = order.servicedInfo.get('lts') if lts and lts['ts'] >= ts: continue else: order.servicedInfo['lts'] = { 'ts': ts, 'money': money } order.save() continue elif _type == 0x00: # 定制设备类型同步.由各设备类型自己解析和处理数据 length = struct.unpack_from('