import json, filecmp, shutil, requests
from datetime import datetime
from pathlib import Path
from time import sleep
from icecream import ic
from socket import create_connection
def check_server(ip, port):
"""Проверять доступность сервера"""
try:
create_connection((ip, port), timeout=2)
return True
except OSError:
return False
def send_rocketchat_notification(text, proccess='Разобраться!'):
ROCKET_CHAT_WEBHOOK_URL = 'https://chat.maverik.ru/hooks/6881da844a6bb0ff6126fb0c/sQXCxLCrfNCtYumnWaEKbyqYvFhHSFCSevy8iBR3T2beP8j5'
data = {
"alias": "Чеки Мэверик",
"text": text,
"attachments": [
{
"text": f"**{proccess}**",
"color": "#5B34E7"
}
]
}
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(ROCKET_CHAT_WEBHOOK_URL, json=data, headers=headers)
if response.status_code != 200:
print(f"Ошибка отправки уведомления: {response.text}")
except Exception as e:
print(f"Ошибка при отправке уведомления: {e}")
ic.disable()
ID = [ ('7385440800019283','c9722276-9dce-11ef-86ff-8a456ecaea20','Хабаровск'),
('7381440900804318','34dfe5e2-9f7c-11ec-ed95-0cc47ab40806','Комсомольск_на_Амуре'),
('7385440800015768','7f8bb0cc-d7a5-11ee-85fe-8a456ecaea20','Береста 6'),
('7381440900865598','b0657834-65f9-11f0-8bb1-74563c59aa03','Новороссийск'),
]
while True:
CurDate = datetime.date(datetime.now())
prevDate = datetime.date(datetime.now())
try:
for fn, salepoint, kassa in ID:
ic(fn, salepoint)
headers = {
"Content-Type": "application/json",
"Integrator-ID": "BFFFC47E-38BB-4845-8399-7C2F5AB11A3C"
}
data = {
"Login": "myasnikova@maverik.ru",
"Password": "qolabuyi"
}
result = requests.post('https://api-lk-ofd.taxcom.ru/API/v2/Login', headers=headers, data=json.dumps(data), timeout=(20, 240))
sessionToken = result.json()['sessionToken']
headers = {
"Content-Type":"application/json",
"Session-Token": f"{sessionToken}"
}
ic(result.text)
ic(sessionToken)
try:
n = 0
result = requests.get(f"https://api-lk-ofd.taxcom.ru/API/v2/ShiftList?fn={fn}&begin={prevDate}T00:00:00&end={CurDate}T23:59:59", headers=headers, timeout=(20, 240))
for i in result.json()['records']:
n += 1
shiftNumber = i['shiftNumber']
fnFactoryNumber = i['fnFactoryNumber']
ic(result.text)
try:
result = requests.get(f'https://api-lk-ofd.taxcom.ru/API/v2/DocumentList?fn={fn}&shift={shiftNumber}&type=3', headers=headers, timeout=(20, 240))
ic(result.text)
cheks = result.json()['records']
except:
ic()
# requests.get(f'https://api.telegram.org/bot5374522720:AAGoNUYCEyJ-7-bSAQPT7aV_W2GWcinnkQU/sendMessage?parse_mode=HTML&chat_id=394151541&text=Taxcom Maverik:\nЧека нет')
# send_rocketchat_notification(f'Чеков нет: {kassa}', 'Taxcom Maverik')
continue
with open(f'check_{n}', 'w', encoding='utf-8') as f:
f.write(str(cheks))
if Path(f'check_{n}').is_file():
if Path(f'{kassa}_{n}').is_file():
if filecmp.cmp(f'check_{n}', f'{kassa}_{n}'):
print(f'{kassa} -- Новые чеки отсутствуют')
continue
shutil.copy(f'check_{n}', f'{kassa}_{n}')
Path(f'check_{n}').unlink()
data = {"salepoint": salepoint,
"res": str(cheks)}
data = json.dumps(data, ensure_ascii=False).encode('utf-8')
print(kassa)
if check_server('1c.maverik.ru', 443):
result = requests.post('https://1c.maverik.ru/bso_maverik/hs/exchange/saveTaxcomDocs', data=data, allow_redirects=False, auth=('robot', 's38*Cqy2L*PB'), timeout=(10, 120))
elif check_server('10.15.0.3', 80):
result = requests.post('http://10.15.0.3/bso_maverik/hs/exchange/saveTaxcomDocs', data=data, allow_redirects=False, auth=('robot', 's38*Cqy2L*PB'), timeout=(10, 120))
else:
if Path(f'{kassa}_{n}').is_file():
Path(f'{kassa}_{n}').unlink()
print('Ошибка загрузки чеков в 1С.\nСервер не доступен!\nЗагрузка повторится позже.')
send_rocketchat_notification('Ошибка загрузки чеков в 1С.\nСервер не доступен!\nЗагрузка повторится через 1 час.', 'Taxcom Maverik')
sleep(3600)
break
print(result.text)
print('-----------------')
except Exception as e:
# requests.get(f'https://api.telegram.org/bot5374522720:AAGoNUYCEyJ-7-bSAQPT7aV_W2GWcinnkQU/sendMessage?parse_mode=HTML&chat_id=394151541&text=Taxcom Maverik:\n{e}')
send_rocketchat_notification(e, 'Taxcom Maverik')
continue
print('#################')
except Exception as e:
# requests.get(f'https://api.telegram.org/bot5374522720:AAGoNUYCEyJ-7-bSAQPT7aV_W2GWcinnkQU/sendMessage?parse_mode=HTML&chat_id=394151541&text=Taxcom Maverik:\n{e}')
send_rocketchat_notification(e, 'Taxcom Maverik')
print('continue\n\n')
# print('#################')
# print('#################')
sleep(120)