Пример #1
0
def _exit_cb(srv, item, payload):
    try:
        data = payload[KETUO_EXIT_TYPE]
        park_id = int(data['parkID'])
        event_type = data['eventType']
        fields = data['data']

        car_no = fields['carPatenum']
        parking_id = fields['id']
        entry_time = fields['comeTime']
        entry_time = str2datetime(entry_time)
        exit_time = fields['outTime']
        exit_time = str2datetime(exit_time)
        exit_code = fields['outPlace']
        duration = (exit_time - entry_time).total_seconds() / 60

        pay_money = float(fields['payMoney'])
        pre_money = float(fields['preMoney'])
        ticket = float(fields['ticket'])
        total_money = float(fields['totalMoney'])
        in2out_money = float(fields['InToOutMoney'])
        fee = in2out_money if in2out_money >= total_money else total_money
        if pre_money > fee:
            fee = pre_money
        elif ticket > fee:
            fee = ticket
        elif pay_money > fee:
            fee = pay_money
    except Exception, e:
        message = "[EXIT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #2
0
def handle_ketuo_payment(srv, item, m_pay):
    backup_db = BackupDatabase(srv, m_pay.info)
    models = (KeTuoPrepaidFee, )

    car_no = m_pay.car_no[-6:]
    with backup_db.database.bind_ctx(models):
        try:
            # TODO: entry_time ?
            defaults = dict(pay_fee=m_pay.fee,
                            pay_time=m_pay.pay_time,
                            pay_channel=2,
                            amount=m_pay.fee,
                            casher=199,
                            car_serial=0,
                            serial_type=10,
                            is_paid=1)
            prepaid_fee, created = KeTuoPrepaidFee.get_or_create(
                car_no=car_no, parking_id=m_pay.parking, defaults=defaults)
            if not created:
                # loggine me
                pass
        except Exception, e:
            backup_db.close()
            message = "[HANDLE_KETUO_PAYMENT] park [%s] car [%s] catch exception [%s]" % (
                m_pay.park, m_pay.car_no, str(e))
            do_log(srv, item, "ERROR", LOG_T_DB, message)
            return False
Пример #3
0
def handle_payment_ack(srv,
                       item,
                       park_id,
                       parking,
                       car_no,
                       local_state,
                       order_no=None):
    _srv = srv

    try:
        with _srv.database:
            if order_no is None:
                query = ClientBill.update(local_state=local_state).where(
                    (ClientBill.parking_id == parking)
                    & (ClientBill.park == park_id)
                    & (ClientBill.car_no == car_no))
            else:
                query = ClientBill.update(local_state=local_state).where(
                    (ClientBill.order_no == order_no)
                    & (ClientBill.park == park_id)
                    & (ClientBill.car_no == car_no))
            query.execute()
    except Exception, e:
        message = "[PAYMENT_ACK] park [%s] car [%s] catch exception [%s]" % (
            park_id, car_no, str(e))
        do_log(srv, item, "ERROR", LOG_T_DB, message)
        return False
Пример #4
0
    def _client_loads(self):
        payload = self.item.get('payload')

        if payload.find('\\') <> -1:
            payload = payload.replace('\\', '\\\\')

        json_list = []
        str_list = []
        plist = payload.split('}{')
        if len(plist) > 1:
            for i in range(len(plist)):
                if i == 0:
                    str_list.append(plist[i] + '}')
                elif i == len(plist) - 1:
                    str_list.append('{' + plist[i])
                else:
                    str_list.append('{' + plist[i] + '}')
        else:
            str_list.append(plist[0])
        try:
            for i in str_list:
                json_list.append(json.loads(i))
        except Exception, e:
            message = "[_CLIENT_LOADS] payload [%s] catch exception [%s]" % (
                str(payload), str(e))
            do_log(self.srv, self.item, "WARN", LOG_T_LOCAL, message)
Пример #5
0
def _send(srv, item, topic, payload_json):
    qos = 2

    try:
        _payload = json.dumps(payload_json)
    except Exception, e:
        message = "[SEND] payload [%s] catch exception [%s]" % (
            str(payload_json), str(e))
        do_log(srv, item, "WARN", LOG_T_INNER, message)
        return False
Пример #6
0
    def _loads(self):
        payload = self.item.get('payload')

        try:
            payload = json.loads(payload)
            data_type = payload['dataType']
        except Exception, e:
            message = "[_LOADS] payload [%s] catch exception [%s]" % (
                str(payload), str(e))
            do_log(srv, item, "WARN", LOG_T_SERVER, message)
            return False
Пример #7
0
def _heartbeat_cb(srv, item, payload):
    try:
        data = payload[SYM_HEART_BEAT_TYPE]
        fields = data['data']
        node_id = fields['node_id']
        park_id = int(node_id[node_id.rfind('_') + 1:])
    except Exception, e:
        message = "[HEARTBEAT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #8
0
def _booking_cb(srv, item, payload):
    try:
        data = payload['Data']
        mid_ack = str(data['ackId'])
        pc = Prpcrypt(PAMA_SECRET_KEY)
        mid_ack = int(pc.decrypt(mid_ack))
        result_ack = data['result']
    except Exception, e:
        message = "[BOOKING_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #9
0
def do_response_block(client_conn, client_req):

    ip = client_conn.getpeername()[0]

    block_message = 'HTTP/1.1 200 OK\r\nHost: 127.0.0.1:1025\r\nDate: Tue, 02 Feb 2021 11:18:17 GMT\r\nConnection: close\r\nX-Powered-By: PHP/7.3.22-(to be removed in future macOS)\r\nContent-type: text/html; charset=UTF-8\r\n\r\n访问不合法!已被拦截和记录。'.encode(
        "utf-8")

    client_conn.sendall(block_message)
    client_conn.close()

    log("waf blocked", 1)
    do_log(client_req, ip, C.ACTION_BLOCK, full=True)
Пример #10
0
def _payment_cb(srv, item, payload):
    try:
        data = payload[KETUO_PAYMENT_ACK_TYPE]
        fields = data['data']
        car_no = fields['carplatenum']
        parking = str(fields['comecarId'])
        park_id = int(data['parkID'])
    except Exception, e:
        message = "[PAYMENT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #11
0
def handle_booking_ack(srv, item, booking_id, apply_state):
    _srv = srv

    try:
        with _srv.database:
            query = Booking.udpate(apply_state=apply_state).where(
                Booking.id == booking_id)
            query.execute()
    except Exception, e:
        message = "[BOOKING_ACK] booking id [%s] catch exception [%s]" % (
            booking_id, str(e))
        do_log(srv, item, "ERROR", LOG_T_DB, message)
        return False
Пример #12
0
def _space_cb(srv, item, payload):
    try:
        data = payload[LIFANG_PARKING_INFO_TYPE]
        event_type = data['eventType']
        fields = data['data']
        total_spaces = int(fields['CountCw'])
        total_remainning_spaces = int(fields['PrepCw'])
        park_id = int(data['parkID'])
    except Exception, e:
        message = "[SPACE_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #13
0
def pay_cb(srv, item, payload):
    try:
        park = payload['parkId']
        data = payload['data']
        order_no = data['order_no']
        fee = int(data['fee'])
        parking_id = data['parking_id']
        car_no = data['car_no']
    except Exception, e:
        message = "[PAY_CB] payload [%s] catch exception [%s]" % (str(payload),
                                                                  str(e))
        do_log(srv, item, "WARN", LOG_T_SERVER, message)
        return False
Пример #14
0
    def handle_client(self):
        _srv = self.srv
        _item = self.item
        payload = _item.get('payload')

        try:
            payload = json.loads(payload)
            data_type = payload['DataType']
        except Exception, e:
            message = "[HANDLE_CLIENT] payload [%s] catch exception [%s]" % (
                str(payload), str(e))
            do_log(srv, item, "WARN", LOG_T_LOCAL, message)
            return False
Пример #15
0
def fee_cb(srv, item, payload):
    try:
        park = payload['parkId']
        data = payload['data']
        car_no = data['car_no']
        parking_id = data['parking_id']
        start_time = datetime.datetime.fromtimestamp(data['start_time'])
        end_time = datetime.datetime.fromtimestamp(data['end_time'])
    except Exception, e:
        message = "[FEE_CB] payload [%s] catch exception [%s]" % (str(payload),
                                                                  str(e))
        do_log(srv, item, "WARN", LOG_T_SERVER, message)
        return False
Пример #16
0
def _space_cb(srv, item, payload):
    try:
        data = payload['Data']
        park_id = int(data['parkId'])
        spaces = int(data['totalSpace'])
        total_remaining_spaces = int(data['totRemainSpace'])
        vip_remaining_spaces = int(data['vipRemainSpace'])
        visitor_remaining_spaces = int(data['vstRemainSpace'])
    except Exception, e:
        _ack(srv, item, payload, False)
        message = "[SPACE_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #17
0
def handle_fee_ack(srv, item, park_id, car_no, fee, fee_time):
    _srv = srv

    try:
        with _srv.database:
            query = CurrentParking.update(
                fee=fee,
                fee_time=fee_time).where((CurrentParking.park == park_id)
                                         & (CurrentParking.car_no == car_no))
            query.execute()
    except Exception, e:
        message = "[FEE_ACK] park [%s] car [%s] catch exception [%s]" % (
            park_id, car_no, str(e))
        do_log(srv, item, "ERROR", LOG_T_DB, message)
        return False
Пример #18
0
def _payment_cb(srv, item, payload):
    try:
        data = payload['Data']
        order_no = data['ackId']
        pc = Prpcrypt(PAMA_SECRET_KEY)
        order_no = pc.decrypt(order_no)

        car_no = data['plateNumber']
        park_id = int(data['parkId'])
        parking_id = data['logId']
        result = int(data['retCode'])
    except Exception, e:
        message = "[PAYMENT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #19
0
def _fee_cb(srv, item, payload):
    try:
        data = payload['Data']
        car_no = data['plateNumber']
        fee = data['price']

        fee_time = data['endTime']
        fee_time = str2datetime(fee_time)

        result = int(data['retcode'])  # FIXME: protocol doc is retCode
        park_id = int(data['parkId'])
    except Exception, e:
        message = "[FEE_CB] payload [%s] catch exception [%s]" % (str(payload),
                                                                  str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #20
0
def _entry_cb(srv, item, payload):
    try:
        data = payload['Data']
        park_id = int(data['parkId'])
        parking_id = data['logId']
        car_no = data['plateNumber']
        entry_code = data['entranceCode']
        entry_time = data['time']
        entry_time = str2datetime(entry_time)
        card_type = (0 if int(data['carType']) == 0 else 3)
    except Exception, e:
        _ack(srv, item, payload, True)
        message = "[ENTRY_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #21
0
def card_cb(srv, item, payload):
    try:
        park = payload['parkId']
        data = payload['data']
        name = data['owner_name']
        car_no = data['car_no']
        phone = data['phone']
        card_type = data['card_type']
        begin_time = datetime.datetime.fromtimestamp(data['start_time'])
        end_time = datetime.datetime.fromtimestamp(data['end_time'])
        operation = data['operation']
    except Exception, e:
        message = "[CARD_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_SERVER, message)
        return False
Пример #22
0
def _entry_cb(srv, item, payload):
    try:
        data = payload[LIFANG_ENTRY_TYPE]
        event_type = data['eventType']
        fields = data['data']
        car_no = fields['CarCode']
        entry_time = fields['Crdtm']
        entry_time = str2datetime(entry_time)
        entry_code = fields['ChannelID']
        parking_id = str(fields['RecordID'])
        park_id = int(data['parkID'])
        card_type = 2
    except Exception, e:
        message = "[ENTRY_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #23
0
def _entry_cb(srv, item, payload):
    try:
        data = payload[KETUO_ENTRY_TYPE]
        event_type = data['eventType']
        fields = data['data']

        car_no = fields['carPlateNum']
        entry_time = fields['comeTime']
        entry_time = str2datetime(entry_time)
        entry_code = fields['caremaId']
        parking_id = str(fields['id'])
        park_id = int(data['parkID'])
        card_type = int(fields['carType'])
    except Exception, e:
        message = "[ENTRY_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #24
0
def handle_nanhu_payment(srv, item, m_pay):
    backup_db = BackupDatabase(srv, m_pay.info)
    models = (NanHuParkingInfo, )

    with backup_db.database.bind_ctx(models):
        try:
            query = NanHuParkingInfo.update(
                is_center_pay=1,
                pay_time=m_pay.pay_time,
                pay_fee=m_pay.fee /
                100.0).where(NanHuParkingInfo.parking_id == m_pay.parking)
            query.execute()
        except Exception, e:
            backup_db.close()
            message = "[HANDLE_NANHU_PAYMENT] park [%s] car [%s] catch exception [%s]" % (
                m_pay.park, m_pay.car_no, str(e))
            do_log(srv, item, "ERROR", LOG_T_DB, message)
            return False
Пример #25
0
def _parking_cb(srv, item, payload):
    try:
        data = payload[XIXIANGFENG_PARKING_TABLE]
        event_type = data['eventType']
        fields = data['data']
        car_no = fields['car_cp']

        entry_time = fields['in_time']
        entry_time = str2datetime(entry_time)

        entry_code = fields['in_sbname']
        parking_id = str(fields['parked_id'])
        park_id = int(data['parkID'])
        card_type = 2 if fields['card_kind'] == '月租卡' else 0
    except Exception, e:
        message = "[PARKING_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #26
0
def handle_exit(srv, item, parking_info):
    _srv = srv

    notified = True
    try:
        with _srv.database:
            try:
                current_parking = CurrentParking.get(
                    CurrentParking.park == parking_info.park_id,
                    CurrentParking.car_no == parking_info.car_no)
            except CurrentParking.DoesNotExist:
                message = "[EXIT] park [%s] car [%s] does not exist" % (
                    parking_info.park_id, parking_info.car_no)
                do_log(srv, item, "WARN", LOG_T_LOCAL, message)
                return True

            parking = str(current_parking.id)
            current_parking.delete_instance()
            query = HistoryParking.update(
                exit_time=parking_info.exit_time,
                exit_code=parking_info.exit_code,
                duration=parking_info.duration,
                fee=parking_info.fee).where(
                    (HistoryParking.park == parking_info.park_id)
                    & (HistoryParking.parking == parking)
                    & (HistoryParking.car_no == parking_info.car_no))
            query.execute()
            query = Booking.update(
                reality_end=parking_info.exit_time,
                parking_state='leaved').where(
                    (Booking.park == parking_info.park_id)
                    & (Booking.parking == parking)
                    & (Booking.car_no == parking_info.car_no))
            query.execute()
    except Exception, e:
        message = "[EXIT] park [%s] car [%s] catch excetion [%s]" % (
            parking_info.park_id, parking_info.car_no, str(e))
        do_log(srv, item, "ERROR", LOG_T_DB, message)
        notified = False
Пример #27
0
def handle_lifang_booking(srv, item, m_booking):
    backup_db = BackupDatabase(srv, m_booking.info)
    models = (LiFangUserInfo, )

    SOME_USER = '******'
    charge_rule_id = 1001
    with backup_db.database.bind_ctx(models):
        try:
            if m_booking.status == 0:
                defaults = dict(user_no=SOME_USER,
                                name='some_' + m_booking.car_no,
                                car_no=m_booking.car_no,
                                charge_rule_id=charge_rule_id,
                                begin_time=m_booking.start_time,
                                end_time=m_booking.end_time,
                                create_date=datetime.datetime.now())
                user_info, created = LiFangUserInfo.get_or_create(
                    car_no=m_booking.car_no,
                    user_no=SOME_USER,
                    defaults=defaults)
                if not created:
                    query = LiFangUserInfo.update(
                        begin_time=m_booking.start_time,
                        end_time=m_booking.end_time).where(
                            (LiFangUserInfo.car_no == m_booking.car_no)
                            & (LiFangUserInfo.user_no == SOME_USER))
                    query.execute()

            else:
                query = LiFangUserInfo.delete().where(
                    (LiFangUserInfo.car_no == m_booking.car_no)
                    & (LiFangUserInfo.user_no == 'some_user'))
                query.execute()
        except Exception, e:
            backup_db.close()
            message = "[DO_BOOKING] park [%s] car [%s] catch exception [%s]" % (
                m_booking.park, m_booking.car_no, str(e))
            do_log(srv, item, "WARN", LOG_T_DB, message)
            return False
Пример #28
0
def _exit_cb(srv, item):
    try:
        data = item.data[LIFANG_EXIT_TYPE]
        event_type = data['eventType']
        fields = data['data']

        car_no = fields['CarCode']
        entry_time = fields['InTime']
        entry_time = str2datetime(entry_time)
        exit_time = fields['OutEventTime']
        exit_time = str2datetime(exit_time)
        exit_code = ''
        duration = fields['StopTime']
        fee = float(fields['Amount'])

        parking_id = 'YY_UNUSED'
        park_id = int(data['parkID'])
    except Exception, e:
        message = "[EXIT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #29
0
def _exit_cb(srv, item, payload):
    try:
        data = payload['Data']
        parking_id = data["inLogId"]
        car_no = data["plateNumber"]
        exit_code = data["entranceCode"]

        entry_time = data["inTime"]
        entry_time = str2datetime(entry_time)
        exit_time = data["outTime"]
        exit_time = str2datetime(exit_time)

        card_type = (0 if int(data["carType"]) == 0 else 3)
        duration = int(data["duration"])
        fee = float(data["due"])
        park_id = int(data["parkId"])
    except Exception, e:
        _ack(srv, item, payload, True)
        message = "[EXIT_CB] payload [%s] catch exception [%s]" % (
            str(payload), str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return False
Пример #30
0
def _ack(srv, item, payload, result, msg='no message'):
    ack_id = ''

    try:
        data = payload['Data']
        park_id = data.get('parkId', data.get('ParkingLotId'))
        client_id = payload['ClientId']
        ack_id = payload['Id']
        ack_dict = {
            'Id': str(uuid.uuid1()),
            'DataType': 'Ack',
            'ClientId': client_id,
            'Data': {
                'ackId': ack_id,
                'result': result,
                'msg': msg
            }
        }
    except Exception, e:
        message = "[ACK] park [%s] ack id [%s] catch exception [%s]" % (
            park_id, ack_id, str(e))
        do_log(srv, item, "WARN", LOG_T_LOCAL, message)
        return