a883d3ea by chenyao

Merge branch 'master' into feature/uat-tmp-cy

2 parents 2f1da6a1 3a4fd0b0
......@@ -1675,15 +1675,30 @@ SE_FSM_MSI_MAP = {
'签单日期': (2, '签单日期'),
}
def get_page_customer_sign(page_no):
return (page_no, '客户签名')
def get_page_sign_date(page_no):
return (page_no, '签单日期')
SE_FSM_SC_MAP = {
'姓名': (1, '姓名'),
'证件类型': (1, '证件类型'),
'证件号码': (1, '证件号码'),
'总价': (1, '总价'),
'客户签名': (12, '客户签名'),
'签单日期': (12, '签单日期'),
'客户签名': get_page_customer_sign,
'签单日期': get_page_sign_date,
}
# SE_FSM_SC_MAP = {
# '姓名': (1, '姓名'),
# '证件类型': (1, '证件类型'),
# '证件号码': (1, '证件号码'),
# '总价': (1, '总价'),
# '客户签名': (12, '客户签名'),
# '签单日期': (12, '签单日期'),
# }
SE_FSM_SC2_MAP = {
'姓名': (1, '姓名'),
'证件类型': (1, '证件类型'),
......@@ -1885,7 +1900,7 @@ ZZSSE_FIELD = '增值税税额'
MVI_COMPARE_LOGIC = {
'vinNo': ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'),
'dealer': ('销方名称', 'se_common_compare', {'brackets_replace': True}, '发票销货单位名称与系统不一致'),
'dealer': ('销方名称', 'se_input_list_compare', {'brackets_replace': True}, '发票销货单位名称与系统不一致'),
'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}, '发票车辆价格与系统不一致'),
'customerName': ('购方名称', 'se_name_compare', {'is_passport': True, 'replace_kuohao': True}, '发票购买方姓名与系统不一致'),
'idNum': ('购买方身份证号或组织机构代码', 'se_common_compare', {}, '发票购买方证件号码与系统不一致'),
......
......@@ -1030,10 +1030,23 @@ class Command(BaseCommand, LoggerMixin):
elif classify in consts.SE_FSM_CON_MAP:
res = {}
for key, (pno1, key1) in consts.SE_FSM_CON_MAP[classify].items():
# for key, (pno1, key1) in consts.SE_FSM_CON_MAP[classify].items():
# res[key] = page_info_dict.get(str(pno1), {}).get(key1)
# res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(
# consts.IMG_PATH_KEY, '')
# license_summary[classify] = [res]
for key, value in consts.SE_FSM_CON_MAP[classify].items():
if callable(value):
for page_no in page_info_dict.keys():
if page_no != 'is_asp' and page_no != '1':
pno1, key1 = value(int(page_no))
res[key] = page_info_dict.get(str(pno1), {}).get(key1)
res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(
consts.IMG_PATH_KEY, '')
res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(consts.IMG_PATH_KEY, '')
else:
pno1, key1 = value
res[key] = page_info_dict.get(str(pno1), {}).get(key1)
res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(consts.IMG_PATH_KEY, '')
license_summary[classify] = [res]
def rebuild_bs_summary(self, bs_summary, unknown_summary):
......
......@@ -1109,3 +1109,13 @@ class HILCmsStatusInfo(models.Model):
class Meta:
managed = False
db_table = 'hil_cms_status_info'
class DealerMapping(models.Model):
id = models.AutoField(primary_key=True, verbose_name="id") # 主键
cms_value = models.CharField(max_length=64, verbose_name="CMS中的 dealer name")
mapping_value = models.CharField(max_length=64, verbose_name="映射后的 dealer name")
create_time = models.DateTimeField(verbose_name='创建时间')
class Meta:
managed = False
db_table = 'dealer_mapping'
\ No newline at end of file
......
......@@ -1116,7 +1116,8 @@ class DocView(DocGenericView, DocHandler):
document_scheme = request.POST.get('document_scheme', '')
data_source = request.POST.get('data_source', '')
document_name = request.POST.get('document_name', '')
args = {'business_type':business_type,'document_scheme':document_scheme,'data_source':data_source,'document_name':document_name,'pdf_file':pdf_file}
fsm = request.POST.get('is_fsm', 'N')
args = {'business_type':business_type,'document_scheme':document_scheme,'data_source':data_source,'document_name':document_name,'pdf_file':pdf_file,'fsm':fsm}
# business_type = random.choice(consts.BUSINESS_TYPE_LIST)
# business_type = consts.BUSINESS_TYPE_LIST[0]
tmp_save_path = os.path.join(conf.DATA_DIR, business_type, '{0}.pdf'.format(metadata_version_id))
......@@ -1166,6 +1167,7 @@ class DocView(DocGenericView, DocHandler):
# co_applicant='',
# guarantor_1='',
# guarantor_2='',
is_ovp_fsm=1 if fsm == 'Y' else 0,
document_name=application_id,
document_scheme=document_scheme,
data_source=data_source,
......
......@@ -38,6 +38,7 @@ from apps.doc.models import (
HILCompareReportNew,
AFCCompareReportNew,
AFCDoc,
DealerMapping,
)
from apps.doc import consts
from apps.doc.ocr.gcap import gcap
......@@ -900,7 +901,7 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
traceback.format_exc()))
def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto=True, ignore_bank=False):
def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, data_source, auto=True, ignore_bank=False):
cms_info = json.loads(last_obj.content)
compare_info = {}
......@@ -913,6 +914,21 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto
dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1]
issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip()
#CHINARPA-4546 delaerName变为list,包含dealer_name_list[0]映射后对应的所有值 + dealer_name_list[-1],比对时,任一完全一致为Y,全部不一致为N
dealer_name_list_ex = []
dealer_name_mapper_list = []
if len(dealer_name_list) != 0:
dealer_name_list_ex.append(dealer_name_list[-1]) # CMS的最后一个值
dealer_name_mapper_obj = DealerMapping.objects.filter(cms_value=dealer_name_list[0]).first()
if dealer_name_mapper_obj is not None:
dealer_name_mapper_str = dealer_name_mapper_obj.mapping_value
dealer_name_mapper_list = dealer_name_mapper_str.split(',')
dealer_name_list_ex.extend(dealer_name_mapper_list) # 映射后的所有值
issuer_dealer_list = []
issuer_dealer_list.append(cms_info.get('fapiaoIssuerDealer', '').strip())
compare_log.info('[get_se_cms_compare_info_auto] [新车发票] [application_id {0}] [dealer_name_mapper_list {1}] [dealer_name_list_ex {2}] [issuer_dealer {3}]'
.format(application_id, dealer_name_mapper_list,dealer_name_list_ex,issuer_dealer_list))
# 个人信息证件------------------------------------------------------------------------------------------------------
# is_cdfl = True # 车贷分离
is_cdfl_bo = False # 车贷分离,主借
......@@ -1040,7 +1056,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto
# 新车发票----------------------------------------------------------------------------------------------------------
if vehicle_status == 'New':
vehicle_field_input.append(('vinNo', vin_no))
vehicle_field_input.append(('dealer', dealer_name if len(issuer_dealer) == 0 else issuer_dealer))
vehicle_field_input.append(('dealer', dealer_name_list_ex if len(issuer_dealer_list[0]) == 0 else issuer_dealer_list))
vehicle_field_input.append(('vehicleTransactionAmount', amount))
if isinstance(company_info, tuple):
......@@ -1453,7 +1469,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto
return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh
def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False):
def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False):
cms_info = json.loads(last_obj.content)
compare_info = {}
......@@ -1466,6 +1482,21 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour
dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1]
issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip()
#CHINARPA-4546 delaerName变为list,包含dealer_name_list[0]映射后对应的所有值 + dealer_name_list[-1],比对时,任一完全一致为Y,全部不一致为N
dealer_name_list_ex = []
dealer_name_mapper_list = []
if len(dealer_name_list) != 0:
dealer_name_list_ex.append(dealer_name_list[-1]) # CMS的最后一个值
dealer_name_mapper_obj = DealerMapping.objects.filter(cms_value=dealer_name_list[0]).first()
if dealer_name_mapper_obj is not None:
dealer_name_mapper_str = dealer_name_mapper_obj.mapping_value
dealer_name_mapper_list = dealer_name_mapper_str.split(',')
dealer_name_list_ex.extend(dealer_name_mapper_list) # 映射后的所有值
issuer_dealer_list = []
issuer_dealer_list.append(cms_info.get('fapiaoIssuerDealer', '').strip())
compare_log.info('[get_se_cms_compare_info_] [新车发票] [application_id {0}] [dealer_name_mapper_list {1}] [dealer_name_list_ex {2}] [issuer_dealer {3}]'
.format(application_id, dealer_name_mapper_list,dealer_name_list_ex,issuer_dealer_list))
# 个人信息证件------------------------------------------------------------------------------------------------------
is_cdfl_bo = False # 车贷分离,主借
is_cdfl_co = False # 车贷分离,共借
......@@ -1588,7 +1619,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour
# 新车发票----------------------------------------------------------------------------------------------------------
if vehicle_status == 'New':
vehicle_field_input.append(('vinNo', vin_no))
vehicle_field_input.append(('dealer', dealer_name if len(issuer_dealer) == 0 else issuer_dealer))
vehicle_field_input.append(('dealer', dealer_name_list_ex if len(issuer_dealer_list[0]) == 0 else issuer_dealer_list))
vehicle_field_input.append(('vehicleTransactionAmount', amount))
if isinstance(company_info, tuple):
......@@ -3126,7 +3157,7 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc
# 比对逻辑
# detect_list = se_result_detect(ocr_res_dict)
compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto(
last_obj, application_entity, data_source, ignore_bank=ignore_bank)
application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank)
compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process(
compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type)
......@@ -3193,7 +3224,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
start_time = datetime.now()
detect_list = se_result_detect(ocr_res_dict)
compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info(
last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank)
application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank)
compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process(
compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type)
......
......@@ -8,7 +8,9 @@ from .rmb_lower import rmb_handler
from pandas._libs import tslib
from pandas._libs.tslibs.nattype import NaTType
from pandas.core.indexes.datetimes import DatetimeIndex
import logging
compare_log = logging.getLogger('compare')
class Comparison:
......@@ -187,6 +189,19 @@ class Comparison:
else:
return self.RESULT_N
def se_input_list_compare(self, input_list, ocr_str, **kwargs):
if isinstance(input_list, list) and len(input_list) > 0 and isinstance(ocr_str, str):
ocr_str = ocr_str.translate(self.KH_TRANS)
for input_str in input_list:
input_str = input_str.translate(self.KH_TRANS)
compare_log.info('[se_input_list_compare] [input_str {0}] [ocr_str {1}]'.format(input_str, ocr_str))
if input_str == ocr_str:
return self.RESULT_Y
return self.RESULT_N
else:
return self.RESULT_N
def super_list_compare(self, input_list, ocr_str, **kwargs):
for input_str in input_list:
if kwargs.get('method', 'common') == 'name':
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!