Merge branch 'master' into feature/uat-tmp-cy
Showing
6 changed files
with
99 additions
and
13 deletions
... | @@ -1675,15 +1675,30 @@ SE_FSM_MSI_MAP = { | ... | @@ -1675,15 +1675,30 @@ SE_FSM_MSI_MAP = { |
1675 | '签单日期': (2, '签单日期'), | 1675 | '签单日期': (2, '签单日期'), |
1676 | } | 1676 | } |
1677 | 1677 | ||
1678 | def get_page_customer_sign(page_no): | ||
1679 | return (page_no, '客户签名') | ||
1680 | |||
1681 | def get_page_sign_date(page_no): | ||
1682 | return (page_no, '签单日期') | ||
1683 | |||
1678 | SE_FSM_SC_MAP = { | 1684 | SE_FSM_SC_MAP = { |
1679 | '姓名': (1, '姓名'), | 1685 | '姓名': (1, '姓名'), |
1680 | '证件类型': (1, '证件类型'), | 1686 | '证件类型': (1, '证件类型'), |
1681 | '证件号码': (1, '证件号码'), | 1687 | '证件号码': (1, '证件号码'), |
1682 | '总价': (1, '总价'), | 1688 | '总价': (1, '总价'), |
1683 | '客户签名': (12, '客户签名'), | 1689 | '客户签名': get_page_customer_sign, |
1684 | '签单日期': (12, '签单日期'), | 1690 | '签单日期': get_page_sign_date, |
1685 | } | 1691 | } |
1686 | 1692 | ||
1693 | # SE_FSM_SC_MAP = { | ||
1694 | # '姓名': (1, '姓名'), | ||
1695 | # '证件类型': (1, '证件类型'), | ||
1696 | # '证件号码': (1, '证件号码'), | ||
1697 | # '总价': (1, '总价'), | ||
1698 | # '客户签名': (12, '客户签名'), | ||
1699 | # '签单日期': (12, '签单日期'), | ||
1700 | # } | ||
1701 | |||
1687 | SE_FSM_SC2_MAP = { | 1702 | SE_FSM_SC2_MAP = { |
1688 | '姓名': (1, '姓名'), | 1703 | '姓名': (1, '姓名'), |
1689 | '证件类型': (1, '证件类型'), | 1704 | '证件类型': (1, '证件类型'), |
... | @@ -1885,7 +1900,7 @@ ZZSSE_FIELD = '增值税税额' | ... | @@ -1885,7 +1900,7 @@ ZZSSE_FIELD = '增值税税额' |
1885 | 1900 | ||
1886 | MVI_COMPARE_LOGIC = { | 1901 | MVI_COMPARE_LOGIC = { |
1887 | 'vinNo': ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'), | 1902 | 'vinNo': ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'), |
1888 | 'dealer': ('销方名称', 'se_common_compare', {'brackets_replace': True}, '发票销货单位名称与系统不一致'), | 1903 | 'dealer': ('销方名称', 'se_input_list_compare', {'brackets_replace': True}, '发票销货单位名称与系统不一致'), |
1889 | 'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}, '发票车辆价格与系统不一致'), | 1904 | 'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}, '发票车辆价格与系统不一致'), |
1890 | 'customerName': ('购方名称', 'se_name_compare', {'is_passport': True, 'replace_kuohao': True}, '发票购买方姓名与系统不一致'), | 1905 | 'customerName': ('购方名称', 'se_name_compare', {'is_passport': True, 'replace_kuohao': True}, '发票购买方姓名与系统不一致'), |
1891 | 'idNum': ('购买方身份证号或组织机构代码', 'se_common_compare', {}, '发票购买方证件号码与系统不一致'), | 1906 | 'idNum': ('购买方身份证号或组织机构代码', 'se_common_compare', {}, '发票购买方证件号码与系统不一致'), | ... | ... |
... | @@ -1030,10 +1030,23 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -1030,10 +1030,23 @@ class Command(BaseCommand, LoggerMixin): |
1030 | 1030 | ||
1031 | elif classify in consts.SE_FSM_CON_MAP: | 1031 | elif classify in consts.SE_FSM_CON_MAP: |
1032 | res = {} | 1032 | res = {} |
1033 | for key, (pno1, key1) in consts.SE_FSM_CON_MAP[classify].items(): | 1033 | # for key, (pno1, key1) in consts.SE_FSM_CON_MAP[classify].items(): |
1034 | # res[key] = page_info_dict.get(str(pno1), {}).get(key1) | ||
1035 | # res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get( | ||
1036 | # consts.IMG_PATH_KEY, '') | ||
1037 | # license_summary[classify] = [res] | ||
1038 | |||
1039 | for key, value in consts.SE_FSM_CON_MAP[classify].items(): | ||
1040 | if callable(value): | ||
1041 | for page_no in page_info_dict.keys(): | ||
1042 | if page_no != 'is_asp' and page_no != '1': | ||
1043 | pno1, key1 = value(int(page_no)) | ||
1034 | res[key] = page_info_dict.get(str(pno1), {}).get(key1) | 1044 | res[key] = page_info_dict.get(str(pno1), {}).get(key1) |
1035 | res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get( | 1045 | res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(consts.IMG_PATH_KEY, '') |
1036 | consts.IMG_PATH_KEY, '') | 1046 | else: |
1047 | pno1, key1 = value | ||
1048 | res[key] = page_info_dict.get(str(pno1), {}).get(key1) | ||
1049 | res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno1), {}).get(consts.IMG_PATH_KEY, '') | ||
1037 | license_summary[classify] = [res] | 1050 | license_summary[classify] = [res] |
1038 | 1051 | ||
1039 | def rebuild_bs_summary(self, bs_summary, unknown_summary): | 1052 | def rebuild_bs_summary(self, bs_summary, unknown_summary): | ... | ... |
... | @@ -1109,3 +1109,13 @@ class HILCmsStatusInfo(models.Model): | ... | @@ -1109,3 +1109,13 @@ class HILCmsStatusInfo(models.Model): |
1109 | class Meta: | 1109 | class Meta: |
1110 | managed = False | 1110 | managed = False |
1111 | db_table = 'hil_cms_status_info' | 1111 | db_table = 'hil_cms_status_info' |
1112 | |||
1113 | class DealerMapping(models.Model): | ||
1114 | id = models.AutoField(primary_key=True, verbose_name="id") # 主键 | ||
1115 | cms_value = models.CharField(max_length=64, verbose_name="CMS中的 dealer name") | ||
1116 | mapping_value = models.CharField(max_length=64, verbose_name="映射后的 dealer name") | ||
1117 | create_time = models.DateTimeField(verbose_name='创建时间') | ||
1118 | |||
1119 | class Meta: | ||
1120 | managed = False | ||
1121 | db_table = 'dealer_mapping' | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -1116,7 +1116,8 @@ class DocView(DocGenericView, DocHandler): | ... | @@ -1116,7 +1116,8 @@ class DocView(DocGenericView, DocHandler): |
1116 | document_scheme = request.POST.get('document_scheme', '') | 1116 | document_scheme = request.POST.get('document_scheme', '') |
1117 | data_source = request.POST.get('data_source', '') | 1117 | data_source = request.POST.get('data_source', '') |
1118 | document_name = request.POST.get('document_name', '') | 1118 | document_name = request.POST.get('document_name', '') |
1119 | args = {'business_type':business_type,'document_scheme':document_scheme,'data_source':data_source,'document_name':document_name,'pdf_file':pdf_file} | 1119 | fsm = request.POST.get('is_fsm', 'N') |
1120 | args = {'business_type':business_type,'document_scheme':document_scheme,'data_source':data_source,'document_name':document_name,'pdf_file':pdf_file,'fsm':fsm} | ||
1120 | # business_type = random.choice(consts.BUSINESS_TYPE_LIST) | 1121 | # business_type = random.choice(consts.BUSINESS_TYPE_LIST) |
1121 | # business_type = consts.BUSINESS_TYPE_LIST[0] | 1122 | # business_type = consts.BUSINESS_TYPE_LIST[0] |
1122 | tmp_save_path = os.path.join(conf.DATA_DIR, business_type, '{0}.pdf'.format(metadata_version_id)) | 1123 | 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): | ... | @@ -1166,6 +1167,7 @@ class DocView(DocGenericView, DocHandler): |
1166 | # co_applicant='', | 1167 | # co_applicant='', |
1167 | # guarantor_1='', | 1168 | # guarantor_1='', |
1168 | # guarantor_2='', | 1169 | # guarantor_2='', |
1170 | is_ovp_fsm=1 if fsm == 'Y' else 0, | ||
1169 | document_name=application_id, | 1171 | document_name=application_id, |
1170 | document_scheme=document_scheme, | 1172 | document_scheme=document_scheme, |
1171 | data_source=data_source, | 1173 | data_source=data_source, | ... | ... |
... | @@ -38,6 +38,7 @@ from apps.doc.models import ( | ... | @@ -38,6 +38,7 @@ from apps.doc.models import ( |
38 | HILCompareReportNew, | 38 | HILCompareReportNew, |
39 | AFCCompareReportNew, | 39 | AFCCompareReportNew, |
40 | AFCDoc, | 40 | AFCDoc, |
41 | DealerMapping, | ||
41 | ) | 42 | ) |
42 | from apps.doc import consts | 43 | from apps.doc import consts |
43 | from apps.doc.ocr.gcap import gcap | 44 | 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 | ... | @@ -900,7 +901,7 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res |
900 | traceback.format_exc())) | 901 | traceback.format_exc())) |
901 | 902 | ||
902 | 903 | ||
903 | def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto=True, ignore_bank=False): | 904 | def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, data_source, auto=True, ignore_bank=False): |
904 | cms_info = json.loads(last_obj.content) | 905 | cms_info = json.loads(last_obj.content) |
905 | 906 | ||
906 | compare_info = {} | 907 | compare_info = {} |
... | @@ -913,6 +914,21 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto | ... | @@ -913,6 +914,21 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto |
913 | dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1] | 914 | dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1] |
914 | issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip() | 915 | issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip() |
915 | 916 | ||
917 | #CHINARPA-4546 delaerName变为list,包含dealer_name_list[0]映射后对应的所有值 + dealer_name_list[-1],比对时,任一完全一致为Y,全部不一致为N | ||
918 | dealer_name_list_ex = [] | ||
919 | dealer_name_mapper_list = [] | ||
920 | if len(dealer_name_list) != 0: | ||
921 | dealer_name_list_ex.append(dealer_name_list[-1]) # CMS的最后一个值 | ||
922 | dealer_name_mapper_obj = DealerMapping.objects.filter(cms_value=dealer_name_list[0]).first() | ||
923 | if dealer_name_mapper_obj is not None: | ||
924 | dealer_name_mapper_str = dealer_name_mapper_obj.mapping_value | ||
925 | dealer_name_mapper_list = dealer_name_mapper_str.split(',') | ||
926 | dealer_name_list_ex.extend(dealer_name_mapper_list) # 映射后的所有值 | ||
927 | issuer_dealer_list = [] | ||
928 | issuer_dealer_list.append(cms_info.get('fapiaoIssuerDealer', '').strip()) | ||
929 | 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}]' | ||
930 | .format(application_id, dealer_name_mapper_list,dealer_name_list_ex,issuer_dealer_list)) | ||
931 | |||
916 | # 个人信息证件------------------------------------------------------------------------------------------------------ | 932 | # 个人信息证件------------------------------------------------------------------------------------------------------ |
917 | # is_cdfl = True # 车贷分离 | 933 | # is_cdfl = True # 车贷分离 |
918 | is_cdfl_bo = False # 车贷分离,主借 | 934 | is_cdfl_bo = False # 车贷分离,主借 |
... | @@ -1040,7 +1056,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto | ... | @@ -1040,7 +1056,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto |
1040 | # 新车发票---------------------------------------------------------------------------------------------------------- | 1056 | # 新车发票---------------------------------------------------------------------------------------------------------- |
1041 | if vehicle_status == 'New': | 1057 | if vehicle_status == 'New': |
1042 | vehicle_field_input.append(('vinNo', vin_no)) | 1058 | vehicle_field_input.append(('vinNo', vin_no)) |
1043 | vehicle_field_input.append(('dealer', dealer_name if len(issuer_dealer) == 0 else issuer_dealer)) | 1059 | vehicle_field_input.append(('dealer', dealer_name_list_ex if len(issuer_dealer_list[0]) == 0 else issuer_dealer_list)) |
1044 | vehicle_field_input.append(('vehicleTransactionAmount', amount)) | 1060 | vehicle_field_input.append(('vehicleTransactionAmount', amount)) |
1045 | 1061 | ||
1046 | if isinstance(company_info, tuple): | 1062 | if isinstance(company_info, tuple): |
... | @@ -1453,7 +1469,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto | ... | @@ -1453,7 +1469,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, data_source, auto |
1453 | return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh | 1469 | return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh |
1454 | 1470 | ||
1455 | 1471 | ||
1456 | def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): | 1472 | def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): |
1457 | cms_info = json.loads(last_obj.content) | 1473 | cms_info = json.loads(last_obj.content) |
1458 | 1474 | ||
1459 | compare_info = {} | 1475 | compare_info = {} |
... | @@ -1466,6 +1482,21 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour | ... | @@ -1466,6 +1482,21 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour |
1466 | dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1] | 1482 | dealer_name = '' if len(dealer_name_list) == 0 else dealer_name_list[-1] |
1467 | issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip() | 1483 | issuer_dealer = cms_info.get('fapiaoIssuerDealer', '').strip() |
1468 | 1484 | ||
1485 | #CHINARPA-4546 delaerName变为list,包含dealer_name_list[0]映射后对应的所有值 + dealer_name_list[-1],比对时,任一完全一致为Y,全部不一致为N | ||
1486 | dealer_name_list_ex = [] | ||
1487 | dealer_name_mapper_list = [] | ||
1488 | if len(dealer_name_list) != 0: | ||
1489 | dealer_name_list_ex.append(dealer_name_list[-1]) # CMS的最后一个值 | ||
1490 | dealer_name_mapper_obj = DealerMapping.objects.filter(cms_value=dealer_name_list[0]).first() | ||
1491 | if dealer_name_mapper_obj is not None: | ||
1492 | dealer_name_mapper_str = dealer_name_mapper_obj.mapping_value | ||
1493 | dealer_name_mapper_list = dealer_name_mapper_str.split(',') | ||
1494 | dealer_name_list_ex.extend(dealer_name_mapper_list) # 映射后的所有值 | ||
1495 | issuer_dealer_list = [] | ||
1496 | issuer_dealer_list.append(cms_info.get('fapiaoIssuerDealer', '').strip()) | ||
1497 | compare_log.info('[get_se_cms_compare_info_] [新车发票] [application_id {0}] [dealer_name_mapper_list {1}] [dealer_name_list_ex {2}] [issuer_dealer {3}]' | ||
1498 | .format(application_id, dealer_name_mapper_list,dealer_name_list_ex,issuer_dealer_list)) | ||
1499 | |||
1469 | # 个人信息证件------------------------------------------------------------------------------------------------------ | 1500 | # 个人信息证件------------------------------------------------------------------------------------------------------ |
1470 | is_cdfl_bo = False # 车贷分离,主借 | 1501 | is_cdfl_bo = False # 车贷分离,主借 |
1471 | is_cdfl_co = False # 车贷分离,共借 | 1502 | is_cdfl_co = False # 车贷分离,共借 |
... | @@ -1588,7 +1619,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour | ... | @@ -1588,7 +1619,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, data_sour |
1588 | # 新车发票---------------------------------------------------------------------------------------------------------- | 1619 | # 新车发票---------------------------------------------------------------------------------------------------------- |
1589 | if vehicle_status == 'New': | 1620 | if vehicle_status == 'New': |
1590 | vehicle_field_input.append(('vinNo', vin_no)) | 1621 | vehicle_field_input.append(('vinNo', vin_no)) |
1591 | vehicle_field_input.append(('dealer', dealer_name if len(issuer_dealer) == 0 else issuer_dealer)) | 1622 | vehicle_field_input.append(('dealer', dealer_name_list_ex if len(issuer_dealer_list[0]) == 0 else issuer_dealer_list)) |
1592 | vehicle_field_input.append(('vehicleTransactionAmount', amount)) | 1623 | vehicle_field_input.append(('vehicleTransactionAmount', amount)) |
1593 | 1624 | ||
1594 | if isinstance(company_info, tuple): | 1625 | if isinstance(company_info, tuple): |
... | @@ -3126,7 +3157,7 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc | ... | @@ -3126,7 +3157,7 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc |
3126 | # 比对逻辑 | 3157 | # 比对逻辑 |
3127 | # detect_list = se_result_detect(ocr_res_dict) | 3158 | # detect_list = se_result_detect(ocr_res_dict) |
3128 | compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto( | 3159 | compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto( |
3129 | last_obj, application_entity, data_source, ignore_bank=ignore_bank) | 3160 | application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank) |
3130 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ | 3161 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ |
3131 | cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( | 3162 | cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( |
3132 | compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type) | 3163 | 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 | ... | @@ -3193,7 +3224,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res |
3193 | start_time = datetime.now() | 3224 | start_time = datetime.now() |
3194 | detect_list = se_result_detect(ocr_res_dict) | 3225 | detect_list = se_result_detect(ocr_res_dict) |
3195 | compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info( | 3226 | compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info( |
3196 | last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) | 3227 | application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) |
3197 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ | 3228 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ |
3198 | cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( | 3229 | cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( |
3199 | compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type) | 3230 | compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type) | ... | ... |
... | @@ -8,7 +8,9 @@ from .rmb_lower import rmb_handler | ... | @@ -8,7 +8,9 @@ from .rmb_lower import rmb_handler |
8 | from pandas._libs import tslib | 8 | from pandas._libs import tslib |
9 | from pandas._libs.tslibs.nattype import NaTType | 9 | from pandas._libs.tslibs.nattype import NaTType |
10 | from pandas.core.indexes.datetimes import DatetimeIndex | 10 | from pandas.core.indexes.datetimes import DatetimeIndex |
11 | import logging | ||
11 | 12 | ||
13 | compare_log = logging.getLogger('compare') | ||
12 | 14 | ||
13 | class Comparison: | 15 | class Comparison: |
14 | 16 | ||
... | @@ -187,6 +189,19 @@ class Comparison: | ... | @@ -187,6 +189,19 @@ class Comparison: |
187 | else: | 189 | else: |
188 | return self.RESULT_N | 190 | return self.RESULT_N |
189 | 191 | ||
192 | def se_input_list_compare(self, input_list, ocr_str, **kwargs): | ||
193 | if isinstance(input_list, list) and len(input_list) > 0 and isinstance(ocr_str, str): | ||
194 | ocr_str = ocr_str.translate(self.KH_TRANS) | ||
195 | |||
196 | for input_str in input_list: | ||
197 | input_str = input_str.translate(self.KH_TRANS) | ||
198 | compare_log.info('[se_input_list_compare] [input_str {0}] [ocr_str {1}]'.format(input_str, ocr_str)) | ||
199 | if input_str == ocr_str: | ||
200 | return self.RESULT_Y | ||
201 | return self.RESULT_N | ||
202 | else: | ||
203 | return self.RESULT_N | ||
204 | |||
190 | def super_list_compare(self, input_list, ocr_str, **kwargs): | 205 | def super_list_compare(self, input_list, ocr_str, **kwargs): |
191 | for input_str in input_list: | 206 | for input_str in input_list: |
192 | if kwargs.get('method', 'common') == 'name': | 207 | if kwargs.get('method', 'common') == 'name': | ... | ... |
-
Please register or sign in to post a comment