Merge branch 'feature/contract' into feature/0611
Showing
3 changed files
with
65 additions
and
6 deletions
| ... | @@ -1002,6 +1002,10 @@ JYPZ_FIELD_ORDER = (("type", "标题"), | ... | @@ -1002,6 +1002,10 @@ JYPZ_FIELD_ORDER = (("type", "标题"), | 
| 1002 | ("stamp_signature_seller", "出卖方签字/盖章"), | 1002 | ("stamp_signature_seller", "出卖方签字/盖章"), | 
| 1003 | ("stamp_signature_agent", "经销商签字/盖章"),) | 1003 | ("stamp_signature_agent", "经销商签字/盖章"),) | 
| 1004 | 1004 | ||
| 1005 | # 合同 | ||
| 1006 | CONTRACT_CN_NAME = '合同' | ||
| 1007 | CONTRACT_CLASSIFY = 41 | ||
| 1008 | |||
| 1005 | SUCCESS_CODE_SET = {'0', 0} | 1009 | SUCCESS_CODE_SET = {'0', 0} | 
| 1006 | 1010 | ||
| 1007 | FIELD_ORDER_MAP = { | 1011 | FIELD_ORDER_MAP = { | 
| ... | @@ -1628,4 +1632,4 @@ CA_COMPARE_FIELD = { | ... | @@ -1628,4 +1632,4 @@ CA_COMPARE_FIELD = { | 
| 1628 | DL_EN: (DL_OCR_FIELD, CA_DL_COMPARE_LOGIC, False), | 1632 | DL_EN: (DL_OCR_FIELD, CA_DL_COMPARE_LOGIC, False), | 
| 1629 | } | 1633 | } | 
| 1630 | 1634 | ||
| 1631 | 1635 | CONTRACT_SHEET_NAME = '合同' | ... | ... | 
| ... | @@ -207,6 +207,45 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -207,6 +207,45 @@ class Command(BaseCommand, LoggerMixin): | 
| 207 | else: | 207 | else: | 
| 208 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) | 208 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) | 
| 209 | 209 | ||
| 210 | def contract_process(self, ocr_data, contract_result, res_list, pno, ino, part_idx, img_path): | ||
| 211 | contract_dict = ocr_data.get('data') | ||
| 212 | if not contract_dict or 'page_num' not in contract_dict or 'page_info' not in contract_dict: | ||
| 213 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) | ||
| 214 | return | ||
| 215 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) | ||
| 216 | page_num = contract_dict.get('page_num') | ||
| 217 | rebuild_page_info = [] | ||
| 218 | text_key = 'words' | ||
| 219 | for key, value in contract_dict.get('page_info', {}).items(): | ||
| 220 | if value is None: | ||
| 221 | rebuild_page_info.append((key, )) | ||
| 222 | elif text_key in value: | ||
| 223 | if value[text_key] is None: | ||
| 224 | rebuild_page_info.append((key,)) | ||
| 225 | elif isinstance(value[text_key], str): | ||
| 226 | rebuild_page_info.append((key, value[text_key])) | ||
| 227 | elif isinstance(value[text_key], list): | ||
| 228 | rebuild_page_info.append((key,)) | ||
| 229 | for row_list in value[text_key]: | ||
| 230 | rebuild_page_info.append(row_list) | ||
| 231 | else: | ||
| 232 | rebuild_page_info.append((key,)) | ||
| 233 | for sub_key, sub_value in value.items(): | ||
| 234 | if sub_value is None: | ||
| 235 | rebuild_page_info.append((sub_key,)) | ||
| 236 | elif text_key in sub_value: | ||
| 237 | if sub_value[text_key] is None: | ||
| 238 | rebuild_page_info.append((sub_key,)) | ||
| 239 | elif isinstance(sub_value[text_key], str): | ||
| 240 | rebuild_page_info.append((sub_key, sub_value[text_key])) | ||
| 241 | elif isinstance(sub_value[text_key], list): | ||
| 242 | rebuild_page_info.append((sub_key,)) | ||
| 243 | for row_list in sub_value[text_key]: | ||
| 244 | rebuild_page_info.append(row_list) | ||
| 245 | |||
| 246 | contract_result.setdefault(page_num, []).append(rebuild_page_info) | ||
| 247 | |||
| 248 | |||
| 210 | def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path, do_dda, dda_id_bc_mapping): | 249 | def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path, do_dda, dda_id_bc_mapping): | 
| 211 | # 类别:'0'身份证, '1'居住证 | 250 | # 类别:'0'身份证, '1'居住证 | 
| 212 | license_data = ocr_data.get('data') | 251 | license_data = ocr_data.get('data') | 
| ... | @@ -820,6 +859,7 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -820,6 +859,7 @@ class Command(BaseCommand, LoggerMixin): | 
| 820 | bs_summary = {} | 859 | bs_summary = {} | 
| 821 | unknown_summary = {} | 860 | unknown_summary = {} | 
| 822 | license_summary = {} | 861 | license_summary = {} | 
| 862 | contract_result = {} | ||
| 823 | res_list = [] | 863 | res_list = [] | 
| 824 | interest_keyword = Keywords.objects.filter( | 864 | interest_keyword = Keywords.objects.filter( | 
| 825 | type=KeywordsType.INTEREST.value, on_off=True).values_list('keyword', flat=True) | 865 | type=KeywordsType.INTEREST.value, on_off=True).values_list('keyword', flat=True) | 
| ... | @@ -907,6 +947,9 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -907,6 +947,9 @@ class Command(BaseCommand, LoggerMixin): | 
| 907 | res_list.append((pno, ino, part_idx, consts.RES_FAILED_2)) | 947 | res_list.append((pno, ino, part_idx, consts.RES_FAILED_2)) | 
| 908 | self.online_log.warn( | 948 | self.online_log.warn( | 
| 909 | '{0} [ocr_2 failed] [img_path={1}]'.format(self.log_base, img_path)) | 949 | '{0} [ocr_2 failed] [img_path={1}]'.format(self.log_base, img_path)) | 
| 950 | elif classify == consts.CONTRACT_CLASSIFY: | ||
| 951 | self.contract_process(ocr_data, contract_result, res_list, pno, ino, | ||
| 952 | part_idx, img_path) | ||
| 910 | else: # 流水处理 | 953 | else: # 流水处理 | 
| 911 | bs_classify_set.add(classify) | 954 | bs_classify_set.add(classify) | 
| 912 | self.bs_process(wb, ocr_data, bs_summary, unknown_summary, classify, res_list, pno, ino, part_idx) | 955 | self.bs_process(wb, ocr_data, bs_summary, unknown_summary, classify, res_list, pno, ino, part_idx) | 
| ... | @@ -936,9 +979,9 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -936,9 +979,9 @@ class Command(BaseCommand, LoggerMixin): | 
| 936 | 979 | ||
| 937 | # self.bs_log.info('[task={0}] [bs_summary={1}]'.format(task_str, merged_bs_summary)) | 980 | # self.bs_log.info('[task={0}] [bs_summary={1}]'.format(task_str, merged_bs_summary)) | 
| 938 | 981 | ||
| 939 | self.online_log.info('{0} [task={1}] [merged_bs_summary={2}] [license_summary={3}] ' | 982 | self.online_log.info('{0} [task={1}] [merged_bs_summary={2}] [license_summary={3}] [contract={4}] ' | 
| 940 | '[res_list={4}]'.format(self.log_base, task_str, merged_bs_summary, | 983 | '[res_list={5}]'.format(self.log_base, task_str, merged_bs_summary, | 
| 941 | license_summary, res_list)) | 984 | contract_result, license_summary, res_list)) | 
| 942 | 985 | ||
| 943 | except Exception as e: | 986 | except Exception as e: | 
| 944 | 987 | ||
| ... | @@ -959,7 +1002,7 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -959,7 +1002,7 @@ class Command(BaseCommand, LoggerMixin): | 
| 959 | # 重构Excel文件 | 1002 | # 重构Excel文件 | 
| 960 | # src_excel_path = os.path.join(doc_data_path, 'src.xlsx') | 1003 | # src_excel_path = os.path.join(doc_data_path, 'src.xlsx') | 
| 961 | # wb.save(src_excel_path) | 1004 | # wb.save(src_excel_path) | 
| 962 | count_list = wb.rebuild(merged_bs_summary, license_summary, res_list, doc.document_scheme) | 1005 | count_list = wb.rebuild(merged_bs_summary, license_summary, res_list, doc.document_scheme, contract_result) | 
| 963 | wb.save(excel_path) | 1006 | wb.save(excel_path) | 
| 964 | 1007 | ||
| 965 | except Exception as e: | 1008 | except Exception as e: | ... | ... | 
| ... | @@ -702,6 +702,17 @@ class BSWorkbook(Workbook): | ... | @@ -702,6 +702,17 @@ class BSWorkbook(Workbook): | 
| 702 | if field_str is not None: | 702 | if field_str is not None: | 
| 703 | count_list.append((field_str, count)) | 703 | count_list.append((field_str, count)) | 
| 704 | 704 | ||
| 705 | def contract_rebuild(self, contract_result): | ||
| 706 | if len(contract_result) == 0: | ||
| 707 | return | ||
| 708 | ws = self.create_sheet(consts.CONTRACT_SHEET_NAME) | ||
| 709 | for page_num, info_list in contract_result: | ||
| 710 | ws.append('page {0}'.format(page_num)) | ||
| 711 | for info in info_list: | ||
| 712 | for row in info: | ||
| 713 | ws.append(row) | ||
| 714 | ws.append((None, )) | ||
| 715 | |||
| 705 | @staticmethod | 716 | @staticmethod | 
| 706 | def remove_yuan(amount_key_set, key, src_str): | 717 | def remove_yuan(amount_key_set, key, src_str): | 
| 707 | if key in amount_key_set and isinstance(src_str, str): | 718 | if key in amount_key_set and isinstance(src_str, str): | 
| ... | @@ -801,12 +812,13 @@ class BSWorkbook(Workbook): | ... | @@ -801,12 +812,13 @@ class BSWorkbook(Workbook): | 
| 801 | if len(self.sheetnames) > 1: | 812 | if len(self.sheetnames) > 1: | 
| 802 | self.remove(self.get_sheet_by_name('Sheet')) | 813 | self.remove(self.get_sheet_by_name('Sheet')) | 
| 803 | 814 | ||
| 804 | def rebuild(self, bs_summary, license_summary, res_list, document_scheme): | 815 | def rebuild(self, bs_summary, license_summary, res_list, document_scheme, contract_result): | 
| 805 | res_count_tuple = self.res_sheet(res_list) | 816 | res_count_tuple = self.res_sheet(res_list) | 
| 806 | 817 | ||
| 807 | count_list = [(consts.MODEL_FIELD_BS, len(bs_summary))] | 818 | count_list = [(consts.MODEL_FIELD_BS, len(bs_summary))] | 
| 808 | if document_scheme == consts.DOC_SCHEME_LIST[1]: | 819 | if document_scheme == consts.DOC_SCHEME_LIST[1]: | 
| 809 | self.license_rebuild(license_summary, document_scheme, count_list) | 820 | self.license_rebuild(license_summary, document_scheme, count_list) | 
| 821 | self.contract_rebuild(contract_result) | ||
| 810 | self.bs_rebuild(bs_summary, res_count_tuple) | 822 | self.bs_rebuild(bs_summary, res_count_tuple) | 
| 811 | else: | 823 | else: | 
| 812 | self.bs_rebuild(bs_summary, res_count_tuple) | 824 | self.bs_rebuild(bs_summary, res_count_tuple) | ... | ... | 
- 
Please register or sign in to post a comment