1f9e272b by 王聪

pre settlement pos 接口更新

1 parent d0d6db09
ID_EN = 'PRC ID'
PP_EN = 'Passport'
EEP_EN = 'Resident Permit to Mainland'
RP_EN = 'Resident ID'
BL_EN = 'Business permit'
SME_BL_EN = 'SME Business permit'
MVI_EN = 'newCar Invoice'
UCI_EN = 'usedCar Invoice'
MVC_EN = 'Green Book(1/2)'
MVC34_EN = 'Green Book(3/4)'
BC_EN = 'Bank Card'
DDA_EN = 'DDA'
HMH_EN = 'Mortgage Waiver Letter'
JYPZ_EN = 'Used Car Document'
AFC_CONTRACT_EN = 'AFC Contract'
BD_EN = 'Insurance'
BS_EN = 'Bank Statement'
HIL_CONTRACT_1_EN = '售后回租合同'
HIL_CONTRACT_2_EN = '车辆租赁抵押合同'
HIL_CONTRACT_3_EN = '车辆处置协议'
OCR_COMPARE_COMMENT = {
ID_EN: {
'idExpiryDate': '身份证疑似过期',
'customerName': '身份证姓名与系统不一致',
'idNum': '身份证号码与系统不一致',
'other': '请确认是否提供身份证件'
},
MVI_EN: {
'firstSubmmisonDate': '请确认发票开票日期,若发票开票日期早于首次提交审批日期则无法受理放款申请',
'customerName': '发票购买方姓名与系统不一致',
'idNum': '发票购买方证件号码与系统不一致',
'vinNo': '发票车架号与系统不一致',
'vehicleTransactionAmount': '发票车辆价格与系统不一致',
'productGroupName': '请确认是否提供发票'
},
BC_EN: {
'bankName': '银行卡开户行与系统不一致',
'accountNo': '银行卡卡号与系统不一致',
'bankVerificationStatus': '请确认是否提供银行卡'
},
AFC_CONTRACT_EN: {
'applicationId & applicationVersion': '',
'service': '',
'amount': '',
'financedAmount': '',
'associatedServicePrincipal': '',
'vinNo': '',
'accountNo': '',
'accountHolderName': '',
'bankName': '',
'term': '',
'applicationEntity': ''
},
HIL_CONTRACT_1_EN: {
},
HIL_CONTRACT_2_EN: {
},
BD_EN: {
'': ''
}
}
......@@ -781,19 +781,20 @@ class SECompareView(GenericView):
bank_obj.on_off = False
bank_obj.save()
# compare_result = pos_compare()
compare_result = {
"is_pass": True,
"particulars": [{
"object_name": "PRC ID",
"fields": [{
"input": "张三",
"ocr": "张三",
"field_is_pass": True,
"comments": "身份证姓名与系统不一致"
}]
}]
}
compare_result = pos_compare(content)
# compare_result = {
# "is_pass": True,
# "particulars": [{
# "object_name": "PRC ID",
# "fields": [{
# "input": "张三",
# "ocr": "张三",
# "field_is_pass": True,
# "comments": "身份证姓名与系统不一致"
# }]
# }]
# }
return response.ok(data=compare_result)
......
......@@ -9,6 +9,7 @@ from datetime import datetime, timedelta
from collections import OrderedDict
from . import app
from settings import conf
from pos import pos
from apps.doc.models import (
AFCOCRResult,
AFCSEOCRResult,
......@@ -39,7 +40,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 apps.doc.comments import OCR_COMPARE_COMMENT
from pos.pos_consts import OCR_COMPARE_COMMENT
compare_log = logging.getLogger('compare')
log_base = '[Compare]'
......@@ -3182,28 +3183,28 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
traceback.format_exc()))
def pos_compare(application_id, application_entity, uniq_seq, ocr_res_id=None, is_ca=True, is_cms=False):
# 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
# 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:
......@@ -3225,8 +3226,15 @@ def pos_compare(application_id, application_entity, uniq_seq, ocr_res_id=None, i
uniq_seq, ocr_res_id, is_ca, is_cms))
return
pos_content_obj = json.loads(pos_content)
if is_ca:
ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict)
# 比对逻辑
# 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:
......@@ -3241,31 +3249,32 @@ def pos_compare(application_id, application_entity, uniq_seq, ocr_res_id=None, i
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, last_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, last_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()
return pos_result_output(res_obj.result)
# 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输出解析
......@@ -3284,9 +3293,9 @@ def pos_result_output(compare_result):
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
# license_comments = OCR_COMPARE_COMMENT.get(license)
# if not license_comments:
# continue
fields = []
particular["fields"] = fields
for license_item in license_items:
......@@ -3296,7 +3305,7 @@ def pos_result_output(compare_result):
field["field_is_pass"] = license_item.get("Result") == 'Y'
if not field["field_is_pass"]:
is_pass = False
field["comments"] = license_comments.get(license_item.get("Field"), '')
field["comments"] = license_item.get('comments', '')
fields.append(field)
particular["fields"] = fields
particulars.append(particular)
......
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 = {
......@@ -380,6 +382,20 @@ class Comparison:
except Exception as e:
return self.RESULT_N
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
def ca_date_compare(self, input_str, ocr_str, **kwargs):
if kwargs.get('long', False):
if '长期' in ocr_str or '永久' in ocr_str:
......
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!