diff --git a/.gitignore b/.gitignore index 8268d66..4702924 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,6 @@ pojo/__pycache__/ appointment.log utils/*.log .~contact.xlsx -/db/sim_infos.xlsx +/docs/sim_infos.xlsx .env +/docs/.~sim_infos.xlsx diff --git a/db/.~sim_infos.xlsx b/db/.~sim_infos.xlsx deleted file mode 100644 index 4c491c6..0000000 Binary files a/db/.~sim_infos.xlsx and /dev/null differ diff --git a/db/DbManager.py b/db/DbManager.py index c52b58a..e585c0d 100644 --- a/db/DbManager.py +++ b/db/DbManager.py @@ -77,10 +77,12 @@ class DataManager: if deleted >= batch_size: return self._delete_collection(coll_ref, batch_size) + # 删除数据库中所有的sim卡信息 def clear_all_sim_info(self): coll_ref = self._db.collection(SIM_INFOS) self._delete_collection(coll_ref, self.batch_size) + ## 读取数据库中的sim卡信息,然后写到sim_infos.xlsx文件中 def save_to_excel(self): # Start from the first cell. Rows and columns are zero indexed. sim_info_list = [] @@ -101,8 +103,15 @@ class DataManager: row = 0 col = 0 # Create a workbook and add a worksheet. - workbook = xlsxwriter.Workbook('sim_infos.xlsx') + workbook = xlsxwriter.Workbook(definitions.ROOT_DIR + "/docs/sim_infos.xlsx") worksheet = workbook.add_worksheet() + worksheet.write(row, 0, "phone") + worksheet.write(row, 1, "ccid") + worksheet.write(row, 2, "name") + worksheet.write(row, 3, "passport") + worksheet.write(row, 4, "email") + worksheet.write(row, 5, "position") + row = row + 1 for info in sim_info_list: # Iterate over the data and write it out row by row. if info.operator == Operator.LYCAMOBILE.value: diff --git a/docs/.~mobile_user_agent_list.xlsx b/docs/.~mobile_user_agent_list.xlsx deleted file mode 100644 index 4c491c6..0000000 Binary files a/docs/.~mobile_user_agent_list.xlsx and /dev/null differ diff --git a/docs/sim_infos.xlsx b/docs/sim_infos.xlsx new file mode 100644 index 0000000..8eea27e Binary files /dev/null and b/docs/sim_infos.xlsx differ diff --git a/modems/ModemPool.py b/modems/ModemPool.py index 7539672..9586b64 100644 --- a/modems/ModemPool.py +++ b/modems/ModemPool.py @@ -1,3 +1,4 @@ +import logging import re import time @@ -23,13 +24,14 @@ class ModemPool: self.contacts = self._excel_helper.read_contacts("/contact_all.xlsx") self._log_sender = oracle_log_sender self._db_manager = firebase_store_manager + self.logger = logging.getLogger(self.TAG) for port in self._port_list: ser = serial.Serial(port, BAUDRATE, timeout=1) self._serial_list.append(ser) def reset_all_modems(self): - print("will reset modem pool") + self.logger.info("will reset modem pool") for ser in self._serial_list: # may encontre exception here, multi-access to serial port time.sleep(2) @@ -68,19 +70,19 @@ class ModemPool: error_msg = "slot({}),sim({})".format(slot_position, sim_position) oracle_log_sender.send_contact_not_found(error_msg) else: - print("will get phone number for slot({}) SIM({}), port:{}".format(slot_position, index + 1, ser.port)) + self.logger.info("will get phone number for slot({}) SIM({}), port:{}".format(slot_position, index + 1, ser.port)) if not self._select_sim_storage(ser): - print(self._generate_error_msg(slot_position, index, SIMError.STORAGE_ERROR)) + self.logger.info(self._generate_error_msg(slot_position, index, SIMError.STORAGE_ERROR)) continue msg = self._execut_USSD_cmd("AT+CUSD=1, *132#\r", ser) if "Unfortunately" in str(msg): - print(self._generate_error_msg(slot_position, index, SIMError.SIM_DISABLED)) + self.logger.info(self._generate_error_msg(slot_position, index, SIMError.SIM_DISABLED)) continue elif "CME ERROR" in str(msg): - print(self._generate_error_msg(slot_position, index, SIMError.CME_ERROR)) + self.logger.info(self._generate_error_msg(slot_position, index, SIMError.CME_ERROR)) continue elif len(msg) == 0: - print(self._generate_error_msg(slot_position, index, SIMError.TIMEOUT)) + self.logger.info(self._generate_error_msg(slot_position, index, SIMError.TIMEOUT)) continue # find phone number match = re.search(r'33\d{9}', str(msg)) @@ -93,9 +95,6 @@ class ModemPool: sim_position=sim_position, operator=operator.value)) self._log_sender.send_log(phone_number, source=self.TAG, subject=SUBJECT_SIM_INFO, type=LOG_APPOINTMENT_SUCCESS) - # write the number to sim card's phonebook - # cmd = f'AT+CPBW={self.phone_number_position},\"{phone_number}\"\r' - # self._send_command(cmd, ser, wait_time_in_s=2) def _select_sim_storage(self, ser) -> bool: # use SIM Card storage diff --git a/notification/AcceptedResultPojo.py b/notification/AcceptedResultPojo.py new file mode 100644 index 0000000..fcbabbb --- /dev/null +++ b/notification/AcceptedResultPojo.py @@ -0,0 +1,25 @@ +from dataclasses import dataclass + +from dataclasses_json import dataclass_json + +from pojo.SimInfoPojo import SimInfoPojo + + +@dataclass_json +@dataclass +class AcceptedResultPojo: + + def __init__(self, msg: str, slot_position, sim_position, passport, email, name, phone): + self.sms_msg = msg + self.slot_position = slot_position + self.sim_position = sim_position + self.passport = "{}".format(int(passport)) + self.email = email + self.name = name + self.phone = phone + + +def get_accepted_result_from(sms, sim_info: SimInfoPojo) -> AcceptedResultPojo: + return AcceptedResultPojo(sms.text, slot_position=sim_info.slot_position, sim_position=sim_info.sim_position, + passport=sim_info.passport, email=sim_info.email, phone=sim_info.phone, + name=sim_info.name) diff --git a/notification/mailer.py b/notification/mailer.py index bdf3908..0fdd92f 100644 --- a/notification/mailer.py +++ b/notification/mailer.py @@ -6,6 +6,7 @@ import boto3 import definitions import params +from notification.AcceptedResultPojo import AcceptedResultPojo from pojo.ReserveResultPojo import ReserveResultPojo, PublishType TEMPLATE_NAME = 'scrapy_template_email' @@ -26,10 +27,10 @@ class Mailer: aws_access_key_id="AKIAU67WLKZUXEHXDJB5", aws_secret_access_key=secret) - def send_email(self, result_list: list): + def send_email(self, result: AcceptedResultPojo): # recipients = params.firebase_store_manager.get_mail_list() - recipients = ['panleicim@gmail.com'] + recipients = ['panleicim@gmail.com','kamenonly@gmail.com'] mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html") self.logger.info("send email to " + str(recipients)) @@ -41,12 +42,12 @@ class Mailer: Content={ 'Simple': { 'Subject': { - 'Data': '约会结果', + 'Data': '约会成功', 'Charset': 'utf8' }, 'Body': { 'Html': { - 'Data': mytemplate.render(result_list=result_list), + 'Data': mytemplate.render(result=result), 'Charset': 'utf8' } } diff --git a/pojo/SimInfoPojo.py b/pojo/SimInfoPojo.py index 88a58c5..dd20ad4 100644 --- a/pojo/SimInfoPojo.py +++ b/pojo/SimInfoPojo.py @@ -13,7 +13,9 @@ class SimInfoPojo: passport: str email: str - def __init__(self, phone: str, ccid: str, position, operator: str, slot_position, sim_position, + def __init__(self, phone: str, ccid: str, position, operator: str, slot_position, sim_position, name=None, + passport=None, + email=None, update_at: int = int(time.time())): self.phone = phone self.ccid = ccid @@ -22,6 +24,9 @@ class SimInfoPojo: self.operator = operator self.slot_position = slot_position self.sim_position = sim_position + self.name = name + self.passport = passport + self.email = email @staticmethod def from_firestore_dict(source): @@ -52,6 +57,8 @@ class SimInfoPojo: u'operator': self.operator, u'slot_position': self.slot_position, u'sim_position': self.sim_position, + u'email': self.email, + u'passport': self.passport, } return dest diff --git a/templates/appointment_results.html b/templates/appointment_results.html index 1e0ef80..2a7a2c6 100644 --- a/templates/appointment_results.html +++ b/templates/appointment_results.html @@ -1,9 +1,6 @@ -