remove unused codes
This commit is contained in:
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
import getpass
|
||||||
|
username = getpass.getuser()
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
LOG_SOURCE = os.getenv("LOG_SOURCE")
|
LOG_SOURCE = username
|
||||||
SMS_TIMEOUT = 120
|
SMS_TIMEOUT = 120
|
||||||
BAUDRATE = 115200
|
|
||||||
|
|
||||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|||||||
+3
-4
@@ -10,9 +10,8 @@ import definitions
|
|||||||
from logs.AppLogging import init_logger
|
from logs.AppLogging import init_logger
|
||||||
from pojo import ReserveResultPojo
|
from pojo import ReserveResultPojo
|
||||||
from pojo.ReserveResultPojo import PublishType
|
from pojo.ReserveResultPojo import PublishType
|
||||||
|
|
||||||
# Log subjects
|
# Log subjects
|
||||||
from pojo.serial_modem import SerialModem
|
from pojo.contact_pojo import ContactPojo
|
||||||
|
|
||||||
LOG_SUBJECT_EVENT = "EVENT"
|
LOG_SUBJECT_EVENT = "EVENT"
|
||||||
LOG_SUBJECT_SMS = "SMS"
|
LOG_SUBJECT_SMS = "SMS"
|
||||||
@@ -102,8 +101,8 @@ class LogSender:
|
|||||||
msg = "from:{}, sms:{}, ccid:{}".format(phone, sms_text, ccid)
|
msg = "from:{}, sms:{}, ccid:{}".format(phone, sms_text, ccid)
|
||||||
self.send_log(msg=msg, subject=LOG_SUBJECT_SMS, type=TYPE_SMS_RECEIVED)
|
self.send_log(msg=msg, subject=LOG_SUBJECT_SMS, type=TYPE_SMS_RECEIVED)
|
||||||
|
|
||||||
def send_timeout_log(self, serial_modem: SerialModem):
|
def send_timeout_log(self, contact: ContactPojo):
|
||||||
msg = "phone:{}, ccid:{}".format(serial_modem.phone_number, serial_modem.ccid)
|
msg = "phone:{}, mail:{}".format(contact.phone, contact.mail)
|
||||||
self.send_log(msg, type=LOG_APPOINTMENT_TIMEOUT)
|
self.send_log(msg, type=LOG_APPOINTMENT_TIMEOUT)
|
||||||
|
|
||||||
def send_contact_not_found(self, msg: str):
|
def send_contact_not_found(self, msg: str):
|
||||||
|
|||||||
@@ -1,18 +1,11 @@
|
|||||||
import logging
|
import logging
|
||||||
import random
|
|
||||||
import sys
|
import sys
|
||||||
import time
|
|
||||||
from concurrent.futures import ThreadPoolExecutor
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from gsmmodem import GsmModem
|
|
||||||
|
|
||||||
import params
|
import params
|
||||||
from workers.commandor_page import CommandorPage
|
|
||||||
from logs.AppLogging import init_logger
|
from logs.AppLogging import init_logger
|
||||||
from params import oracle_log_sender
|
|
||||||
from pojo.serial_modem import SerialModem
|
|
||||||
from utils.excel_reader import ExcelHelper
|
from utils.excel_reader import ExcelHelper
|
||||||
|
from workers.commandor_page import CommandorPage
|
||||||
|
|
||||||
OTP_TIMEOUT = 240
|
OTP_TIMEOUT = 240
|
||||||
current_gsm_modem = None
|
current_gsm_modem = None
|
||||||
@@ -23,65 +16,17 @@ logger = logging.getLogger()
|
|||||||
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
||||||
|
|
||||||
|
|
||||||
def send_command(cmd: str, ser, wait_time_in_s: int = 0) -> bytes:
|
|
||||||
ser.write(cmd.encode())
|
|
||||||
msg = ser.read(100)
|
|
||||||
count = 0
|
|
||||||
while 'OK' not in str(msg) and count < wait_time_in_s:
|
|
||||||
time.sleep(1)
|
|
||||||
count = count + 1
|
|
||||||
msg = ser.read(100)
|
|
||||||
print(msg)
|
|
||||||
return msg
|
|
||||||
|
|
||||||
|
|
||||||
def create_modem_for_port(port: str) -> Union[SerialModem, None]:
|
|
||||||
logger.info('Initializing modem... for ' + port)
|
|
||||||
serial_modem = None
|
|
||||||
try:
|
|
||||||
modem = GsmModem(port)
|
|
||||||
return SerialModem(modem=modem)
|
|
||||||
except Exception as ext:
|
|
||||||
logger.error(ext)
|
|
||||||
return serial_modem
|
|
||||||
|
|
||||||
|
|
||||||
def start_book(start_number, end_number, store=0):
|
def start_book(start_number, end_number, store=0):
|
||||||
# read the contact, and contact the 2 objects together
|
# read the contact, and contact the 2 objects together
|
||||||
excel_reader = ExcelHelper()
|
excel_reader = ExcelHelper()
|
||||||
contacts = excel_reader.read_contacts()[start_number - 1: end_number - 1]
|
contacts = excel_reader.read_contacts()[start_number - 1: end_number - 1]
|
||||||
print(contacts)
|
print(contacts)
|
||||||
# for i in contacts_range:
|
with ThreadPoolExecutor(max_workers=10) as executor:
|
||||||
# logger.info("will switch to contact {}".format(i))
|
for contact in contacts:
|
||||||
# with ThreadPoolExecutor(max_workers=10) as executor:
|
proxy = get_proxy(contact.phone_number)
|
||||||
# for modem in modem_list:
|
commandor = CommandorPage(contact, store_type=store)
|
||||||
# current_sim_position = current_sim_position + 1
|
# start the task in thread
|
||||||
# try:
|
executor.submit(commandor.start_page, proxy)
|
||||||
# modem.get_ccid()
|
|
||||||
# # find the contact with ccid
|
|
||||||
# contact = [contact for contact in contacts if
|
|
||||||
# contact.ccid.replace("F", "") == modem.ccid.replace("F", "")]
|
|
||||||
# if len(contact) > 0:
|
|
||||||
# modem.phone_number = contact[0].phone
|
|
||||||
# modem.contact = contact[0]
|
|
||||||
# else:
|
|
||||||
# logger.info("contact not found for this ccid:{}".format(modem.ccid))
|
|
||||||
# error_msg = "slot({}):sim({}):ccid({})".format(i, current_sim_position, modem.ccid)
|
|
||||||
# oracle_log_sender.send_contact_not_found(error_msg)
|
|
||||||
# modem.modem.close()
|
|
||||||
# continue
|
|
||||||
# if modem.contact:
|
|
||||||
# logger.info("contact found for this ccid")
|
|
||||||
# signal = modem.modem.signalStrength
|
|
||||||
# logger.info("信号强度: " + str(signal))
|
|
||||||
# proxy = get_proxy(modem.phone_number)
|
|
||||||
# commandor = CommandorPage(modem, sim_position=current_sim_position,
|
|
||||||
# slot_position=current_card_pool_slot, store_type=store)
|
|
||||||
# # start the task in thread
|
|
||||||
# executor.submit(commandor.start_page, proxy)
|
|
||||||
# except Exception as error:
|
|
||||||
# print(error)
|
|
||||||
# continue
|
|
||||||
|
|
||||||
|
|
||||||
def get_proxy(phone_number):
|
def get_proxy(phone_number):
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from dataclasses_json import dataclass_json
|
from dataclasses_json import dataclass_json
|
||||||
|
|
||||||
|
|
||||||
@@ -15,9 +17,9 @@ class ReserveResultPojo:
|
|||||||
phone: str
|
phone: str
|
||||||
message: str
|
message: str
|
||||||
url: str
|
url: str
|
||||||
firstName: None
|
firstName: Union[None, str]
|
||||||
lastName: None
|
lastName: Union[None, str]
|
||||||
email: None
|
email: Union[None, str]
|
||||||
id = None
|
id = None
|
||||||
accepted = None
|
accepted = None
|
||||||
passport: str = ""
|
passport: str = ""
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
import logging
|
|
||||||
from dataclasses import dataclass
|
|
||||||
|
|
||||||
from gsmmodem import GsmModem
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class SerialModem():
|
|
||||||
ccid: str
|
|
||||||
phone_number = None
|
|
||||||
modem: GsmModem
|
|
||||||
contact = None
|
|
||||||
|
|
||||||
def __init__(self, modem: GsmModem, ccid: str = None):
|
|
||||||
self.modem = modem
|
|
||||||
self.ccid = ccid
|
|
||||||
self.logger = logging.getLogger("SerialModem")
|
|
||||||
|
|
||||||
def get_ccid(self):
|
|
||||||
cmd = "AT+CCID"
|
|
||||||
self.modem.connect("0000")
|
|
||||||
self.logger.info("try to get ccid")
|
|
||||||
response = self.modem.write(cmd, True)
|
|
||||||
self.ccid = response[0].split(" ")[1].replace("\"", "")
|
|
||||||
self.logger.info("The SIM card ccid is:" + self.ccid)
|
|
||||||
# print("try to get phone number")
|
|
||||||
# cmd_phone_number = "AT+CPBS=ON"
|
|
||||||
# openBook = self.modem.write(cmd_phone_number, True)
|
|
||||||
# print("response is :" + str(openBook))
|
|
||||||
# cmd_phone_number = "AT+CNUM"
|
|
||||||
# response2 = self.modem.write(cmd_phone_number, True)
|
|
||||||
# print("The SIM phone number is:" + str(response2))
|
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
dataclasses_json==0.5.6
|
dataclasses_json==0.5.6
|
||||||
firebase_admin==5.2.0
|
firebase_admin==5.2.0
|
||||||
pandas==1.4.1
|
pandas==1.4.1
|
||||||
playwright==1.20.1
|
playwright==1.21.0
|
||||||
pyserial==3.5
|
pyserial==3.5
|
||||||
pydotenv==0.0.7
|
pydotenv==0.0.7
|
||||||
dataclasses~=0.6
|
dataclasses~=0.6
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
import logging
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
from concurrent.futures import ThreadPoolExecutor
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from gsmmodem import GsmModem
|
|
||||||
|
|
||||||
import params
|
|
||||||
from definitions import SMS_TIMEOUT
|
|
||||||
from logs.AppLogging import init_logger
|
|
||||||
from modems.ModemPool import ModemPool
|
|
||||||
from modems.card_pool import CardPool
|
|
||||||
from params import MODEM_POOL_PORTS, CARD_POOL_PORT
|
|
||||||
from pojo.serial_modem import SerialModem
|
|
||||||
from utils.excel_reader import ExcelHelper
|
|
||||||
from workers.wait_sms_worker import WaitSmsWorker
|
|
||||||
|
|
||||||
thread_event = None
|
|
||||||
current_gsm_modem = None
|
|
||||||
card_pool = CardPool(CARD_POOL_PORT)
|
|
||||||
init_logger()
|
|
||||||
logger = logging.getLogger()
|
|
||||||
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
|
||||||
|
|
||||||
|
|
||||||
def get_devices_ports() -> list:
|
|
||||||
return MODEM_POOL_PORTS
|
|
||||||
|
|
||||||
|
|
||||||
def create_modem_for_port(port: str) -> Union[SerialModem, None]:
|
|
||||||
logger.info('Initializing modem... for ' + port)
|
|
||||||
serial_modem = None
|
|
||||||
try:
|
|
||||||
modem = GsmModem(port)
|
|
||||||
return SerialModem(modem=modem)
|
|
||||||
except Exception as ext:
|
|
||||||
logger.error(ext)
|
|
||||||
return serial_modem
|
|
||||||
|
|
||||||
|
|
||||||
def timeout_occurred(serial_modem: SerialModem):
|
|
||||||
logger.info("will close timeout modem")
|
|
||||||
serial_modem.modem.close()
|
|
||||||
|
|
||||||
|
|
||||||
def init_modems() -> list:
|
|
||||||
modems = []
|
|
||||||
for port in get_devices_ports():
|
|
||||||
serial_modem = create_modem_for_port(port)
|
|
||||||
if serial_modem:
|
|
||||||
modems.append(serial_modem)
|
|
||||||
return modems
|
|
||||||
|
|
||||||
|
|
||||||
def start_waiting_sms(start_slot_number, end_slot_sum):
|
|
||||||
params.oracle_log_sender.send_wait_sms_log()
|
|
||||||
slot_list = list(range(start_slot_number, end_slot_sum + 1))
|
|
||||||
for i in slot_list:
|
|
||||||
card_pool.reset()
|
|
||||||
logger.info("will switch to " + str(i))
|
|
||||||
card_pool.switch_to_slot(i)
|
|
||||||
modem_pool = ModemPool(get_devices_ports())
|
|
||||||
modem_pool.reset_all_modems()
|
|
||||||
modem_list = init_modems()
|
|
||||||
# read the contact, and merge the 2 objects together
|
|
||||||
excel_reader = ExcelHelper()
|
|
||||||
contacts = excel_reader.read_contacts()
|
|
||||||
with ThreadPoolExecutor(max_workers=len(MODEM_POOL_PORTS)) as executor:
|
|
||||||
for modem in modem_list:
|
|
||||||
try:
|
|
||||||
modem.get_ccid()
|
|
||||||
# find the contact with ccid
|
|
||||||
contact = [contact for contact in contacts if
|
|
||||||
contact.ccid.replace("F", "") == modem.ccid.replace("F", "")]
|
|
||||||
if len(contact) > 0:
|
|
||||||
modem.phone_number = contact[0].phone
|
|
||||||
modem.contact = contact[0]
|
|
||||||
if modem.contact:
|
|
||||||
logger.info("contact found for this ccid")
|
|
||||||
commandor = WaitSmsWorker(modem)
|
|
||||||
# start the task in thread
|
|
||||||
executor.submit(commandor.run())
|
|
||||||
except Exception as error:
|
|
||||||
print(error)
|
|
||||||
continue
|
|
||||||
listen_at = time.time()
|
|
||||||
now = time.time()
|
|
||||||
while (listen_at + SMS_TIMEOUT + 5) > now:
|
|
||||||
now = time.time()
|
|
||||||
# print("sleep for 2 s")
|
|
||||||
time.sleep(2)
|
|
||||||
print("will call continue")
|
|
||||||
modem_pool.close()
|
|
||||||
continue
|
|
||||||
|
|
||||||
#等短信
|
|
||||||
if __name__ == '__main__':
|
|
||||||
start_waiting_sms(1, 32)
|
|
||||||
+10
-73
@@ -1,27 +1,22 @@
|
|||||||
import datetime
|
|
||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
import re
|
|
||||||
import string
|
import string
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from gsmmodem import GsmModem
|
|
||||||
from playwright.sync_api import sync_playwright
|
from playwright.sync_api import sync_playwright
|
||||||
|
|
||||||
import params
|
import params
|
||||||
from params import PROXY_SERVER, PROXY_PASSWORD
|
from params import PROXY_SERVER, PROXY_PASSWORD
|
||||||
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
|
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
|
||||||
from pojo.contact_pojo import ContactPojo
|
from pojo.contact_pojo import ContactPojo
|
||||||
from pojo.serial_modem import SerialModem
|
|
||||||
from utils.excel_reader import ExcelHelper
|
from utils.excel_reader import ExcelHelper
|
||||||
from utils.operator import Operator, check_operator
|
|
||||||
|
|
||||||
RDV_URL = "https://rendezvousparis.hermes.com/client/register"
|
# RDV_URL = "https://rendezvousparis.hermes.com/client/register"
|
||||||
|
|
||||||
# RDV_URL = "file:///Users/lpan/Downloads/test_appointment.html"
|
# RDV_URL = "file:///Users/lpan/Downloads/test_appointment.html"
|
||||||
# RDV_URL = "https://api.ipify.org"
|
RDV_URL = "https://api.ipify.org"
|
||||||
# RDV_URL ="https://bot.sannysoft.com/"
|
# RDV_URL ="https://bot.sannysoft.com/"
|
||||||
otp_value = None
|
otp_value = None
|
||||||
user_agent_list = ExcelHelper().read_user_agent_list()
|
user_agent_list = ExcelHelper().read_user_agent_list()
|
||||||
@@ -47,75 +42,24 @@ class Tls(threading.local):
|
|||||||
class CommandorPage:
|
class CommandorPage:
|
||||||
tls = Tls()
|
tls = Tls()
|
||||||
|
|
||||||
def __init__(self, serial_modem: SerialModem, slot_position, sim_position, store_type=0):
|
def __init__(self, contact: ContactPojo, store_type=0):
|
||||||
self.otp_value = None
|
self.otp_value = None
|
||||||
self.logger = logging.getLogger("CommandorPage")
|
self.logger = logging.getLogger("CommandorPage")
|
||||||
self.is_finished = False
|
self.is_finished = False
|
||||||
self.current_gsm_modem = serial_modem
|
self.contact = contact
|
||||||
self.slot_position = slot_position
|
|
||||||
self.sim_position = sim_position
|
|
||||||
self.contact = serial_modem.contact
|
|
||||||
self.store_type = store_type
|
self.store_type = store_type
|
||||||
|
|
||||||
def on_success(self, result: ReserveResultPojo):
|
def on_success(self, result: ReserveResultPojo):
|
||||||
self.logger.info("on_success called.")
|
self.logger.info("on_success called.")
|
||||||
self.logger.info(result)
|
self.logger.info(result)
|
||||||
params.oracle_log_sender.send_appoint_result(result)
|
params.oracle_log_sender.send_appoint_result(result)
|
||||||
self.current_gsm_modem.modem.close()
|
|
||||||
self.is_finished = True
|
self.is_finished = True
|
||||||
|
|
||||||
def handle_sms(self, sms):
|
|
||||||
self.logger.info(
|
|
||||||
u'== SMS message received ==\nFrom: {0}\nTime: {1}\nMessage:\n{2}\n'.format(sms.number, sms.time, sms.text))
|
|
||||||
# extract the otp number
|
|
||||||
date = str(sms.time)[0:10]
|
|
||||||
params.oracle_log_sender.send_sms_reception_log(sms.number, sms.text, self.current_gsm_modem.ccid)
|
|
||||||
if date == str(datetime.date.today()):
|
|
||||||
self.logger.info("this sms is for today")
|
|
||||||
if "rendez-vous" in sms.text or "appointment" in sms.text:
|
|
||||||
self.logger.info("try to extract the otp")
|
|
||||||
pattern = r'\d{6,8}'
|
|
||||||
# if re.match(pattern, sms.text):
|
|
||||||
match = re.search(pattern, sms.text)
|
|
||||||
otp = match.group(0)
|
|
||||||
self.logger.info("otp is " + otp)
|
|
||||||
self.otp_value = otp
|
|
||||||
self.logger.info("will set thread event")
|
|
||||||
self.thread_event.set()
|
|
||||||
self.is_finished = True
|
|
||||||
else:
|
|
||||||
self.logger.info("The sms is not for RDV")
|
|
||||||
else:
|
|
||||||
self.logger.info("The sms is not for today")
|
|
||||||
|
|
||||||
def set_up_sms_listener(self):
|
|
||||||
if check_operator(self.current_gsm_modem.ccid) == Operator.LYCAMOBILE:
|
|
||||||
# lycamobile
|
|
||||||
self.current_gsm_modem.modem.deleteMultipleStoredSms(memory="SM")
|
|
||||||
self.current_gsm_modem.modem.smsReceivedCallback = self.handle_sms
|
|
||||||
self.is_finished = False
|
|
||||||
self.current_gsm_modem.smsTextMode = False
|
|
||||||
self.logger.info('Waiting for SMS message, for phone number ' + str(self.current_gsm_modem.phone_number))
|
|
||||||
listen_at = time.time()
|
|
||||||
while not self.is_finished:
|
|
||||||
time.sleep(2)
|
|
||||||
# check whether timeout
|
|
||||||
now = time.time()
|
|
||||||
if (listen_at + OTP_TIMEOUT) < now:
|
|
||||||
self.logger.info("time out for {}, switch to next contact".format(self.current_gsm_modem.phone_number))
|
|
||||||
# save the contact in timeout
|
|
||||||
self.timeout_occurred()
|
|
||||||
self.current_gsm_modem.modem.close()
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
def timeout_occurred(self):
|
def timeout_occurred(self):
|
||||||
params.firebase_store_manager.save_timeout_contact(self.current_gsm_modem.contact)
|
params.oracle_log_sender.send_timeout_log(self.contact)
|
||||||
params.oracle_log_sender.send_timeout_log(self.current_gsm_modem)
|
|
||||||
self.logger.info("will close timeout modem")
|
self.logger.info("will close timeout modem")
|
||||||
self.thread_event.set()
|
self.thread_event.set()
|
||||||
self.current_gsm_modem.modem.close()
|
self.termine()
|
||||||
self.reset_air_plan_mode()
|
|
||||||
|
|
||||||
def _run(self, e: threading.Event, proxy):
|
def _run(self, e: threading.Event, proxy):
|
||||||
print("will start browser")
|
print("will start browser")
|
||||||
@@ -143,7 +87,6 @@ class CommandorPage:
|
|||||||
# wait for sms_code field
|
# wait for sms_code field
|
||||||
# self.clickOnValidBtn()
|
# self.clickOnValidBtn()
|
||||||
self.thread_event = e
|
self.thread_event = e
|
||||||
self.set_up_sms_listener()
|
|
||||||
otp_input = self.page.locator(OTP_FIELD_ID)
|
otp_input = self.page.locator(OTP_FIELD_ID)
|
||||||
otp_input.wait_for(state='visible', timeout=TIME_OUT)
|
otp_input.wait_for(state='visible', timeout=TIME_OUT)
|
||||||
event_is_set = e.wait()
|
event_is_set = e.wait()
|
||||||
@@ -163,7 +106,7 @@ class CommandorPage:
|
|||||||
self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url)
|
self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url)
|
||||||
else:
|
else:
|
||||||
self.logger.info("timeout")
|
self.logger.info("timeout")
|
||||||
self.reset_air_plan_mode()
|
self.termine()
|
||||||
|
|
||||||
def start_browser(self, proxy, pwright, device) -> Union[str, None]:
|
def start_browser(self, proxy, pwright, device) -> Union[str, None]:
|
||||||
try:
|
try:
|
||||||
@@ -300,7 +243,7 @@ class CommandorPage:
|
|||||||
time.sleep(get_random_wait_time())
|
time.sleep(get_random_wait_time())
|
||||||
self.page.fill(OTP_FIELD_ID, otp)
|
self.page.fill(OTP_FIELD_ID, otp)
|
||||||
|
|
||||||
def reset_air_plan_mode(self):
|
def termine(self):
|
||||||
self.logger.info("will close browser")
|
self.logger.info("will close browser")
|
||||||
self.browser.close()
|
self.browser.close()
|
||||||
|
|
||||||
@@ -311,8 +254,6 @@ class CommandorPage:
|
|||||||
firstName=contact.first_name, lastName=contact.last_name, email=contact.mail,
|
firstName=contact.first_name, lastName=contact.last_name, email=contact.mail,
|
||||||
passport=contact.passport, ccid=contact.ccid)
|
passport=contact.passport, ccid=contact.ccid)
|
||||||
result.id = id
|
result.id = id
|
||||||
result.sim_position = self.sim_position
|
|
||||||
result.slot_position = self.slot_position
|
|
||||||
params.firebase_store_manager.save(result)
|
params.firebase_store_manager.save(result)
|
||||||
if status is PublishType.SUCCESS:
|
if status is PublishType.SUCCESS:
|
||||||
self.on_success(result)
|
self.on_success(result)
|
||||||
@@ -353,12 +294,8 @@ def launch_page():
|
|||||||
contact = ContactPojo(phone_number="+33758912245", passport_number=passport_number, last_name="XU",
|
contact = ContactPojo(phone_number="+33758912245", passport_number=passport_number, last_name="XU",
|
||||||
first_name="xingzhen",
|
first_name="xingzhen",
|
||||||
mail="ColbyPatel653@gmail.com", ccid="", position=0)
|
mail="ColbyPatel653@gmail.com", ccid="", position=0)
|
||||||
modem = GsmModem("/dev/tty.usbmodem1422307")
|
page = CommandorPage(contact, store_type=1)
|
||||||
serial_modem = SerialModem(modem)
|
return page.start_page(None)
|
||||||
serial_modem.contact = contact
|
|
||||||
serial_modem.phone_number = contact.phone
|
|
||||||
page = CommandorPage(serial_modem, slot_position=1, sim_position=1, store_type=1)
|
|
||||||
return page.start_page(proxy)
|
|
||||||
|
|
||||||
|
|
||||||
def wait_for_otp(event: threading.Event, commandor: CommandorPage):
|
def wait_for_otp(event: threading.Event, commandor: CommandorPage):
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
import datetime
|
|
||||||
import logging
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from gsmmodem.modem import Sms
|
|
||||||
|
|
||||||
import params
|
|
||||||
from definitions import SMS_TIMEOUT
|
|
||||||
from notification.AcceptedResultPojo import get_accepted_result_from
|
|
||||||
from notification.mailer import Mailer
|
|
||||||
from pojo.SimInfoPojo import SimInfoPojo
|
|
||||||
from pojo.serial_modem import SerialModem
|
|
||||||
from utils.excel_reader import ExcelHelper
|
|
||||||
|
|
||||||
|
|
||||||
class WaitSmsWorker:
|
|
||||||
HERMES_RDV = "HERMES RDV"
|
|
||||||
ACCEPT_SENTENCE = "We are pleased to confirm your appointment"
|
|
||||||
|
|
||||||
def __init__(self, serial_modem: SerialModem):
|
|
||||||
self.serial_modem = serial_modem
|
|
||||||
self.logger = logging.getLogger("WaitSmsWorker")
|
|
||||||
|
|
||||||
def handle_sms(self, sms):
|
|
||||||
self.logger.info(
|
|
||||||
"sms received for phone:{}(ccid:{})".format(self.serial_modem.phone_number, self.serial_modem.ccid))
|
|
||||||
self.logger.info(
|
|
||||||
u'== SMS message received ==\nFrom: {0}\nTime: {1}\nMessage:\n{2}\n'.format(sms.number, sms.time, sms.text))
|
|
||||||
params.oracle_log_sender.send_sms_reception_log(sms.number, sms.text, self.serial_modem.ccid)
|
|
||||||
if self.serial_modem.phone_number:
|
|
||||||
self.check_sms(sms, int(self.serial_modem.phone_number))
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
t = threading.Thread(target=self.start_wait)
|
|
||||||
t.start()
|
|
||||||
|
|
||||||
def start_wait(self):
|
|
||||||
try:
|
|
||||||
self.serial_modem.modem.deleteMultipleStoredSms(memory="SM")
|
|
||||||
except Exception as error:
|
|
||||||
print(error)
|
|
||||||
|
|
||||||
self.serial_modem.modem.smsReceivedCallback = self.handle_sms
|
|
||||||
self.serial_modem.modem.smsTextMode = False
|
|
||||||
self.logger.info('Waiting for SMS message, for phone number ' + str(self.serial_modem.phone_number))
|
|
||||||
listen_at = time.time()
|
|
||||||
while True:
|
|
||||||
# self.logger.info("sleep for 2s in thread({})".format(threading.currentThread().name))
|
|
||||||
time.sleep(5)
|
|
||||||
# check whether timeout
|
|
||||||
now = time.time()
|
|
||||||
if (listen_at + SMS_TIMEOUT) < now:
|
|
||||||
self.logger.info("time out for {}, switch to next contact".format(self.serial_modem.phone_number))
|
|
||||||
# save the contact in timeout
|
|
||||||
self.serial_modem.modem.close()
|
|
||||||
return
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def find_info_via_ccid(ccid) -> Union[None, SimInfoPojo]:
|
|
||||||
sim_list = ExcelHelper().read_sim_info()
|
|
||||||
found_sim_list = [contact for contact in sim_list if
|
|
||||||
contact.ccid.replace("F", "") == ccid.replace("F", "")]
|
|
||||||
if len(found_sim_list) > 0:
|
|
||||||
print(found_sim_list[0].to_firestore_dict())
|
|
||||||
return found_sim_list[0]
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def check_sms(self, sms: Sms, phone: int):
|
|
||||||
self.logger.info("核查 sms")
|
|
||||||
if sms.number == self.HERMES_RDV:
|
|
||||||
if self.ACCEPT_SENTENCE in sms.text:
|
|
||||||
self.logger.info("收到来自hermes的短信,准备发送邮件")
|
|
||||||
mailer = Mailer()
|
|
||||||
result_pojo = params.firebase_store_manager.find_appointment_detail_via_phone(
|
|
||||||
str(datetime.date.today()), phone)
|
|
||||||
accepted_result = get_accepted_result_from(sms, result_pojo)
|
|
||||||
mailer.send_email(accepted_result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
worker = WaitSmsWorker(None)
|
|
||||||
sms = Sms("HERMES RDV",
|
|
||||||
"We are pleased to confirm your appointment. You will be welcomed on Apr 14, 2022 in our store at 17 rue de Sèvres at 4:45 PM. The given hour may be subje")
|
|
||||||
worker.check_sms(sms, int('628973387'))
|
|
||||||
Reference in New Issue
Block a user