a883d3ea by chenyao

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

2 parents 2f1da6a1 3a4fd0b0
...@@ -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':
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!