50de32a9 by 周伟奇

fix bs compare

1 parent b2cb841e
...@@ -1410,7 +1410,7 @@ SE_STAMP_VALUE = '有' ...@@ -1410,7 +1410,7 @@ SE_STAMP_VALUE = '有'
1410 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' 1410 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印'
1411 SE_GB_NEW_FIELD = ['vinNo'] 1411 SE_GB_NEW_FIELD = ['vinNo']
1412 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] 1412 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
1413 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人)户名', '(担保人)打印日期', '(担保人)流水日期'] 1413 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人1)户名', '(担保人1)打印日期', '(担保人1)流水日期', '(担保人2)户名', '(担保人2)打印日期', '(担保人2)流水日期']
1414 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] 1414 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字']
1415 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计'] 1415 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计']
1416 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0'] 1416 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0']
...@@ -1781,11 +1781,14 @@ BD_COMPARE_LOGIC = { ...@@ -1781,11 +1781,14 @@ BD_COMPARE_LOGIC = {
1781 1781
1782 BS_COMPARE_LOGIC = { 1782 BS_COMPARE_LOGIC = {
1783 '户名': ('role', 'se_one_compare', {}, '主共借人未提供银行流水'), 1783 '户名': ('role', 'se_one_compare', {}, '主共借人未提供银行流水'),
1784 '(担保人)户名': ('role', 'se_one_compare', {}, '担保人未提供银行流水'), 1784 '(担保人1)户名': ('role', 'se_name_compare', {}, '担保人1未提供银行流水'),
1785 '(担保人2)户名': ('role', 'se_name_compare', {}, '担保人2未提供银行流水'),
1785 '打印日期': ('print_time', 'se_bs_print_date_compare', {}, '主共借人银行流水打印日期超过15天'), 1786 '打印日期': ('print_time', 'se_bs_print_date_compare', {}, '主共借人银行流水打印日期超过15天'),
1786 '(担保人)打印日期': ('print_time', 'se_bs_print_date_compare', {}, '担保人银行流水打印日期超过15天'), 1787 '(担保人1)打印日期': ('print_time', 'se_bs_print_date_compare', {}, '担保人1银行流水打印日期超过15天'),
1788 '(担保人2)打印日期': ('print_time', 'se_bs_print_date_compare', {}, '担保人2银行流水打印日期超过15天'),
1787 '流水日期': ('date', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'), 1789 '流水日期': ('date', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'),
1788 '(担保人)流水日期': ('date', 'se_bs_date_compare', {}, '担保人银行流水日期不满足3个月'), 1790 '(担保人1)流水日期': ('date', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足3个月'),
1791 '(担保人2)流水日期': ('date', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足3个月'),
1789 } 1792 }
1790 1793
1791 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' 1794 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系'
......
...@@ -312,21 +312,21 @@ class BSWorkbook(Workbook): ...@@ -312,21 +312,21 @@ class BSWorkbook(Workbook):
312 (ws.title, idx_list[i] + min_row, idx_list[i + 1] + min_row - 1, day_mean)) 312 (ws.title, idx_list[i] + min_row, idx_list[i + 1] + min_row - 1, day_mean))
313 313
314 def build_metadata_rows(self, confidence, code, verify_list, print_time, start_date, end_date, res_count_tuple, is_verify_classify): 314 def build_metadata_rows(self, confidence, code, verify_list, print_time, start_date, end_date, res_count_tuple, is_verify_classify):
315 metadata_rows = [ 315 metadata_rows = [('流水识别置信度', confidence)]
316 ('流水识别置信度', confidence),
317 ('图片总数', res_count_tuple[0]),
318 ('识别成功', res_count_tuple[1]),
319 self.blank_row,
320 ]
321
322 verify_highlight_row = []
323 if is_verify_classify: 316 if is_verify_classify:
324 verify_res = '疑似伪造' if len(verify_list) > 0 else '正常' 317 verify_res = '疑似伪造' if len(verify_list) > 0 else '正常'
325 metadata_rows.append(('流水检测结果', verify_res)) 318 else:
326 if len(verify_list) > 0: 319 verify_res = ''
327 metadata_rows.append(self.verify_header) 320 metadata_rows.append(('流水检测结果', verify_res))
328 metadata_rows.extend(verify_list) 321 metadata_rows.append(('图片总数', res_count_tuple[0]))
329 for r in range(5, len(metadata_rows)+1): 322 metadata_rows.append(('识别成功', res_count_tuple[1]))
323 metadata_rows.append(self.blank_row)
324
325 verify_highlight_row = []
326 if is_verify_classify and len(verify_list) > 0:
327 metadata_rows.append(self.verify_header)
328 metadata_rows.extend(verify_list)
329 for r in range(6, len(metadata_rows)+1):
330 verify_highlight_row.append(r) 330 verify_highlight_row.append(r)
331 331
332 metadata_rows.append(self.blank_row) 332 metadata_rows.append(self.blank_row)
...@@ -355,14 +355,18 @@ class BSWorkbook(Workbook): ...@@ -355,14 +355,18 @@ class BSWorkbook(Workbook):
355 ms = self.create_sheet('{0}{1}({2})'.format(self.meta_sheet_title, role_name, card)) 355 ms = self.create_sheet('{0}{1}({2})'.format(self.meta_sheet_title, role_name, card))
356 for row in metadata_rows: 356 for row in metadata_rows:
357 ms.append(row) 357 ms.append(row)
358
359 if len(verify_highlight_row) > 0:
360 for cell in ms[2]:
361 cell.fill = self.amount_fill
358 for row in verify_highlight_row: 362 for row in verify_highlight_row:
359 for cell in ms[row]: 363 for cell in ms[row]:
360 cell.fill = self.amount_fill 364 cell.fill = self.amount_fill
361 if res_count_tuple[0] != res_count_tuple[1]: 365 if res_count_tuple[0] != res_count_tuple[1]:
362 for cell in ms[2]:
363 cell.fill = self.amount_fill
364 for cell in ms[3]: 366 for cell in ms[3]:
365 cell.fill = self.amount_fill 367 cell.fill = self.amount_fill
368 for cell in ms[4]:
369 cell.fill = self.amount_fill
366 return ms 370 return ms
367 371
368 @staticmethod 372 @staticmethod
......
...@@ -880,7 +880,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -880,7 +880,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
880 company_info_list = [] 880 company_info_list = []
881 881
882 # 个人信息证件--------------------------------------------------------------------------------------------------------- 882 # 个人信息证件---------------------------------------------------------------------------------------------------------
883 province = cms_info.get('province', '') 883 # province = cms_info.get('province', '')
884 for individual_info in cms_info.get('applicantInformation', []): 884 for individual_info in cms_info.get('applicantInformation', []):
885 all_id_num = [] 885 all_id_num = []
886 886
...@@ -1082,12 +1082,19 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1082,12 +1082,19 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1082 dbr_bs_role_list = [] 1082 dbr_bs_role_list = []
1083 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): 1083 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1084 dbr_bs_role_list.append(dbr_bs_role) 1084 dbr_bs_role_list.append(dbr_bs_role)
1085 if len(dbr_bs_role_list) > 0: 1085
1086 if len(dbr_bs_role_list) >= 1:
1086 bs_field_input.extend([ 1087 bs_field_input.extend([
1087 (consts.SE_BS_FIELD[3], dbr_bs_role_list), 1088 (consts.SE_BS_FIELD[3], dbr_bs_role_list[0]),
1088 (consts.SE_BS_FIELD[4], first_submission_date), 1089 (consts.SE_BS_FIELD[4], first_submission_date),
1089 (consts.SE_BS_FIELD[5], '90天'), 1090 (consts.SE_BS_FIELD[5], '90天'),
1090 ]) 1091 ])
1092 if len(dbr_bs_role_list) >= 2:
1093 bs_field_input.extend([
1094 (consts.SE_BS_FIELD[6], dbr_bs_role_list[1]),
1095 (consts.SE_BS_FIELD[7], first_submission_date),
1096 (consts.SE_BS_FIELD[8], '90天'),
1097 ])
1091 bs_info[consts.BS_EN] = bs_field_input 1098 bs_info[consts.BS_EN] = bs_field_input
1092 compare_info['Bank Statement'] = bs_info 1099 compare_info['Bank Statement'] = bs_info
1093 1100
...@@ -1522,7 +1529,8 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list): ...@@ -1522,7 +1529,8 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list):
1522 1529
1523 if ocr_res_str is not None: 1530 if ocr_res_str is not None:
1524 pre_field_list = strip_list[:3] 1531 pre_field_list = strip_list[:3]
1525 suf_field_list = strip_list[3:] 1532 dbr1_field_list = strip_list[3:6]
1533 dbr2_field_list = strip_list[6:]
1526 1534
1527 ocr_res_list = json.loads(ocr_res_str) 1535 ocr_res_list = json.loads(ocr_res_str)
1528 # length = len(ocr_res_list) 1536 # length = len(ocr_res_list)
...@@ -1558,14 +1566,14 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list): ...@@ -1558,14 +1566,14 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list):
1558 max_correct_count = correct_count 1566 max_correct_count = correct_count
1559 pre_best_res = pre_tmp_res_part 1567 pre_best_res = pre_tmp_res_part
1560 1568
1561 # 担保人 1569 # 担保人1
1562 suf_best_res = {} 1570 dbr1_best_res = {}
1563 if len(suf_field_list) > 0: 1571 if len(dbr1_field_list) > 0:
1564 max_correct_count = 0 1572 max_correct_count = 0
1565 for ocr_res in ocr_res_list: 1573 for ocr_res in ocr_res_list:
1566 correct_count = 0 1574 correct_count = 0
1567 suf_tmp_res_part = {} 1575 dbr1_tmp_res_part = {}
1568 for idx, (name, value) in enumerate(suf_field_list): 1576 for idx, (name, value) in enumerate(dbr1_field_list):
1569 ocr_str_or_list = ocr_res.get(compare_logic[name][0]) 1577 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1570 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list): 1578 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1571 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2]) 1579 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
...@@ -1584,11 +1592,62 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list): ...@@ -1584,11 +1592,62 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list):
1584 1592
1585 if result == consts.RESULT_Y: 1593 if result == consts.RESULT_Y:
1586 correct_count += 1 1594 correct_count += 1
1587 suf_tmp_res_part[name] = (result, ocr_str, reason) 1595 dbr1_tmp_res_part[name] = (result, ocr_str, reason)
1588 1596
1589 if correct_count > 0 and correct_count >= max_correct_count: 1597 if correct_count > 0 and correct_count >= max_correct_count:
1590 max_correct_count = correct_count 1598 max_correct_count = correct_count
1591 suf_best_res = suf_tmp_res_part 1599 dbr1_best_res = dbr1_tmp_res_part
1600
1601 # 担保人2
1602 dbr2_best_res = {}
1603 if len(dbr1_field_list) > 0:
1604 max_correct_count = 0
1605 for ocr_res in ocr_res_list:
1606 correct_count = 0
1607 dbr2_tmp_res_part = {}
1608 for idx, (name, value) in enumerate(dbr2_field_list):
1609 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1610 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1611 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
1612 if isinstance(ocr_str_or_list, list):
1613 ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
1614 else:
1615 ocr_str = ocr_str_or_list
1616 reason = compare_logic[name][3]
1617 else:
1618 result = consts.RESULT_N
1619 ocr_str = empty_str
1620 reason = compare_logic[name][3]
1621
1622 if idx == 0 and result == consts.RESULT_N:
1623 break
1624
1625 if result == consts.RESULT_Y:
1626 correct_count += 1
1627 dbr2_tmp_res_part[name] = (result, ocr_str, reason)
1628
1629 if correct_count > 0 and correct_count >= max_correct_count:
1630 max_correct_count = correct_count
1631 dbr2_best_res = dbr2_tmp_res_part
1632
1633 dbr_ok = False
1634 # 有担保人
1635 if len(dbr1_field_list) > 0:
1636 # 有担保人12
1637 if len(dbr2_field_list) > 0:
1638 if len(dbr1_best_res) > 0 and len(dbr2_best_res) > 0:
1639 dbr_ok = True
1640 # 有担保人1
1641 else:
1642 if len(dbr1_best_res) > 0:
1643 dbr_ok = True
1644 # 无担保人
1645 # else:
1646 # pass
1647
1648 best_res_empty = False
1649 if len(pre_best_res) == 0 and len(dbr1_best_res) == 0 and len(dbr2_best_res) == 0:
1650 best_res_empty = True
1592 1651
1593 for name, value in pre_field_list: 1652 for name, value in pre_field_list:
1594 if len(pre_best_res) > 0: 1653 if len(pre_best_res) > 0:
...@@ -1596,7 +1655,9 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list): ...@@ -1596,7 +1655,9 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list):
1596 else: 1655 else:
1597 result = consts.RESULT_N 1656 result = consts.RESULT_N
1598 ocr_str = empty_str 1657 ocr_str = empty_str
1599 if len(suf_field_list) > 0 and len(suf_best_res) > 0: 1658 if best_res_empty:
1659 reason = consts.SPECIAL_REASON_3
1660 elif dbr_ok: # 有担保人且担保人都提供了流水
1600 reason = consts.SPECIAL_REASON 1661 reason = consts.SPECIAL_REASON
1601 else: 1662 else:
1602 reason = compare_logic[pre_field_list[0][0]][3] 1663 reason = compare_logic[pre_field_list[0][0]][3]
...@@ -1606,17 +1667,38 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list): ...@@ -1606,17 +1667,38 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list):
1606 value = json.dumps(value, ensure_ascii=False) 1667 value = json.dumps(value, ensure_ascii=False)
1607 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason)) 1668 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
1608 1669
1609 if len(suf_field_list) > 0: 1670 if len(dbr1_field_list) > 0:
1610 for name, value in suf_field_list: 1671 for name, value in dbr1_field_list:
1611 if len(suf_best_res) > 0: 1672 if len(dbr1_best_res) > 0:
1612 result, ocr_str, reason = suf_best_res[name] 1673 result, ocr_str, reason = dbr1_best_res[name]
1674 else:
1675 result = consts.RESULT_N
1676 ocr_str = empty_str
1677 if best_res_empty:
1678 reason = consts.SPECIAL_REASON_3
1679 elif len(pre_best_res) > 0:
1680 reason = consts.SPECIAL_REASON_2
1681 else:
1682 reason = compare_logic[dbr1_field_list[0][0]][3]
1683 img_path = empty_str
1684 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1685 if isinstance(value, list):
1686 value = json.dumps(value, ensure_ascii=False)
1687 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
1688
1689 if len(dbr2_field_list) > 0:
1690 for name, value in dbr2_field_list:
1691 if len(dbr2_best_res) > 0:
1692 result, ocr_str, reason = dbr2_best_res[name]
1613 else: 1693 else:
1614 result = consts.RESULT_N 1694 result = consts.RESULT_N
1615 ocr_str = empty_str 1695 ocr_str = empty_str
1616 if len(pre_best_res) > 0: 1696 if best_res_empty:
1697 reason = consts.SPECIAL_REASON_3
1698 elif len(pre_best_res) > 0:
1617 reason = consts.SPECIAL_REASON_2 1699 reason = consts.SPECIAL_REASON_2
1618 else: 1700 else:
1619 reason = compare_logic[suf_field_list[0][0]][3] 1701 reason = compare_logic[dbr2_field_list[0][0]][3]
1620 img_path = empty_str 1702 img_path = empty_str
1621 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value 1703 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1622 if isinstance(value, list): 1704 if isinstance(value, list):
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!