d56c5dd6 by 周伟奇

Merge branch 'feature/slice6' into feature/1119

2 parents d2114106 400c41a9
...@@ -1176,6 +1176,7 @@ UCI_OCR_FIELD = 'uci_ocr' ...@@ -1176,6 +1176,7 @@ UCI_OCR_FIELD = 'uci_ocr'
1176 DDA_OCR_FIELD = 'bs_ocr' 1176 DDA_OCR_FIELD = 'bs_ocr'
1177 HMH_OCR_FIELD = 'hmh_ocr' 1177 HMH_OCR_FIELD = 'hmh_ocr'
1178 JYPZ_OCR_FIELD = 'jypz_ocr' 1178 JYPZ_OCR_FIELD = 'jypz_ocr'
1179 HT_FIELD = 'ht_ocr'
1179 1180
1180 RESULT_MAPPING = { 1181 RESULT_MAPPING = {
1181 MVI_CLASSIFY: MVI_OCR_FIELD, 1182 MVI_CLASSIFY: MVI_OCR_FIELD,
...@@ -1191,7 +1192,8 @@ RESULT_MAPPING = { ...@@ -1191,7 +1192,8 @@ RESULT_MAPPING = {
1191 DDA_CLASSIFY: DDA_OCR_FIELD, 1192 DDA_CLASSIFY: DDA_OCR_FIELD,
1192 # VAT_CLASSIFY: 'vat_ocr', 1193 # VAT_CLASSIFY: 'vat_ocr',
1193 HMH_CLASSIFY: HMH_OCR_FIELD, 1194 HMH_CLASSIFY: HMH_OCR_FIELD,
1194 JYPZ_CLASSIFY: JYPZ_OCR_FIELD 1195 JYPZ_CLASSIFY: JYPZ_OCR_FIELD,
1196 CONTRACT_CLASSIFY: HT_FIELD,
1195 } 1197 }
1196 1198
1197 COMPARE_FIELDS = (MVI_OCR_FIELD, 1199 COMPARE_FIELDS = (MVI_OCR_FIELD,
...@@ -1391,6 +1393,26 @@ SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', ' ...@@ -1391,6 +1393,26 @@ SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '
1391 SE_BANK_FIELD = ['accountNo', 'bankName'] 1393 SE_BANK_FIELD = ['accountNo', 'bankName']
1392 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] 1394 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo']
1393 1395
1396 SE_AFC_CON_MAP = {
1397 '合同编号-每页': (None, '合同编号', None),
1398 '所购车辆价格-小写-重要条款': (1, '所购车辆价格', None),
1399 '车架号-重要条款': (1, '车架号', None),
1400 '贷款本金金额-重要条款': (1, '贷款本金金额', '小写'),
1401 '贷款期限-重要条款': (1, '贷款期限', None),
1402 '车辆贷款本金金额-重要条款': (1, '车辆贷款本金金额', None),
1403 '附加产品融资贷款本金总额-重要条款': (1, '附加产品融资贷款本金总金额', None),
1404 '所购车辆价格': (2, '所购车辆价格', None),
1405 '车架号': (2, '车架号', None),
1406 '经销商': (2, '经销商', None),
1407 '贷款本金金额': (2, '贷款本金金额', '小写'),
1408 '车辆贷款本金金额': (2, '车辆贷款本金金额', None),
1409 '附加产品融资贷款本金总额': (2, '附加产品融资贷款本金总额', None),
1410 '贷款期限': (2, '贷款期限', None),
1411 '还款账号': (2, '还款账号', '账号'),
1412 '户名': (2, '还款账号', '户名'),
1413 '开户行': (2, '还款账号', '开户行'),
1414 }
1415
1394 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款', 1416 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
1395 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商', 1417 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
1396 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行', 1418 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
...@@ -1576,6 +1598,31 @@ HMH_COMPARE_LOGIC = { ...@@ -1576,6 +1598,31 @@ HMH_COMPARE_LOGIC = {
1576 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'), 1598 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'),
1577 } 1599 }
1578 1600
1601 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
1602 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
1603 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
1604 '还款计划表', '项目1', '用途总金额', '贷款本金', '附加产品融资贷款本金总金额', '购置税校验']
1605
1606 HT_COMPARE_LOGIC = {
1607 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
1608 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'),
1609 '车架号-重要条款': ('车架号-重要条款', 'se_common_compare', {}, '合同首页中车架号与系统不一致'),
1610 '贷款本金金额-重要条款': ('贷款本金金额-重要条款', 'se_amount_str_compare', {}, '合同首页中贷款本金与系统不一致'),
1611 '贷款期限-重要条款': ('贷款期限-重要条款', 'se_common_compare', {}, '合同首页中贷款期限与系统不一致'),
1612 '车辆贷款本金金额-重要条款': ('车辆贷款本金金额-重要条款', 'se_amount_str_compare', {}, '车辆贷款本金金额-重要条款'),
1613 '附加产品融资贷款本金总额-重要条款': ('附加产品融资贷款本金总额-重要条款', 'se_amount_str_compare', {}, '合同首页中附加产品融资金额与系统不一致'),
1614 '所购车辆价格': ('所购车辆价格', 'se_amount_str_compare', {}, '主合同页中车辆价格与系统不一致'),
1615 '车架号': ('车架号', 'se_common_compare', {}, '主合同页中车架号与系统不一致'),
1616 '经销商': ('经销商', 'se_common_compare', {}, '主合同页中经销商与系统不一致'),
1617 '贷款本金金额': ('贷款本金金额', 'se_amount_str_compare', {}, '主合同页中贷款本金金额与系统不一致'),
1618 '车辆贷款本金金额': ('车辆贷款本金金额', 'se_amount_str_compare', {}, '主合同页中车辆贷款本金金额与系统不一致'),
1619 '附加产品融资贷款本金总额': ('附加产品融资贷款本金总额', 'se_amount_str_compare', {}, '主合同页中附加产品融资贷款本金总额与系统不一致'),
1620 '贷款期限': ('贷款期限', 'se_common_compare', {}, '主合同页中贷款期限与系统不一致'),
1621 '还款账号': ('还款账号', 'se_common_compare', {}, '主合同页中还款账号与系统不一致'),
1622 '户名': ('户名', 'se_common_compare', {}, '主合同页中户名与系统不一致'),
1623 '开户行': ('开户行', 'se_both_contain_compare', {}, '主合同页中开户行与系统不一致'),
1624 }
1625
1579 # MVC_OCR_FIELD = 'mvc_ocr' 1626 # MVC_OCR_FIELD = 'mvc_ocr'
1580 1627
1581 SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN] 1628 SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN]
...@@ -1594,6 +1641,7 @@ SE_COMPARE_FIELD = { ...@@ -1594,6 +1641,7 @@ SE_COMPARE_FIELD = {
1594 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), 1641 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False),
1595 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), 1642 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
1596 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), 1643 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
1644 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False)
1597 } 1645 }
1598 1646
1599 1647
......
...@@ -220,7 +220,8 @@ class Command(BaseCommand, LoggerMixin): ...@@ -220,7 +220,8 @@ class Command(BaseCommand, LoggerMixin):
220 else: 220 else:
221 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) 221 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY))
222 222
223 def contract_process(self, classify, ocr_data, contract_result, res_list, pno, ino, part_idx, img_path): 223 def contract_process(self, classify, ocr_data, contract_result, res_list, pno, ino, part_idx,
224 img_path, contract_result_compare):
224 contract_dict = ocr_data.get('data') 225 contract_dict = ocr_data.get('data')
225 if not contract_dict or contract_dict.get('page_num') is None or contract_dict.get('page_info') is None: 226 if not contract_dict or contract_dict.get('page_num') is None or contract_dict.get('page_info') is None:
226 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) 227 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY))
...@@ -260,9 +261,30 @@ class Command(BaseCommand, LoggerMixin): ...@@ -260,9 +261,30 @@ class Command(BaseCommand, LoggerMixin):
260 for row_list in sub_value[text_key]: 261 for row_list in sub_value[text_key]:
261 rebuild_page_info.append(row_list) 262 rebuild_page_info.append(row_list)
262 263
263 # contract_result.setdefault(page_num_only, []).append(rebuild_page_info)
264 contract_result.setdefault(classify, dict()).setdefault(page_num_only, []).append(rebuild_page_info) 264 contract_result.setdefault(classify, dict()).setdefault(page_num_only, []).append(rebuild_page_info)
265 265
266 page_compare_dict = {}
267 for key, value in contract_dict.get('page_info', {}).items():
268 if not isinstance(value, dict):
269 continue
270 elif text_key in value:
271 if value[text_key] is None:
272 page_compare_dict[key] = ''
273 elif isinstance(value[text_key], str):
274 page_compare_dict[key] = value[text_key]
275 elif isinstance(value[text_key], list):
276 page_compare_dict[key] = value[text_key]
277 else:
278 page_compare_dict[key] = {}
279 for sub_key, sub_value in value.items():
280 if sub_value[text_key] is None:
281 page_compare_dict[key][sub_key] = ''
282 elif isinstance(sub_value[text_key], str):
283 page_compare_dict[key][sub_key] = sub_value[text_key]
284
285 contract_result_compare.setdefault(classify, dict())[page_num_only] = page_compare_dict
286
287
266 # def rebuild_result(self, ocr_data, classify, img_path): 288 # def rebuild_result(self, ocr_data, classify, img_path):
267 # license_data = ocr_data.get('data') 289 # license_data = ocr_data.get('data')
268 # if not license_data: 290 # if not license_data:
...@@ -831,6 +853,22 @@ class Command(BaseCommand, LoggerMixin): ...@@ -831,6 +853,22 @@ class Command(BaseCommand, LoggerMixin):
831 summary['role'] = self.get_most(summary['role']) 853 summary['role'] = self.get_most(summary['role'])
832 return bs_summary 854 return bs_summary
833 855
856 def rebuild_contract(self, contract_result_compare):
857 res_list = []
858 for classify, page_info_dict in contract_result_compare.items():
859 res = {}
860 if classify == consts.CONTRACT_CLASSIFY:
861 for key, (pno, key1, key2) in consts.SE_AFC_CON_MAP.items():
862 if pno is None:
863 for i in range(1, 9):
864 res.setdefault(key, list()).append(page_info_dict.get(str(i), {}).get(key1, ''))
865 elif key2 is None:
866 res[key] = page_info_dict.get(str(pno), {}).get(key1, '')
867 else:
868 res[key] = page_info_dict.get(str(pno), {}).get(key1, {}).get(key2, '')
869 res_list.append(res)
870 return res_list
871
834 def rebuild_bs_summary(self, bs_summary, unknown_summary): 872 def rebuild_bs_summary(self, bs_summary, unknown_summary):
835 # bs_summary = { 873 # bs_summary = {
836 # '卡号': { 874 # '卡号': {
...@@ -1248,7 +1286,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1248,7 +1286,7 @@ class Command(BaseCommand, LoggerMixin):
1248 self.online_log.error('{0} [process error (store ocr res)] [img_path={1}] [error={2}]'.format( 1286 self.online_log.error('{0} [process error (store ocr res)] [img_path={1}] [error={2}]'.format(
1249 self.log_base, img_path, traceback.format_exc())) 1287 self.log_base, img_path, traceback.format_exc()))
1250 1288
1251 def res_2_wb(self, res_dict, img_queue, finish_queue, lock, error_list): 1289 def res_2_wb(self, res_dict, img_queue, finish_queue, error_list):
1252 while len(error_list) == 0 or not img_queue.empty() or not finish_queue.empty(): 1290 while len(error_list) == 0 or not img_queue.empty() or not finish_queue.empty():
1253 try: 1291 try:
1254 task_str = finish_queue.get(block=False) 1292 task_str = finish_queue.get(block=False)
...@@ -1289,6 +1327,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1289,6 +1327,7 @@ class Command(BaseCommand, LoggerMixin):
1289 unknown_summary = {} 1327 unknown_summary = {}
1290 license_summary = {} 1328 license_summary = {}
1291 contract_result = {} 1329 contract_result = {}
1330 contract_result_compare = {}
1292 res_list = [] 1331 res_list = []
1293 interest_keyword = Keywords.objects.filter( 1332 interest_keyword = Keywords.objects.filter(
1294 type=KeywordsType.INTEREST.value, on_off=True).values_list('keyword', flat=True) 1333 type=KeywordsType.INTEREST.value, on_off=True).values_list('keyword', flat=True)
...@@ -1441,7 +1480,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1441,7 +1480,7 @@ class Command(BaseCommand, LoggerMixin):
1441 '{0} [ocr_2 failed] [img_path={1}]'.format(self.log_base, img_path)) 1480 '{0} [ocr_2 failed] [img_path={1}]'.format(self.log_base, img_path))
1442 elif classify in consts.CONTRACT_SET: 1481 elif classify in consts.CONTRACT_SET:
1443 self.contract_process(classify, ocr_data, contract_result, res_list, pno, 1482 self.contract_process(classify, ocr_data, contract_result, res_list, pno,
1444 ino, part_idx, img_path) 1483 ino, part_idx, img_path, contract_result_compare)
1445 else: # 流水处理 1484 else: # 流水处理
1446 bs_classify_set.add(classify) 1485 bs_classify_set.add(classify)
1447 self.bs_process(wb, ocr_data, bs_summary, unknown_summary, classify, res_list, pno, ino, part_idx) 1486 self.bs_process(wb, ocr_data, bs_summary, unknown_summary, classify, res_list, pno, ino, part_idx)
...@@ -1554,6 +1593,10 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1554,6 +1593,10 @@ class Command(BaseCommand, LoggerMixin):
1554 finally: 1593 finally:
1555 # TODO 识别结果存一张表,方便跑报表 1594 # TODO 识别结果存一张表,方便跑报表
1556 1595
1596 contract_result_compare_rebuild = self.rebuild_contract(contract_result_compare)
1597 if len(contract_result_compare_rebuild) > 0:
1598 license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild
1599
1557 # 比对 1600 # 比对
1558 if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]: 1601 if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]:
1559 try: 1602 try:
...@@ -1929,7 +1972,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1929,7 +1972,7 @@ class Command(BaseCommand, LoggerMixin):
1929 img_queue, todo_count_dict, res_dict, finish_queue, lock, url, error_list)) 1972 img_queue, todo_count_dict, res_dict, finish_queue, lock, url, error_list))
1930 process_list.append(ocr_1_process) 1973 process_list.append(ocr_1_process)
1931 1974
1932 wb_process = Process(target=self.res_2_wb, args=(res_dict, img_queue, finish_queue, lock, error_list)) 1975 wb_process = Process(target=self.res_2_wb, args=(res_dict, img_queue, finish_queue, error_list))
1933 process_list.append(wb_process) 1976 process_list.append(wb_process)
1934 1977
1935 for p in process_list: 1978 for p in process_list:
......
...@@ -313,6 +313,7 @@ class AFCOCRResult(models.Model): ...@@ -313,6 +313,7 @@ class AFCOCRResult(models.Model):
313 vat_ocr = models.TextField(null=True, verbose_name="增值税发票") 313 vat_ocr = models.TextField(null=True, verbose_name="增值税发票")
314 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 314 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
315 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 315 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
316 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
316 317
317 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 318 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
318 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 319 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -342,6 +343,7 @@ class HILOCRResult(models.Model): ...@@ -342,6 +343,7 @@ class HILOCRResult(models.Model):
342 vat_ocr = models.TextField(null=True, verbose_name="增值税发票") 343 vat_ocr = models.TextField(null=True, verbose_name="增值税发票")
343 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 344 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
344 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 345 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
346 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
345 347
346 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 348 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
347 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 349 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -370,6 +372,7 @@ class AFCSEOCRResult(models.Model): ...@@ -370,6 +372,7 @@ class AFCSEOCRResult(models.Model):
370 vat_ocr = models.TextField(null=True, verbose_name="增值税发票") 372 vat_ocr = models.TextField(null=True, verbose_name="增值税发票")
371 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 373 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
372 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 374 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
375 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
373 376
374 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 377 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
375 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 378 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -399,6 +402,7 @@ class HILSEOCRResult(models.Model): ...@@ -399,6 +402,7 @@ class HILSEOCRResult(models.Model):
399 vat_ocr = models.TextField(null=True, verbose_name="增值税发票") 402 vat_ocr = models.TextField(null=True, verbose_name="增值税发票")
400 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 403 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
401 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 404 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
405 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
402 406
403 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 407 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
404 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 408 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
...@@ -1088,77 +1088,80 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1088,77 +1088,80 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1088 other_info[consts.HMH_EN] = hmh_field_input 1088 other_info[consts.HMH_EN] = hmh_field_input
1089 compare_info['other'] = other_info 1089 compare_info['other'] = other_info
1090 1090
1091 # contract_info = {} 1091 if application_entity in consts.HIL_SET:
1092 # 1092 return compare_info, cms_info.get('applicationVersion', 1)
1093 # schedule_list = [] 1093
1094 # for schedule_dict in cms_info.get('paymentSchedule', []): 1094 contract_info = {}
1095 # tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('no', '')), 1095
1096 # str(schedule_dict.get('grossRentalAmount', ''))) 1096 schedule_list = []
1097 # schedule_list.append(tmp_str) 1097 for schedule_dict in cms_info.get('paymentSchedule', []):
1098 # schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list) 1098 tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('no', '')),
1099 # 1099 str(schedule_dict.get('grossRentalAmount', '')))
1100 # afc_contract_input = [ 1100 schedule_list.append(tmp_str)
1101 # (consts.SE_AFC_CON_FIELD[0], full_no), 1101 schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list)
1102 # (consts.SE_AFC_CON_FIELD[1], amount), 1102
1103 # (consts.SE_AFC_CON_FIELD[2], vin_no), 1103 afc_contract_input = [
1104 # (consts.SE_AFC_CON_FIELD[3], str(cms_info.get('financialInformation', {}).get('originationPrincipal', '0.0'))), 1104 (consts.SE_AFC_CON_FIELD[0], full_no),
1105 # (consts.SE_AFC_CON_FIELD[4], str(cms_info.get('terms', '0'))), 1105 (consts.SE_AFC_CON_FIELD[1], amount),
1106 # (consts.SE_AFC_CON_FIELD[5], str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0'))), 1106 (consts.SE_AFC_CON_FIELD[2], vin_no),
1107 # (consts.SE_AFC_CON_FIELD[6], str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.0'))), 1107 (consts.SE_AFC_CON_FIELD[3], str(cms_info.get('financialInformation', {}).get('originationPrincipal', '0.0'))),
1108 # (consts.SE_AFC_CON_FIELD[7], amount), 1108 (consts.SE_AFC_CON_FIELD[4], str(cms_info.get('terms', '0'))),
1109 # (consts.SE_AFC_CON_FIELD[8], vin_no), 1109 (consts.SE_AFC_CON_FIELD[5], str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0'))),
1110 # (consts.SE_AFC_CON_FIELD[9], cms_info.get('dealerName', '')), 1110 (consts.SE_AFC_CON_FIELD[6], str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.0'))),
1111 # (consts.SE_AFC_CON_FIELD[10], str(cms_info.get('financialInformation', {}).get('originationPrincipal', '0.0'))), 1111 (consts.SE_AFC_CON_FIELD[7], amount),
1112 # (consts.SE_AFC_CON_FIELD[11], str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0'))), 1112 (consts.SE_AFC_CON_FIELD[8], vin_no),
1113 # (consts.SE_AFC_CON_FIELD[12], str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.0'))), 1113 (consts.SE_AFC_CON_FIELD[9], cms_info.get('dealerName', '')),
1114 # (consts.SE_AFC_CON_FIELD[13], str(cms_info.get('terms', '0'))), 1114 (consts.SE_AFC_CON_FIELD[10], str(cms_info.get('financialInformation', {}).get('originationPrincipal', '0.0'))),
1115 # (consts.SE_AFC_CON_FIELD[14], account_no), 1115 (consts.SE_AFC_CON_FIELD[11], str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0'))),
1116 # (consts.SE_AFC_CON_FIELD[15], cms_info.get('bankAccountDetails', {}).get('accountHolderName', '')), 1116 (consts.SE_AFC_CON_FIELD[12], str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.0'))),
1117 # (consts.SE_AFC_CON_FIELD[16], bank_name), 1117 (consts.SE_AFC_CON_FIELD[13], str(cms_info.get('terms', '0'))),
1118 # (consts.SE_AFC_CON_FIELD[17], schedule_list_str), 1118 (consts.SE_AFC_CON_FIELD[14], account_no),
1119 # ] 1119 (consts.SE_AFC_CON_FIELD[15], cms_info.get('bankAccountDetails', {}).get('accountHolderName', '')),
1120 # 1120 (consts.SE_AFC_CON_FIELD[16], bank_name),
1121 # asp_list = [] 1121 (consts.SE_AFC_CON_FIELD[17], schedule_list_str),
1122 # for asp_info in cms_info.get('associatedServices', []): 1122 ]
1123 # asp_list.append( 1123
1124 # ( 1124 asp_list = []
1125 # asp_info.get('associatedServices', ''), 1125 for asp_info in cms_info.get('associatedServices', []):
1126 # asp_info.get('price', 0.0), 1126 asp_list.append(
1127 # asp_info.get('financed', 0.0) 1127 (
1128 # ) 1128 asp_info.get('associatedServices', ''),
1129 # ) 1129 asp_info.get('price', 0.0),
1130 # 1130 asp_info.get('financed', 0.0)
1131 # if len(asp_list) > 0: 1131 )
1132 # fin_total = 0 1132 )
1133 # gzs_status = consts.GZS_STATUS[1] 1133
1134 # for asp_name, asp_price, asp_fin in asp_list: 1134 if len(asp_list) > 0:
1135 # if gzs_status == consts.GZS_STATUS[1]: 1135 fin_total = 0
1136 # if consts.GZS_NAME in asp_name: 1136 gzs_status = consts.GZS_STATUS[1]
1137 # gzs_status = consts.GZS_STATUS[0] 1137 for asp_name, asp_price, asp_fin in asp_list:
1138 # if gzs_status == consts.GZS_STATUS[0]: 1138 if gzs_status == consts.GZS_STATUS[1]:
1139 # if consts.GZS_NAME not in asp_name: 1139 if consts.GZS_NAME in asp_name:
1140 # gzs_status = consts.GZS_STATUS[2] 1140 gzs_status = consts.GZS_STATUS[0]
1141 # afc_contract_input.extend( 1141 if gzs_status == consts.GZS_STATUS[0]:
1142 # [ 1142 if consts.GZS_NAME not in asp_name:
1143 # (consts.SE_AFC_CON_FIELD[18], asp_name), 1143 gzs_status = consts.GZS_STATUS[2]
1144 # (consts.SE_AFC_CON_FIELD[19], str(asp_price)), 1144 afc_contract_input.extend(
1145 # (consts.SE_AFC_CON_FIELD[20], str(asp_fin)), 1145 [
1146 # ] 1146 (consts.SE_AFC_CON_FIELD[18], asp_name),
1147 # ) 1147 (consts.SE_AFC_CON_FIELD[19], str(asp_price)),
1148 # fin_total += asp_fin 1148 (consts.SE_AFC_CON_FIELD[20], str(asp_fin)),
1149 # afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], str(fin_total))) 1149 ]
1150 # 1150 )
1151 # # CMS Vehicle Price / 1.13 * 10 % 1151 fin_total += asp_fin
1152 # gzs_list = [gzs_status] 1152 afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], str(fin_total)))
1153 # if gzs_status != consts.GZS_STATUS[1]: 1153
1154 # gzs_value = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', 0.0) * 0.1 / 1.13) 1154 # CMS Vehicle Price / 1.13 * 10 %
1155 # gzs_list.append(gzs_value) 1155 gzs_list = [gzs_status]
1156 # afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], consts.SPLIT_STR.join(gzs_list))) 1156 if gzs_status != consts.GZS_STATUS[1]:
1157 # 1157 gzs_value = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', 0.0) * 0.1 / 1.13)
1158 # # role_name, _, role_id = main_role_info[applicant_type][0] 1158 gzs_list.append(gzs_value)
1159 # 1159 afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], consts.SPLIT_STR.join(gzs_list)))
1160 # contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input 1160
1161 # compare_info['contract'] = contract_info 1161 # role_name, _, role_id = main_role_info[applicant_type][0]
1162
1163 contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
1164 compare_info['contract'] = contract_info
1162 return compare_info, cms_info.get('applicationVersion', 1) 1165 return compare_info, cms_info.get('applicationVersion', 1)
1163 1166
1164 1167
...@@ -1669,6 +1672,41 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1669,6 +1672,41 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1669 return result_field_list, no_ocr_result, field_img_path_dict 1672 return result_field_list, no_ocr_result, field_img_path_dict
1670 1673
1671 1674
1675 def se_afc_contract_compare(license_en, ocr_res_dict, strip_list):
1676 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1677 ocr_res_str = ocr_res_dict.get(ocr_field)
1678
1679 result_field_list = []
1680 field_img_path_dict = dict()
1681
1682 if ocr_res_str is not None:
1683 ocr_res_list = json.loads(ocr_res_str)
1684 ocr_res = ocr_res_list.pop()
1685
1686 for name, value in strip_list:
1687 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1688
1689 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1690 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
1691 if isinstance(ocr_str_or_list, list):
1692 ocr_str = '、'.join(ocr_str_or_list)
1693 else:
1694 ocr_str = ocr_str_or_list
1695 else:
1696 result = consts.RESULT_N
1697 ocr_str = empty_str
1698
1699 img_path = empty_str
1700 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1701 result_field_list.append((name, value, result, ocr_str, img_path, error_type, compare_logic[name][3]))
1702 else:
1703 for name, value in strip_list:
1704 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value,
1705 '{0}未找到'.format(license_en)))
1706
1707 return result_field_list, field_img_path_dict
1708
1709
1672 def se_mvc34_compare(license_en, ocr_res_dict, field_list): 1710 def se_mvc34_compare(license_en, ocr_res_dict, field_list):
1673 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en] 1711 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1674 ocr_res_str = ocr_res_dict.get(ocr_field) 1712 ocr_res_str = ocr_res_dict.get(ocr_field)
...@@ -1847,6 +1885,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1847,6 +1885,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1847 failure_field = [] 1885 failure_field = []
1848 if license_en == consts.MVC34_EN: 1886 if license_en == consts.MVC34_EN:
1849 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list) 1887 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
1888 elif license_en == consts.AFC_CONTRACT_EN:
1889 result_field_list, field_img_path_dict = se_afc_contract_compare(license_en, ocr_res_dict, strip_list)
1850 else: 1890 else:
1851 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list) 1891 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list)
1852 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list: 1892 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list:
......
...@@ -158,6 +158,15 @@ class Comparison: ...@@ -158,6 +158,15 @@ class Comparison:
158 158
159 return self.build_res(input_str == compare_str), compare_str 159 return self.build_res(input_str == compare_str), compare_str
160 160
161 def se_list_compare(self, input_str, ocr_str_or_list, **kwargs):
162 if isinstance(ocr_str_or_list, list):
163 for item in ocr_str_or_list:
164 if item != input_str:
165 return self.RESULT_N
166 return self.RESULT_Y
167 else:
168 return self.RESULT_N
169
161 def se_name_compare(self, input_str, ocr_str, **kwargs): 170 def se_name_compare(self, input_str, ocr_str, **kwargs):
162 if kwargs.get('is_passport'): 171 if kwargs.get('is_passport'):
163 input_tmp = input_str.upper().replace(' ', '') 172 input_tmp = input_str.upper().replace(' ', '')
...@@ -285,6 +294,14 @@ class Comparison: ...@@ -285,6 +294,14 @@ class Comparison:
285 else: 294 else:
286 return self.RESULT_Y 295 return self.RESULT_Y
287 296
297 def se_amount_str_compare(self, input_str, ocr_str, **kwargs):
298 if input_str == ocr_str:
299 return self.RESULT_Y
300 else:
301 ocr_tmp = ocr_str.replace('元', '').replace(',', '')
302 input_tmp = input_str.replace('元', '').replace(',', '')
303 return self.build_res(ocr_tmp == input_tmp)
304
288 def se_amount_compare(self, input_str, ocr_str, **kwargs): 305 def se_amount_compare(self, input_str, ocr_str, **kwargs):
289 if input_str == ocr_str: 306 if input_str == ocr_str:
290 return self.RESULT_Y 307 return self.RESULT_Y
......
1 # import pyodbc 1 import pyodbc
2 2
3 # afc_sql = """ 3 hil_sql = """
4 # create table afc_contract 4 ALTER TABLE hil_ocr_result ADD ht_ocr nvarchar(max);
5 # ( 5 ALTER TABLE hil_se_ocr_result ADD ht_ocr nvarchar(max);
6 # id bigint identity primary key, 6 """
7 # application_id nvarchar(64) not null, 7
8 # create_time datetime not null 8 afc_sql = """
9 # ); 9 ALTER TABLE afc_ocr_result ADD ht_ocr nvarchar(max);
10 10 ALTER TABLE afc_se_ocr_result ADD ht_ocr nvarchar(max);
11 # create index afc_contract_application_id_index 11 """
12 # on afc_contract (application_id); 12
13 # """ 13 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
14 14
15 # hil_sql = """ 15 hil_cursor = hil_cnxn.cursor()
16 # create table hil_contract 16 hil_cursor.execute(hil_sql)
17 # ( 17
18 # id bigint identity primary key, 18 hil_cursor.close()
19 # application_id nvarchar(64) not null, 19 hil_cnxn.close()
20 # create_time datetime not null 20
21 # ); 21 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
22 22
23 # create index hil_contract_application_id_index 23 afc_cursor = afc_cnxn.cursor()
24 # on hil_contract (application_id); 24 afc_cursor.execute(afc_sql)
25 # """ 25
26 26 afc_cursor.close()
27 # hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True) 27 afc_cnxn.close()
28
29 # hil_cursor = hil_cnxn.cursor()
30 # hil_cursor.execute(hil_sql)
31
32 # hil_cursor.close()
33 # hil_cnxn.close()
34
35 # afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
36
37 # afc_cursor = afc_cnxn.cursor()
38 # afc_cursor.execute(afc_sql)
39
40 # afc_cursor.close()
41 # afc_cnxn.close()
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!