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
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
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
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)
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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