152 lines
4.9 KiB
Python
Executable File
152 lines
4.9 KiB
Python
Executable File
import traceback
|
|
|
|
from fwd_api.celery_worker.worker import app
|
|
from fwd_api.models import SubscriptionRequest
|
|
from fwd_api.exception.exceptions import InvalidException
|
|
from fwd_api.models import SubscriptionRequest
|
|
from fwd_api.constant.common import ProcessType
|
|
|
|
|
|
def aggregate_result(src_result, des_result, doc_type):
|
|
if src_result["status"] != 200:
|
|
return src_result
|
|
if not des_result:
|
|
return src_result
|
|
des_result["content"]["total_pages"] += 1
|
|
des_result["content"]["ocr_num_pages"] += 1
|
|
des_result["content"]["document"][0]["end_page"] += 1
|
|
if doc_type == "imei":
|
|
des_result["content"]["document"][0]["content"][3]["value"] += src_result["content"]["document"][0]["content"][3]["value"]
|
|
elif doc_type == "invoice":
|
|
des_result["content"]["document"][0]["content"][0]["value"] = src_result["content"]["document"][0]["content"][0]["value"]
|
|
des_result["content"]["document"][0]["content"][1]["value"] = src_result["content"]["document"][0]["content"][1]["value"]
|
|
des_result["content"]["document"][0]["content"][2]["value"] += src_result["content"]["document"][0]["content"][2]["value"]
|
|
elif doc_type == "all":
|
|
des_result.update(src_result)
|
|
else:
|
|
raise InvalidException(f"doc_type: {doc_type}")
|
|
|
|
return des_result
|
|
|
|
def print_id(rq_id):
|
|
print(" [x] Received {rq}".format(rq=rq_id))
|
|
|
|
|
|
def to_status(result):
|
|
print('X')
|
|
if 'status' in result and result['status'] not in [200, 201, 202]:
|
|
return 4
|
|
return 3
|
|
|
|
|
|
def update_user(rq: SubscriptionRequest):
|
|
sub = rq.subscription
|
|
predict_status = rq.status
|
|
if predict_status == 3:
|
|
from fwd_api.utils import ProcessUtil
|
|
sub.current_token += ProcessUtil.token_value(int(rq.process_type))
|
|
sub.save()
|
|
|
|
@app.task(name='process_sap_invoice_result')
|
|
def process_invoice_sap_result(rq_id, result):
|
|
try:
|
|
rq: SubscriptionRequest = \
|
|
SubscriptionRequest.objects.filter(request_id=rq_id, process_type=ProcessType.INVOICE.value)[0]
|
|
status = to_status(result)
|
|
|
|
rq.predict_result = result
|
|
rq.status = status
|
|
rq.save()
|
|
|
|
update_user(rq)
|
|
except IndexError as e:
|
|
print(e)
|
|
print("NotFound request by requestId, %d", rq_id)
|
|
except Exception as e:
|
|
print(e)
|
|
print("Fail Invoice %d", rq_id)
|
|
traceback.print_exc()
|
|
return "FailInvoice"
|
|
|
|
|
|
@app.task(name='process_fi_invoice_result')
|
|
def process_invoice_fi_result(rq_id, result):
|
|
try:
|
|
rq: SubscriptionRequest = \
|
|
SubscriptionRequest.objects.filter(request_id=rq_id, process_type=ProcessType.FI_INVOICE.value)[0]
|
|
status = to_status(result)
|
|
|
|
rq.predict_result = result
|
|
rq.status = status
|
|
rq.save()
|
|
|
|
update_user(rq)
|
|
except IndexError as e:
|
|
print(e)
|
|
print("NotFound request by requestId, %d", rq_id)
|
|
except Exception as e:
|
|
print(e)
|
|
print("Fail Invoice %d", rq_id)
|
|
traceback.print_exc()
|
|
return "FailInvoice"
|
|
|
|
@app.task(name='process_manulife_invoice_result')
|
|
def process_invoice_manulife_result(rq_id, result):
|
|
try:
|
|
rq: SubscriptionRequest = \
|
|
SubscriptionRequest.objects.filter(request_id=rq_id, process_type=ProcessType.MANULIFE_INVOICE.value)[0]
|
|
status = to_status(result)
|
|
|
|
rq.predict_result = result
|
|
rq.status = status
|
|
rq.save()
|
|
|
|
update_user(rq)
|
|
except IndexError as e:
|
|
print(e)
|
|
print("NotFound request by requestId, %d", rq_id)
|
|
except Exception as e:
|
|
print(e)
|
|
print("Fail Invoice %d", rq_id)
|
|
traceback.print_exc()
|
|
return "FailInvoice"
|
|
|
|
@app.task(name='process_sbt_invoice_result')
|
|
def process_invoice_sbt_result(rq_id, result):
|
|
print_id(f"[DEBUG]: Received SBT request with id {rq_id}")
|
|
print_id(f"[DEBUG]: result: {result}")
|
|
try:
|
|
page_index = int(rq_id.split("_sub_")[1])
|
|
rq_id = rq_id.split("_sub_")[0]
|
|
rq: SubscriptionRequest = \
|
|
SubscriptionRequest.objects.filter(request_id=rq_id, process_type=ProcessType.SBT_INVOICE.value)[0]
|
|
# status = to_status(result)
|
|
status = result.get("status", 200)
|
|
|
|
rq.pages_left = rq.pages_left - 1
|
|
done = rq.pages_left <= 0
|
|
# aggregate results from multiple pages
|
|
rq.predict_result = aggregate_result(result, rq.predict_result, rq.doc_type.split(",")[page_index])
|
|
|
|
print_id(f"[DEBUG]: status: {status}")
|
|
|
|
if status == 200:
|
|
if not done:
|
|
rq.status = 100 # continue
|
|
else:
|
|
rq.status = 200 # stop waiting
|
|
else:
|
|
rq.status = 404 # stop waiting
|
|
|
|
rq.save()
|
|
update_user(rq)
|
|
except IndexError as e:
|
|
print(e)
|
|
print("NotFound request by requestId, %d", rq_id)
|
|
except Exception as e:
|
|
print(e)
|
|
print("Fail Invoice %d", rq_id)
|
|
traceback.print_exc()
|
|
return "FailInvoice"
|
|
|