e199bcb2 by 周伟奇

add hil contract compare

1 parent 7dafa058
...@@ -909,11 +909,10 @@ class Command(BaseCommand, LoggerMixin): ...@@ -909,11 +909,10 @@ class Command(BaseCommand, LoggerMixin):
909 ) 909 )
910 return res 910 return res
911 911
912 def rebuild_contract(self, contract_result_compare): 912 def rebuild_contract(self, license_summary, contract_result_compare):
913 res_list = []
914 for classify, page_info_dict in contract_result_compare.items(): 913 for classify, page_info_dict in contract_result_compare.items():
915 res = {}
916 if classify == consts.CONTRACT_CLASSIFY: 914 if classify == consts.CONTRACT_CLASSIFY:
915 res = {}
917 is_asp = page_info_dict.get(consts.ASP_KEY, False) 916 is_asp = page_info_dict.get(consts.ASP_KEY, False)
918 for key, (pno_not_asp, pno_asp, key1, key2) in consts.SE_AFC_CON_MAP.items(): 917 for key, (pno_not_asp, pno_asp, key1, key2) in consts.SE_AFC_CON_MAP.items():
919 pno = pno_asp if is_asp else pno_not_asp 918 pno = pno_asp if is_asp else pno_not_asp
...@@ -927,8 +926,26 @@ class Command(BaseCommand, LoggerMixin): ...@@ -927,8 +926,26 @@ class Command(BaseCommand, LoggerMixin):
927 res[key] = page_info_dict.get(str(pno), {}).get(key1, '') 926 res[key] = page_info_dict.get(str(pno), {}).get(key1, '')
928 else: 927 else:
929 res[key] = page_info_dict.get(str(pno), {}).get(key1, {}).get(key2, '') 928 res[key] = page_info_dict.get(str(pno), {}).get(key1, {}).get(key2, '')
930 res_list.append(res) 929
931 return res_list 930 license_summary[classify] = [res]
931 else:
932 res = {}
933 for key, (pno1, pno2, end_idx, key1, key2) in consts.SE_HIL_CON_MAP[classify].items():
934 if pno1 is None:
935 for i in range(1, end_idx):
936 res.setdefault(key, list()).append(page_info_dict.get(str(i), {}).get(key1, ''))
937 elif key2 is None:
938 tmp_res = page_info_dict.get(str(pno1), {}).get(key1)
939 if tmp_res is None and isinstance(pno2, int):
940 tmp_res = page_info_dict.get(str(pno2), {}).get(key1, '')
941 res[key] = tmp_res
942 else:
943 tmp_res = page_info_dict.get(str(pno1), {}).get(key1, {}).get(key2)
944 if tmp_res is None and isinstance(pno2, int):
945 tmp_res = page_info_dict.get(str(pno2), {}).get(key1, {}).get(key2, '')
946 res[key] = tmp_res
947
948 license_summary[classify] = [res]
932 949
933 def rebuild_bs_summary(self, bs_summary, unknown_summary): 950 def rebuild_bs_summary(self, bs_summary, unknown_summary):
934 # bs_summary = { 951 # bs_summary = {
...@@ -1659,9 +1676,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1659,9 +1676,7 @@ class Command(BaseCommand, LoggerMixin):
1659 finally: 1676 finally:
1660 # TODO 识别结果存一张表,方便跑报表 1677 # TODO 识别结果存一张表,方便跑报表
1661 1678
1662 contract_result_compare_rebuild = self.rebuild_contract(contract_result_compare) 1679 self.rebuild_contract(license_summary, contract_result_compare)
1663 if len(contract_result_compare_rebuild) > 0:
1664 license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild
1665 1680
1666 bs_rebuild = self.rebuild_bs(merged_bs_summary) 1681 bs_rebuild = self.rebuild_bs(merged_bs_summary)
1667 if len(bs_rebuild) > 0: 1682 if len(bs_rebuild) > 0:
......
...@@ -925,7 +925,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -925,7 +925,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
925 license_dict[consts.BL_EN] = bl_field_input 925 license_dict[consts.BL_EN] = bl_field_input
926 all_id_num.append(id_num) 926 all_id_num.append(id_num)
927 if individual_info.get('customersubType', '') == 'Corporate': 927 if individual_info.get('customersubType', '') == 'Corporate':
928 company_info_list.append((customer_name, id_num)) 928 company_info_list.append((customer_name, id_num, legal_name))
929 929
930 # SME营业执照--------------------------------------------------------------------------------------------------- 930 # SME营业执照---------------------------------------------------------------------------------------------------
931 if individual_info.get('customersubType', '').startswith('Self Employed'): 931 if individual_info.get('customersubType', '').startswith('Self Employed'):
...@@ -1091,7 +1091,6 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1091,7 +1091,6 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1091 bs_info[consts.BS_EN] = bs_field_input 1091 bs_info[consts.BS_EN] = bs_field_input
1092 compare_info['Bank Statement'] = bs_info 1092 compare_info['Bank Statement'] = bs_info
1093 1093
1094
1095 # 抵押登记豁免函---------------------------------------------------------------------------------------------------- 1094 # 抵押登记豁免函----------------------------------------------------------------------------------------------------
1096 other_info = {} 1095 other_info = {}
1097 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '') 1096 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '')
...@@ -1156,13 +1155,13 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1156,13 +1155,13 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1156 1155
1157 # 保单 ----------------------------------------------------------------------------------------------------------- 1156 # 保单 -----------------------------------------------------------------------------------------------------------
1158 is_insurance = 0 1157 is_insurance = 0
1158 fp_campaign = cms_info.get('fpCampaign', '')
1159 insurance_type = cms_info.get('insuranceDetails', {}).get('insuranceType', '') 1159 insurance_type = cms_info.get('insuranceDetails', {}).get('insuranceType', '')
1160 if insurance_type == 'Waive Insurance' and isinstance(insurance_price, str): 1160 if insurance_type == 'Waive Insurance' and isinstance(insurance_price, str):
1161 is_insurance = 1 1161 is_insurance = 1
1162 elif insurance_type == 'Comprehensive Insurance': 1162 elif insurance_type == 'Comprehensive Insurance':
1163 is_insurance = 2 1163 is_insurance = 2
1164 if is_insurance != 0: 1164 if is_insurance != 0:
1165 fp_campaign = cms_info.get('fpCampaign', '')
1166 if fp_campaign.find('OCU') == -1: 1165 if fp_campaign.find('OCU') == -1:
1167 ssx_amount = amount 1166 ssx_amount = amount
1168 else: 1167 else:
...@@ -1190,21 +1189,93 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1190,21 +1189,93 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1190 if len(other_info) > 0: 1189 if len(other_info) > 0:
1191 compare_info['other'] = other_info 1190 compare_info['other'] = other_info
1192 1191
1192 schedule_list = []
1193 total_amount = 0
1194 for schedule_dict in cms_info.get('paymentSchedule', []):
1195 tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('no', '')),
1196 str(schedule_dict.get('grossRentalAmount', '')))
1197 schedule_list.append(tmp_str)
1198 total_amount += float(schedule_dict.get('grossRentalAmount', '0.0'))
1199 schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list)
1200
1201 online_sign = cms_info.get('contractSource', 'Online Sign') == 'Online Sign'
1202
1203 contract_info = {}
1193 if application_entity in consts.HIL_SET: 1204 if application_entity in consts.HIL_SET:
1194 # HIL合同----------------------------------------------------------------------------------------- 1205 # HIL合同 售后回租合同 --------------------------------------------------------------------------------------
1206 hil_contract_1_input = [
1207 (consts.SE_HIL_CON_1_FIELD[0], [full_no] if online_sign else full_no),
1208 (consts.SE_HIL_CON_1_FIELD[1], full_no),
1209 (consts.SE_HIL_CON_1_FIELD[2], vin_no),
1210 (consts.SE_HIL_CON_1_FIELD[3], cms_info.get('dealerName', '')),
1211 (consts.SE_HIL_CON_1_FIELD[4], amount),
1212 (consts.SE_HIL_CON_1_FIELD[5], str(cms_info.get('financialInformation', {}).get('originationPrincipal', '0.0'))),
1213 (consts.SE_HIL_CON_1_FIELD[6], str(cms_info.get('terms', '0'))),
1214 (consts.SE_HIL_CON_1_FIELD[7], schedule_list_str),
1215 (consts.SE_HIL_CON_1_FIELD[8], asp_list),
1216 (consts.SE_HIL_CON_1_FIELD[9], gzs_list),
1217 ]
1218
1219 if isinstance(company_info, tuple):
1220 hil_contract_1_input.append((consts.SE_HIL_CON_1_FIELD[10], company_info[2]))
1221
1222 for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST_1:
1223 if not e_write and not online_sign:
1224 continue
1225 is_find = False
1226 if app_type in main_role_info:
1227 if len(main_role_info[app_type]) >= id_idx+1:
1228 is_find = True
1229 if isinstance(field_idx, int):
1230 hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1231 else:
1232 hil_contract_1_input.append((key, field_idx))
1233 if not is_find and is_force:
1234 hil_contract_1_input.append((key, empty_str))
1235 contract_info[consts.HIL_CONTRACT_1_EN] = hil_contract_1_input
1236
1237 # HIL合同 车辆处置协议 --------------------------------------------------------------------------------------
1238 if fp_campaign.find('Joy_Select') != -1:
1239 hil_contract_3_input = [
1240 (consts.SE_HIL_CON_3_FIELD[0], [full_no] if online_sign else full_no),
1241 (consts.SE_HIL_CON_3_FIELD[1], hmh_name),
1242 (consts.SE_HIL_CON_3_FIELD[2], hmh_id),
1243 (consts.SE_HIL_CON_3_FIELD[3], cms_info.get('dealerName', '')),
1244 (consts.SE_HIL_CON_3_FIELD[4], full_no),
1245 (consts.SE_HIL_CON_3_FIELD[5], hmh_name),
1246 (consts.SE_HIL_CON_3_FIELD[6], hmh_id),
1247 ]
1248 if online_sign:
1249 hil_contract_3_input.append((consts.SE_HIL_CON_3_FIELD[7], hmh_name))
1250 contract_info[consts.HIL_CONTRACT_3_EN] = hil_contract_3_input
1251
1252 # HIL合同 车辆租赁抵押合同 --------------------------------------------------------------------------------------
1253 hil_contract_2_input = [
1254 (consts.SE_HIL_CON_2_FIELD[0], full_no),
1255 (consts.SE_HIL_CON_2_FIELD[1], full_no),
1256 (consts.SE_HIL_CON_2_FIELD[2], vin_no),
1257 (consts.SE_HIL_CON_2_FIELD[3], format(total_amount, '.2f')),
1258 (consts.SE_HIL_CON_2_FIELD[4], str(cms_info.get('terms', '0'))),
1259 ]
1195 1260
1261 for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST_2:
1262 if not e_write and not online_sign:
1263 continue
1264 is_find = False
1265 if app_type in main_role_info:
1266 if len(main_role_info[app_type]) >= id_idx+1:
1267 is_find = True
1268 if isinstance(field_idx, int):
1269 hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1270 else:
1271 hil_contract_2_input.append((key, field_idx))
1272 if not is_find and is_force:
1273 hil_contract_2_input.append((key, empty_str))
1274 contract_info[consts.HIL_CONTRACT_2_EN] = hil_contract_2_input
1275 compare_info['contract'] = contract_info
1196 return compare_info, cms_info.get('applicationVersion', 1) 1276 return compare_info, cms_info.get('applicationVersion', 1)
1197 else: 1277 else:
1198 # AFC合同----------------------------------------------------------------------------------------------------------- 1278 # AFC合同-----------------------------------------------------------------------------------------------------------
1199 contract_info = {}
1200
1201 schedule_list = []
1202 for schedule_dict in cms_info.get('paymentSchedule', []):
1203 tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('no', '')),
1204 str(schedule_dict.get('grossRentalAmount', '')))
1205 schedule_list.append(tmp_str)
1206 schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list)
1207
1208 vehicle_principal_str = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0')) 1279 vehicle_principal_str = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', '0.0'))
1209 afc_contract_input = [ 1280 afc_contract_input = [
1210 (consts.SE_AFC_CON_FIELD[0], full_no), 1281 (consts.SE_AFC_CON_FIELD[0], full_no),
...@@ -1238,7 +1309,6 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1238,7 +1309,6 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1238 afc_contract_input.pop(9) 1309 afc_contract_input.pop(9)
1239 1310
1240 # '借款人签字及时间', 'Borrower', 0, 0, True 1311 # '借款人签字及时间', 'Borrower', 0, 0, True
1241 online_sign = cms_info.get('contractSource', 'Online Sign') == 'Online Sign'
1242 for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST: 1312 for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST:
1243 if not e_write and not online_sign: 1313 if not e_write and not online_sign:
1244 continue 1314 continue
...@@ -1729,7 +1799,7 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1729,7 +1799,7 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1729 return result_field_list, no_ocr_result, field_img_path_dict 1799 return result_field_list, no_ocr_result, field_img_path_dict
1730 1800
1731 1801
1732 def se_afc_contract_compare(license_en, ocr_res_dict, strip_list): 1802 def se_contract_compare(license_en, ocr_res_dict, strip_list):
1733 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en] 1803 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1734 ocr_res_str = ocr_res_dict.get(ocr_field) 1804 ocr_res_str = ocr_res_dict.get(ocr_field)
1735 1805
...@@ -1983,8 +2053,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1983,8 +2053,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1983 failure_field = [] 2053 failure_field = []
1984 if license_en == consts.MVC34_EN: 2054 if license_en == consts.MVC34_EN:
1985 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list) 2055 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
1986 elif license_en == consts.AFC_CONTRACT_EN: 2056 elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN, consts.HIL_CONTRACT_3_EN, consts.AFC_CONTRACT_EN]:
1987 result_field_list, field_img_path_dict = se_afc_contract_compare(license_en, ocr_res_dict, strip_list) 2057 result_field_list, field_img_path_dict = se_contract_compare(license_en, ocr_res_dict, strip_list)
1988 elif license_en == consts.BS_EN: 2058 elif license_en == consts.BS_EN:
1989 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list) 2059 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list)
1990 else: 2060 else:
......
...@@ -159,12 +159,17 @@ class Comparison: ...@@ -159,12 +159,17 @@ class Comparison:
159 159
160 return self.build_res(input_str == compare_str), compare_str 160 return self.build_res(input_str == compare_str), compare_str
161 161
162 def se_list_compare(self, input_str, ocr_str_or_list, **kwargs): 162 def se_list_compare(self, input_str_or_list, ocr_str_or_list, **kwargs):
163 if isinstance(ocr_str_or_list, list): 163 if isinstance(ocr_str_or_list, list) and len(ocr_str_or_list) > 0:
164 for item in ocr_str_or_list: 164 if isinstance(input_str_or_list, list) and len(input_str_or_list) > 0:
165 if item != input_str: 165 if input_str_or_list[0] == ocr_str_or_list[0]:
166 return self.RESULT_N 166 return self.RESULT_Y
167 return self.RESULT_Y 167 return self.RESULT_N
168 else:
169 for item in ocr_str_or_list:
170 if item != input_str_or_list:
171 return self.RESULT_N
172 return self.RESULT_Y
168 else: 173 else:
169 return self.RESULT_N 174 return self.RESULT_N
170 175
...@@ -177,7 +182,8 @@ class Comparison: ...@@ -177,7 +182,8 @@ class Comparison:
177 ocr_str_or_list.pop(0) 182 ocr_str_or_list.pop(0)
178 schedule_list = [] 183 schedule_list = []
179 for row_list in ocr_str_or_list: 184 for row_list in ocr_str_or_list:
180 tmp_str = "{1}{0}{2}".format(self.SPLIT_STR, row_list[0], row_list[1].replace(',', '')) 185 tmp_str = "{1}{0}{2}".format(
186 self.SPLIT_STR, row_list[0], row_list[kwargs.get('value_idx', 1)].replace(',', ''))
181 schedule_list.append(tmp_str) 187 schedule_list.append(tmp_str)
182 return self.build_res(self.SCHEDULE_SPLIT_STR.join(schedule_list) == input_str) 188 return self.build_res(self.SCHEDULE_SPLIT_STR.join(schedule_list) == input_str)
183 else: 189 else:
...@@ -304,7 +310,6 @@ class Comparison: ...@@ -304,7 +310,6 @@ class Comparison:
304 except Exception as e: 310 except Exception as e:
305 return self.RESULT_N 311 return self.RESULT_N
306 312
307
308 def ca_date_compare(self, input_str, ocr_str, **kwargs): 313 def ca_date_compare(self, input_str, ocr_str, **kwargs):
309 if kwargs.get('long', False): 314 if kwargs.get('long', False):
310 if '长期' in ocr_str or '永久' in ocr_str: 315 if '长期' in ocr_str or '永久' in ocr_str:
...@@ -366,7 +371,7 @@ class Comparison: ...@@ -366,7 +371,7 @@ class Comparison:
366 def se_amount_lte_compare(self, input_str, ocr_str, **kwargs): 371 def se_amount_lte_compare(self, input_str, ocr_str, **kwargs):
367 try: 372 try:
368 float_input = float(input_str) 373 float_input = float(input_str)
369 float_ocr = float(ocr_str) 374 float_ocr = float(ocr_str.replace('元', '').replace(',', ''))
370 except Exception as e: 375 except Exception as e:
371 return self.RESULT_N 376 return self.RESULT_N
372 else: 377 else:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!