f6840d5c by 周伟奇

merge wangcong dev

1 parent 01314b0c
......@@ -51,7 +51,7 @@ from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult
from .mixins import DocHandler, MPOSHandler
from . import consts
from apps.account.authentication import OAuth2AuthenticationWithUser
from celery_compare.tasks import compare
from celery_compare.tasks import compare, pos_compare
class CustomDate(fields.Date):
......@@ -781,7 +781,9 @@ class SECompareView(GenericView):
bank_obj.on_off = False
bank_obj.save()
return response.ok()
compare_result = pos_compare(content)
return response.ok(data=compare_result)
post.openapi_doc = '''
tags: [info]
......
......@@ -39,6 +39,7 @@ from apps.doc.exceptions import GCAPException
from apps.doc.named_enum import RequestTeam, RequestTrigger, ProcessName, ErrorType
from common.tools.comparison import cp
from common.tools.des import decode_des
from pos import pos
compare_log = logging.getLogger('compare')
log_base = '[Compare]'
......@@ -3198,3 +3199,136 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
compare_log.error('{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
'[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
traceback.format_exc()))
# pos接口
def pos_compare(pos_content, application_id, application_entity, uniq_seq, ocr_res_id=None, is_ca=True, is_cms=False):
# POS: application_id, application_entity, uniq_seq, None
# OCR: application_id, business_type(application_entity), None, ocr_res_id
compare_log.info('{0} [pos_compare] [entity={1}] [id={2}] [uniq_seq={3}] [is_ca={4}] '
'[is_cms={5}]'.format(log_base, application_entity, application_id, uniq_seq,
is_ca, is_cms))
# 根据application_id查找最新的比对信息,如果没有,结束
# if is_ca:
# comparison_class = HILComparisonInfo if application_entity == consts.HIL_PREFIX else AFCComparisonInfo
# else:
# if application_entity == consts.HIL_PREFIX:
# comparison_class = HILSECMSInfo if is_cms else HILSEComparisonInfo
# else:
# comparison_class = AFCSECMSInfo if is_cms else AFCSEComparisonInfo
# last_obj = comparison_class.objects.filter(application_id=application_id).last()
# if last_obj is None:
# compare_log.info('{0} [comparison info empty] [entity={1}] [id={2}] [uniq_seq={3}] '
# '[is_ca={4}] [is_cms]={5}'.format(log_base, application_entity, application_id, uniq_seq,
# is_ca, is_cms))
# return
# 根据application_id查找OCR累计结果指定license字段,如果没有,结束
if is_ca:
result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
ca_ocr_res_dict = dict()
else:
result_class = HILSEOCRResult if application_entity == consts.HIL_PREFIX else AFCSEOCRResult
ca_result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
# if ocr_res_id is None:
ca_ocr_res_dict = ca_result_class.objects.filter(application_id=application_id).values(
*consts.CA_ADD_COMPARE_FIELDS).first()
# else:
# ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
# *consts.CA_ADD_COMPARE_FIELDS).first()
ocr_res_dict = result_class.objects.filter(application_id=application_id).values(*consts.COMPARE_FIELDS).first()
if ocr_res_dict is None:
compare_log.info('{0} [ocr info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'.format(log_base, application_entity, application_id,
uniq_seq, ocr_res_id, is_ca, is_cms))
return
pos_content_obj = json.loads(pos_content)
if is_ca:
# 比对逻辑
# compare_info = get_ca_compare_info(pos_content_obj)
# compare_result, total_fields, failed_count = ca_compare_process(compare_info, ocr_res_dict)
# compare_log.info('{0} [CA] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
# log_base, application_entity, application_id, ocr_res_id, compare_result))
# ca_compare(application_id, application_entity, ocr_res_id, pos_content_obj, ocr_res_dict)
compare_result = pos.PosCompare.ca_compare(pos_content_obj, ocr_res_dict)
else:
id_res_list = []
for field_name in consts.CA_ADD_COMPARE_FIELDS:
if field_name == consts.IC_OCR_FIELD:
id_res_list.append(ocr_res_dict.get(field_name))
id_res_list.append(ca_ocr_res_dict.get(field_name) if isinstance(ca_ocr_res_dict, dict) else None)
if isinstance(ca_ocr_res_dict, dict) and isinstance(ca_ocr_res_dict.get(field_name), str):
tmp_ca_result = json.loads(ca_ocr_res_dict.get(field_name))
if isinstance(ocr_res_dict.get(field_name), str):
tmp_se_result = json.loads(ocr_res_dict.get(field_name))
tmp_ca_result.extend(tmp_se_result)
ocr_res_dict[field_name] = json.dumps(tmp_ca_result)
# auto settlement
# auto_class = HILAutoSettlement if application_entity == consts.HIL_PREFIX else AFCAutoSettlement
# auto_obj = auto_class.objects.filter(application_id=application_id, on_off=True).first()
# bank_class = HILbankVerification if application_entity == consts.HIL_PREFIX else AFCbankVerification
# ignore_bank = bank_class.objects.filter(application_id=application_id, on_off=True).exists()
# if auto_obj is not None:
# auto_result = se_compare_auto(application_id, application_entity, ocr_res_id, pos_content_obj, ocr_res_dict, auto_obj, ignore_bank, id_res_list)
# else:
# auto_result = None
#
# full_result = se_compare(application_id, application_entity, ocr_res_id, pos_content_obj, ocr_res_dict, is_cms, auto_result, ignore_bank, id_res_list)
#
# if auto_obj is not None:
# try:
# auto_obj.ocr_whole_result_pass = full_result
# auto_obj.save()
# compare_log.info('{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format(
# log_base, application_entity, application_id, ocr_res_id))
# except Exception as e:
# compare_log.error('{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
# '[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
# traceback.format_exc()))
# result_table = HILCACompareResult if application_entity == consts.HIL_PREFIX else AFCCACompareResult
# res_obj = result_table.objects.filter(application_id=application_id).first()
compare_result = pos.PosCompare.se_compare(pos_content_obj, ocr_res_dict, id_res_list=id_res_list)
return pos_result_output(compare_result)
# pos输出解析
def pos_result_output(compare_result):
result_obj = json.loads(compare_result)
license_map = dict()
for item in result_obj:
license_en = item.get("License")
if license_map.get(license_en):
license_map.get(license_en).append(item)
else:
info_items = [item]
license_map[license_en] = info_items
is_pass = True
particulars = []
for license, license_items in license_map.items():
particular = {"object_name": license}
# license_comments = OCR_COMPARE_COMMENT.get(license)
# if not license_comments:
# continue
fields = []
particular["fields"] = fields
for license_item in license_items:
field = dict()
field["input"] = license_item.get("Input")
field["ocr"] = license_item.get("OCR")
field["field_is_pass"] = license_item.get("Result") == 'Y'
if not field["field_is_pass"]:
is_pass = False
field["comments"] = license_item.get('comments', '')
fields.append(field)
particular["fields"] = fields
particulars.append(particular)
return {
"is_pass": is_pass,
"particulars": particulars
}
......
import re
import time
import numpy as np
from datetime import datetime
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
from .rmb_lower import rmb_handler
# from .rmb_upper import to_rmb_upper
......@@ -29,6 +29,8 @@ class Comparison:
self.RESULT_Y = 'Y'
self.RESULT_N = 'N'
self.RESULT_N1 = 'N1'
self.RESULT_N2 = 'N2'
self.RESULT_NA = 'NA'
self.TRANS_MAP = {
......@@ -608,6 +610,20 @@ class Comparison:
return self.RESULT_N
return self.se_date_compare_2(input_str, ocr_date_set.pop(), three_month=True)
def se_date_compare_pos(self, input_str, ocr_str, **kwargs):
try:
ocr_date = datetime.strptime(ocr_str, "%Y-%m-%d").date()
today = datetime.now().date()
if ocr_date < today:
return self.RESULT_N1
elif today <= ocr_date <= (today + timedelta(days=8)):
return self.RESULT_N2
elif ocr_date > (today + timedelta(days=8)):
return self.RESULT_Y
except Exception as e:
return self.RESULT_N
return self.RESULT_N
cp = Comparison()
......
File mode changed
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!