add license field order
Showing
3 changed files
with
61 additions
and
47 deletions
| ... | @@ -583,60 +583,73 @@ OTHER_CLASSIFY = 2 | ... | @@ -583,60 +583,73 @@ OTHER_CLASSIFY = 2 |
| 583 | # 身份证 | 583 | # 身份证 |
| 584 | IC_CN_NAME = '身份证' | 584 | IC_CN_NAME = '身份证' |
| 585 | IC_CLASSIFY = 33 | 585 | IC_CLASSIFY = 33 |
| 586 | IC_FIELD_ORDER = () | ||
| 586 | # 增值税发票 | 587 | # 增值税发票 |
| 587 | VAT_CN_NAME = '增值税发票' | 588 | VAT_CN_NAME = '增值税发票' |
| 588 | VAT_CLASSIFY = 0 | 589 | VAT_CLASSIFY = 0 |
| 590 | VAT_FIELD_ORDER = () | ||
| 589 | # 机动车登记证书 | 591 | # 机动车登记证书 |
| 590 | MVC_CN_NAME = '机动车登记证书' | 592 | MVC_CN_NAME = '机动车登记证书' |
| 591 | MVC_CLASSIFY = 28 | 593 | MVC_CLASSIFY = 28 |
| 594 | MVC_FIELD_ORDER = () | ||
| 595 | MVC_SE_FIELD_ORDER = () | ||
| 592 | # 机动车销售统一发票 | 596 | # 机动车销售统一发票 |
| 593 | MVI_CN_NAME = '机动车销售统一发票' | 597 | MVI_CN_NAME = '机动车销售统一发票' |
| 594 | MVI_CLASSIFY = 29 | 598 | MVI_CLASSIFY = 29 |
| 599 | MVI_FIELD_ORDER = () | ||
| 595 | IC_PID = VAT_PID = MVC_PID = MVI_PID = None | 600 | IC_PID = VAT_PID = MVC_PID = MVI_PID = None |
| 596 | 601 | ||
| 597 | # 营业执照 | 602 | # 营业执照 |
| 598 | BL_CN_NAME = '营业执照' | 603 | BL_CN_NAME = '营业执照' |
| 599 | BL_CLASSIFY = 31 | 604 | BL_CLASSIFY = 31 |
| 600 | BL_PID = 41 | 605 | BL_PID = 41 |
| 606 | BL_FIELD_ORDER = () | ||
| 601 | # 二手车发票 | 607 | # 二手车发票 |
| 602 | UCI_CN_NAME = '二手车发票' | 608 | UCI_CN_NAME = '二手车发票' |
| 603 | UCI_CLASSIFY = 1 | 609 | UCI_CLASSIFY = 1 |
| 604 | UCI_PID = 60 | 610 | UCI_PID = 60 |
| 611 | UCI_FIELD_ORDER = () | ||
| 605 | # 港澳台通行证 | 612 | # 港澳台通行证 |
| 606 | EEP_CN_NAME = '港澳台通行证' | 613 | EEP_CN_NAME = '港澳台通行证' |
| 607 | EEP_CLASSIFY = 30 | 614 | EEP_CLASSIFY = 30 |
| 608 | EEP_PID = 1018 | 615 | EEP_PID = 1018 |
| 616 | EEP_FIELD_ORDER = () | ||
| 609 | # 行驶证 | 617 | # 行驶证 |
| 610 | DL_CN_NAME = '行驶证' | 618 | DL_CN_NAME = '行驶证' |
| 611 | DL_CLASSIFY = 32 | 619 | DL_CLASSIFY = 32 |
| 612 | DL_PID = 5 | 620 | DL_PID = 5 |
| 621 | DL_FIELD_ORDER = () | ||
| 613 | # 护照 | 622 | # 护照 |
| 614 | PP_CN_NAME = '护照' | 623 | PP_CN_NAME = '护照' |
| 615 | PP_CLASSIFY = 3 | 624 | PP_CLASSIFY = 3 |
| 616 | PP_PID = 8 | 625 | PP_PID = 8 |
| 626 | PP_FIELD_ORDER = () | ||
| 617 | # 银行卡 | 627 | # 银行卡 |
| 618 | BC_CN_NAME = '银行卡' | 628 | BC_CN_NAME = '银行卡' |
| 619 | BC_CLASSIFY = 37 | 629 | BC_CLASSIFY = 37 |
| 620 | BC_PID = 4 | 630 | BC_PID = 4 |
| 621 | BC_FIELD = (('CardNum', '银行卡号'), | 631 | # BC_FIELD = (('CardNum', '银行卡号'), |
| 622 | ('BankName', '发卡行名称'), | 632 | # ('BankName', '发卡行名称'), |
| 623 | ('CardName', '银行卡名称'), | 633 | # ('CardName', '银行卡名称'), |
| 624 | ('BankCode', '发卡行代号'), | 634 | # ('BankCode', '发卡行代号'), |
| 625 | ('CardType', '银行卡类型'), | 635 | # ('CardType', '银行卡类型'), |
| 626 | ('Date', '日期')) | 636 | # ('Date', '日期')) |
| 637 | BC_FIELD_ORDER = (('BankName', '发卡行名称'), | ||
| 638 | ('CardNum', '银行卡号'), | ||
| 639 | ('CardType', '银行卡类型'),) | ||
| 627 | 640 | ||
| 628 | SUCCESS_CODE_SET = {'0', 0} | 641 | SUCCESS_CODE_SET = {'0', 0} |
| 629 | 642 | ||
| 630 | LICENSE_ORDER = ((MVI_CLASSIFY, (MVI_PID, MVI_CN_NAME)), | 643 | LICENSE_ORDER = ((MVI_CLASSIFY, (MVI_PID, MVI_CN_NAME, MVI_FIELD_ORDER)), |
| 631 | (IC_CLASSIFY, (IC_PID, IC_CN_NAME)), | 644 | (IC_CLASSIFY, (IC_PID, IC_CN_NAME, IC_FIELD_ORDER)), |
| 632 | (BC_CLASSIFY, (BC_PID, BC_CN_NAME)), | 645 | (BC_CLASSIFY, (BC_PID, BC_CN_NAME, BC_FIELD_ORDER)), |
| 633 | (BL_CLASSIFY, (BL_PID, BL_CN_NAME)), | 646 | (BL_CLASSIFY, (BL_PID, BL_CN_NAME, BL_FIELD_ORDER)), |
| 634 | (UCI_CLASSIFY, (UCI_PID, UCI_CN_NAME)), | 647 | (UCI_CLASSIFY, (UCI_PID, UCI_CN_NAME, UCI_FIELD_ORDER)), |
| 635 | (EEP_CLASSIFY, (EEP_PID, EEP_CN_NAME)), | 648 | (EEP_CLASSIFY, (EEP_PID, EEP_CN_NAME, EEP_FIELD_ORDER)), |
| 636 | (DL_CLASSIFY, (DL_PID, DL_CN_NAME)), | 649 | (DL_CLASSIFY, (DL_PID, DL_CN_NAME, DL_FIELD_ORDER)), |
| 637 | (PP_CLASSIFY, (PP_PID, PP_CN_NAME)), | 650 | (PP_CLASSIFY, (PP_PID, PP_CN_NAME, PP_FIELD_ORDER)), |
| 638 | (MVC_CLASSIFY, (MVC_PID, MVC_CN_NAME)), | 651 | (MVC_CLASSIFY, (MVC_PID, MVC_CN_NAME, MVC_FIELD_ORDER)), |
| 639 | (VAT_CLASSIFY, (VAT_PID, VAT_CN_NAME))) | 652 | (VAT_CLASSIFY, (VAT_PID, VAT_CN_NAME, VAT_FIELD_ORDER))) |
| 640 | 653 | ||
| 641 | LICENSE_CLASSIFY_MAPPING = dict(LICENSE_ORDER) | 654 | LICENSE_CLASSIFY_MAPPING = dict(LICENSE_ORDER) |
| 642 | 655 | ... | ... |
| ... | @@ -163,28 +163,23 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -163,28 +163,23 @@ class Command(BaseCommand, LoggerMixin): |
| 163 | if not license_data: | 163 | if not license_data: |
| 164 | skip_img.append(self.parse_img_path(img_path)) | 164 | skip_img.append(self.parse_img_path(img_path)) |
| 165 | return | 165 | return |
| 166 | for license_dict in license_data: | 166 | license_summary.setdefault(classify, []).extend(license_data) |
| 167 | res_list = [] | ||
| 168 | for field, value in license_dict.items(): | ||
| 169 | res_list.append((field, value)) | ||
| 170 | license_summary.setdefault(classify, []).append(res_list) | ||
| 171 | 167 | ||
| 172 | def license2_process(self, ocr_res_2, license_summary, pid, classify, skip_img, img_path): | 168 | def license2_process(self, ocr_res_2, license_summary, pid, classify, skip_img, img_path): |
| 173 | if ocr_res_2.get('ErrorCode') in consts.SUCCESS_CODE_SET: | 169 | if ocr_res_2.get('ErrorCode') in consts.SUCCESS_CODE_SET: |
| 174 | if pid == consts.BC_PID: | 170 | if pid == consts.BC_PID: |
| 175 | # 银行卡 | 171 | # 银行卡 |
| 176 | res_list = [] | 172 | # res_dict = {} |
| 177 | for en_key, chn_key in consts.BC_FIELD: | 173 | # for en_key, chn_key in consts.BC_FIELD: |
| 178 | res_list.append((chn_key, ocr_res_2.get(en_key, ''))) | 174 | # res_dict[chn_key] = ocr_res_2.get(en_key, '') |
| 179 | license_summary.setdefault(classify, []).append(res_list) | 175 | license_summary.setdefault(classify, []).append(ocr_res_2) |
| 180 | else: | 176 | else: |
| 181 | # 营业执照、行驶证等 | 177 | # 营业执照、行驶证等 |
| 182 | for result_dict in ocr_res_2.get('ResultList', []): | 178 | for result_dict in ocr_res_2.get('ResultList', []): |
| 183 | res_list = [] | 179 | res_dict = {} |
| 184 | for field_dict in result_dict.get('FieldList', []): | 180 | for field_dict in result_dict.get('FieldList', []): |
| 185 | res_list.append( | 181 | res_dict[field_dict.get('chn_key', '')] = field_dict.get('value', '') |
| 186 | (field_dict.get('chn_key', ''), field_dict.get('value', ''))) | 182 | license_summary.setdefault(classify, []).append(res_dict) |
| 187 | license_summary.setdefault(classify, []).append(res_list) | ||
| 188 | else: | 183 | else: |
| 189 | skip_img.append(self.parse_img_path(img_path)) | 184 | skip_img.append(self.parse_img_path(img_path)) |
| 190 | 185 | ||
| ... | @@ -229,7 +224,7 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -229,7 +224,7 @@ class Command(BaseCommand, LoggerMixin): |
| 229 | elif classify in consts.LICENSE_CLASSIFY_SET_1: # 证件1 | 224 | elif classify in consts.LICENSE_CLASSIFY_SET_1: # 证件1 |
| 230 | self.license1_process(ocr_data, license_summary, classify, skip_img, img_path) | 225 | self.license1_process(ocr_data, license_summary, classify, skip_img, img_path) |
| 231 | elif classify in consts.LICENSE_CLASSIFY_SET_2: # 证件2 | 226 | elif classify in consts.LICENSE_CLASSIFY_SET_2: # 证件2 |
| 232 | pid, _ = consts.LICENSE_CLASSIFY_MAPPING.get(classify) | 227 | pid, _, _ = consts.LICENSE_CLASSIFY_MAPPING.get(classify) |
| 233 | json_data_2 = { | 228 | json_data_2 = { |
| 234 | "pid": str(pid), | 229 | "pid": str(pid), |
| 235 | "key": conf.OCR_KEY, | 230 | "key": conf.OCR_KEY, |
| ... | @@ -566,9 +561,11 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -566,9 +561,11 @@ class Command(BaseCommand, LoggerMixin): |
| 566 | 561 | ||
| 567 | # 4.2 重构Excel文件 | 562 | # 4.2 重构Excel文件 |
| 568 | wb.save(src_excel_path) | 563 | wb.save(src_excel_path) |
| 569 | wb.rebuild(merged_bs_summary, license_summary, skip_img) | 564 | wb.rebuild(merged_bs_summary, license_summary, skip_img, doc.document_scheme) |
| 570 | wb.save(excel_path) | 565 | wb.save(excel_path) |
| 571 | except EDMSException as e: | 566 | except EDMSException as e: |
| 567 | doc.status = DocStatus.PROCESS_FAILED.value | ||
| 568 | doc.save() | ||
| 572 | self.cronjob_log.error('{0} [process failed (edms download)] [business_type={1}] [doc_id={2}] ' | 569 | self.cronjob_log.error('{0} [process failed (edms download)] [business_type={1}] [doc_id={2}] ' |
| 573 | '[err={3}]'.format(self.log_base, business_type, doc.id, e)) | 570 | '[err={3}]'.format(self.log_base, business_type, doc.id, e)) |
| 574 | except Exception as e: | 571 | except Exception as e: | ... | ... |
| ... | @@ -242,14 +242,15 @@ class BSWorkbook(Workbook): | ... | @@ -242,14 +242,15 @@ class BSWorkbook(Workbook): |
| 242 | elif summary_cell.value in self.loan_keyword: | 242 | elif summary_cell.value in self.loan_keyword: |
| 243 | summary_cell.fill = self.loan_fill | 243 | summary_cell.fill = self.loan_fill |
| 244 | 244 | ||
| 245 | amount_error = False | ||
| 245 | # 3.3.余额转数值 | 246 | # 3.3.余额转数值 |
| 246 | over_cell = rows[consts.OVER_IDX] | 247 | over_cell = rows[consts.OVER_IDX] |
| 247 | try: | 248 | try: |
| 248 | over_cell.value = locale.atof(self.amount_format(over_cell.value)) | 249 | over_cell.value = locale.atof(self.amount_format(over_cell.value)) |
| 249 | except Exception as e: | 250 | except Exception as e: |
| 250 | continue | 251 | amount_error = True |
| 251 | else: | 252 | else: |
| 252 | over_cell.number_format = numbers.FORMAT_NUMBER_COMMA_SEPARATED1 | 253 | over_cell.number_format = numbers.FORMAT_NUMBER_00 |
| 253 | 254 | ||
| 254 | # 3.4.金额转数值 | 255 | # 3.4.金额转数值 |
| 255 | try: | 256 | try: |
| ... | @@ -267,11 +268,11 @@ class BSWorkbook(Workbook): | ... | @@ -267,11 +268,11 @@ class BSWorkbook(Workbook): |
| 267 | if amount_cell.value > 0: | 268 | if amount_cell.value > 0: |
| 268 | amount_cell.value = -amount_cell.value | 269 | amount_cell.value = -amount_cell.value |
| 269 | except Exception as e: | 270 | except Exception as e: |
| 270 | continue | 271 | amount_error = True |
| 271 | else: | 272 | else: |
| 272 | if rows[consts.BORROW_IDX].value in consts.BORROW_OUTLAY_SET: | 273 | if rows[consts.BORROW_IDX].value in consts.BORROW_OUTLAY_SET: |
| 273 | amount_cell.value = -amount_cell.value | 274 | amount_cell.value = -amount_cell.value |
| 274 | amount_cell.number_format = numbers.FORMAT_NUMBER_COMMA_SEPARATED1 | 275 | amount_cell.number_format = numbers.FORMAT_NUMBER_00 |
| 275 | same_amount_mapping = amount_mapping.get(date_cell.value, {}) | 276 | same_amount_mapping = amount_mapping.get(date_cell.value, {}) |
| 276 | fill_rows = same_amount_mapping.get(-amount_cell.value) | 277 | fill_rows = same_amount_mapping.get(-amount_cell.value) |
| 277 | if fill_rows: | 278 | if fill_rows: |
| ... | @@ -281,12 +282,12 @@ class BSWorkbook(Workbook): | ... | @@ -281,12 +282,12 @@ class BSWorkbook(Workbook): |
| 281 | amount_cell.value, []).append(row) | 282 | amount_cell.value, []).append(row) |
| 282 | 283 | ||
| 283 | # 3.5.核对结果 | 284 | # 3.5.核对结果 |
| 284 | if row > 2: | 285 | if row > 2 and not amount_error: |
| 285 | if is_reverse: | 286 | if is_reverse: |
| 286 | rows[consts.RESULT_IDX].value = '=IF(D{0}=SUM(D{1},C{0}), "{2}", "{3}")'.format( | 287 | rows[consts.RESULT_IDX].value = '=IF(D{0}=ROUND(SUM(D{1},C{0}),2), "{2}", "{3}")'.format( |
| 287 | row - 1, row, *self.proof_res) | 288 | row - 1, row, *self.proof_res) |
| 288 | else: | 289 | else: |
| 289 | rows[consts.RESULT_IDX].value = '=IF(D{0}=SUM(D{1},C{0}), "{2}", "{3}")'.format( | 290 | rows[consts.RESULT_IDX].value = '=IF(D{0}=ROUND(SUM(D{1},C{0}),2), "{2}", "{3}")'.format( |
| 290 | row, row - 1, *self.proof_res) | 291 | row, row - 1, *self.proof_res) |
| 291 | 292 | ||
| 292 | # 删除金额辅助列 | 293 | # 删除金额辅助列 |
| ... | @@ -358,15 +359,18 @@ class BSWorkbook(Workbook): | ... | @@ -358,15 +359,18 @@ class BSWorkbook(Workbook): |
| 358 | for sheet in summary.get('sheet'): | 359 | for sheet in summary.get('sheet'): |
| 359 | self.remove(self.get_sheet_by_name(sheet)) | 360 | self.remove(self.get_sheet_by_name(sheet)) |
| 360 | 361 | ||
| 361 | def license_rebuild(self, license_summary): | 362 | def license_rebuild(self, license_summary, document_scheme): |
| 362 | for classify, (_, name) in consts.LICENSE_ORDER: | 363 | for classify, (_, name, field_order) in consts.LICENSE_ORDER: |
| 363 | res = license_summary.get(classify) | 364 | # 机动车登记证:CA和SE不同顺序 |
| 364 | if res is None: | 365 | if classify == consts.MVC_CLASSIFY and document_scheme == consts.DOC_SCHEME_LIST[1]: |
| 366 | field_order = consts.MVC_SE_FIELD_ORDER | ||
| 367 | license_list = license_summary.get(classify) | ||
| 368 | if license_list is None: | ||
| 365 | continue | 369 | continue |
| 366 | ws = self.create_sheet(name) | 370 | ws = self.create_sheet(name) |
| 367 | for bl in res: | 371 | for license_dict in license_list: |
| 368 | for bl_field in bl: | 372 | for search_field, write_field in field_order: |
| 369 | ws.append(bl_field) | 373 | ws.append((write_field, license_dict.get(search_field, ''))) |
| 370 | ws.append((None, )) | 374 | ws.append((None, )) |
| 371 | 375 | ||
| 372 | def skip_img_sheet(self, skip_img): | 376 | def skip_img_sheet(self, skip_img): |
| ... | @@ -376,7 +380,7 @@ class BSWorkbook(Workbook): | ... | @@ -376,7 +380,7 @@ class BSWorkbook(Workbook): |
| 376 | for img_tuple in skip_img: | 380 | for img_tuple in skip_img: |
| 377 | ws.append(img_tuple) | 381 | ws.append(img_tuple) |
| 378 | 382 | ||
| 379 | def rebuild(self, bs_summary, license_summary, skip_img): | 383 | def rebuild(self, bs_summary, license_summary, skip_img, document_scheme): |
| 380 | self.bs_rebuild(bs_summary) | 384 | self.bs_rebuild(bs_summary) |
| 381 | self.license_rebuild(license_summary) | 385 | self.license_rebuild(license_summary, document_scheme) |
| 382 | self.skip_img_sheet(skip_img) | 386 | self.skip_img_sheet(skip_img) | ... | ... |
-
Please register or sign in to post a comment