157 lines
9.0 KiB
Python
157 lines
9.0 KiB
Python
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
|
||
|
||
ic.disable()
|
||
|
||
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": 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}")
|
||
|
||
ID = [
|
||
('7381440900800903','030c75c2-2f29-11eb-119f-0cc47ab40806','Волгоград_Энгельса'),
|
||
('9961440300902043','d4fff292-2f2a-11eb-119f-0cc47ab40806','Волжский_Ленина'),
|
||
('7381440900835933','ee3baf4d-d98d-11e6-b191-e83935b036c7','Новороссийск'),
|
||
('7381440900836042','147c9228-3d13-11ef-94eb-8a456ecaea20','Крымск_Синева'),
|
||
('9961440300902580','33bbe69c-2f2b-11eb-119f-0cc47ab40806','Камышин_Некрасова'),
|
||
('7381440900836108','b50bc5a3-12e1-11e5-9265-e83935b036c7','Краснодар_Привокзальная'),
|
||
('9961440300515155','e33636ce-2f29-11eb-119f-0cc47ab40806','Волгоград_Авиаторов'),
|
||
('7381440900834264','691807dd-2629-11e9-993e-f06a44526bea','Волгоград_Еременко'),
|
||
('7381440900965091','13f3b7e6-2f2a-11eb-119f-0cc47ab40806','Волгоград_Аллея_Героев'),
|
||
('7381440800374463','ad06d608-b690-11ed-87bd-0cc47ab40806','Самара_Кирова_виваленде'),
|
||
]
|
||
|
||
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": "kassa@ip-tr.ru",
|
||
"Password": "123456"
|
||
}
|
||
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']
|
||
result_kor = requests.get(f'https://api-lk-ofd.taxcom.ru/API/v2/DocumentList?fn={fn}&shift={shiftNumber}&type=31', headers=headers, timeout=(20, 240))
|
||
ic(result_kor.text)
|
||
cheks_kor = result_kor.json()['records']
|
||
except:
|
||
ic()
|
||
# requests.get(f'https://api.telegram.org/bot5374522720:AAGoNUYCEyJ-7-bSAQPT7aV_W2GWcinnkQU/sendMessage?parse_mode=HTML&chat_id=394151541&text=<b>Taxcom Maverik:</b>\nЧека нет')
|
||
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С.', 'Сервер 1С не доступен!\nПроверить нужно OVPN.\nЗагрузка повторится через 1 час.')
|
||
sleep(3600)
|
||
break
|
||
print(result.text)
|
||
if cheks_kor:
|
||
with open(f'checkKor_{n}', 'w', encoding='utf-8') as f:
|
||
f.write(str(cheks_kor))
|
||
if Path(f'checkKor_{n}').is_file():
|
||
if Path(f'{kassa}_kor_{n}').is_file():
|
||
if filecmp.cmp(f'checkKor_{n}', f'{kassa}_{n}'):
|
||
print(f'{kassa}_kor -- Новые чеки коррекции отсутствуют')
|
||
continue
|
||
shutil.copy(f'checkKor_{n}', f'{kassa}_kor_{n}')
|
||
Path(f'checkKor_{n}').unlink()
|
||
data = {"salepoint": salepoint,
|
||
"res": str(cheks_kor)}
|
||
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}_kor_{n}').is_file():
|
||
Path(f'{kassa}_kor_{n}').unlink()
|
||
print('Ошибка загрузки чеков в 1С.\nСервер не доступен!\nЗагрузка повторится позже.')
|
||
send_rocketchat_notification('Ошибка загрузки чеков в 1С.', 'Сервер 1С не доступен!\nПроверить нужно OVPN.\nЗагрузка повторится через 1 час.')
|
||
sleep(3600)
|
||
break
|
||
print(result.text)
|
||
print('-----------------')
|
||
except Exception as e:
|
||
send_rocketchat_notification('Ошибка Такском:', str(e))
|
||
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=<b>Taxcom:</b>\n{e}')
|
||
send_rocketchat_notification('Ошибка обработки чеков.', str(e))
|
||
|
||
print('#################')
|
||
print('#################')
|
||
print('#################\n\n')
|
||
sleep(120) |