afc ht part 1
Showing
5 changed files
with
176 additions
and
118 deletions
| ... | @@ -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 | '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行', | ... | ... |
| ... | @@ -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 | ... | ... |
| 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() | ... | ... |
-
Please register or sign in to post a comment