FIX
Showing
1 changed file
with
66 additions
and
28 deletions
... | @@ -2033,37 +2033,11 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -2033,37 +2033,11 @@ class Command(BaseCommand, LoggerMixin): |
2033 | # 更新OCR累计识别结果表 | 2033 | # 更新OCR累计识别结果表 |
2034 | if business_type == consts.HIL_PREFIX: | 2034 | if business_type == consts.HIL_PREFIX: |
2035 | result_class = HILOCRResult if is_ca else HILSEOCRResult | 2035 | result_class = HILOCRResult if is_ca else HILSEOCRResult |
2036 | res_obj = atomicSaveDBHIL(self,result_class,doc,license_summary,ic_merge,rp_merge) | ||
2036 | else: | 2037 | else: |
2037 | result_class = AFCOCRResult if is_ca else AFCSEOCRResult | 2038 | result_class = AFCOCRResult if is_ca else AFCSEOCRResult |
2039 | res_obj = atomicSaveDBAFC(self,result_class,doc,license_summary,ic_merge,rp_merge) | ||
2038 | 2040 | ||
2039 | with transaction.atomic(): | ||
2040 | res_obj = result_class.objects.select_for_update().filter(application_id=doc.application_id).first() | ||
2041 | self.online_log.info('{0} [sql lock application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2042 | if res_obj is None: | ||
2043 | res_obj = result_class() | ||
2044 | res_obj.application_id = doc.application_id | ||
2045 | for classify, field in consts.RESULT_MAPPING.items(): | ||
2046 | if not hasattr(res_obj, field): | ||
2047 | continue | ||
2048 | license_list = license_summary.get(classify) | ||
2049 | if not license_list: | ||
2050 | continue | ||
2051 | if classify == consts.IC_CLASSIFY and ic_merge: | ||
2052 | license_list[0].update(license_list[1]) | ||
2053 | license_list.pop(1) | ||
2054 | elif classify == consts.RP_CLASSIFY and rp_merge: | ||
2055 | license_list[0].update(license_list[1]) | ||
2056 | license_list.pop(1) | ||
2057 | old_res_str = getattr(res_obj, field) | ||
2058 | if old_res_str is None: | ||
2059 | last_res_str = json.dumps(license_list) | ||
2060 | else: | ||
2061 | old_res_list = json.loads(old_res_str) | ||
2062 | old_res_list.extend(license_list) | ||
2063 | last_res_str = json.dumps(old_res_list) | ||
2064 | setattr(res_obj, field, last_res_str) | ||
2065 | res_obj.save() | ||
2066 | self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2067 | except Exception as e: | 2041 | except Exception as e: |
2068 | self.online_log.error( | 2042 | self.online_log.error( |
2069 | '{0} [process error (ocr result save)] [task={1}] [error={2}]'.format( | 2043 | '{0} [process error (ocr result save)] [task={1}] [error={2}]'.format( |
... | @@ -2437,3 +2411,67 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -2437,3 +2411,67 @@ class Command(BaseCommand, LoggerMixin): |
2437 | p.join() | 2411 | p.join() |
2438 | 2412 | ||
2439 | self.online_log.info('{0} [stop safely]'.format(self.log_base)) | 2413 | self.online_log.info('{0} [stop safely]'.format(self.log_base)) |
2414 | |||
2415 | @transaction.atomic | ||
2416 | def atomicSaveDBAFC(self,result_class,doc,license_summary,ic_merge,rp_merge): | ||
2417 | with transaction.atomic('afc'): | ||
2418 | res_obj = result_class.objects.using('afc').select_for_update().filter(application_id=doc.application_id).first() | ||
2419 | self.online_log.info('{0} [sql lock AFC application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2420 | if res_obj is None: | ||
2421 | res_obj = result_class() | ||
2422 | res_obj.application_id = doc.application_id | ||
2423 | for classify, field in consts.RESULT_MAPPING.items(): | ||
2424 | if not hasattr(res_obj, field): | ||
2425 | continue | ||
2426 | license_list = license_summary.get(classify) | ||
2427 | if not license_list: | ||
2428 | continue | ||
2429 | if classify == consts.IC_CLASSIFY and ic_merge: | ||
2430 | license_list[0].update(license_list[1]) | ||
2431 | license_list.pop(1) | ||
2432 | elif classify == consts.RP_CLASSIFY and rp_merge: | ||
2433 | license_list[0].update(license_list[1]) | ||
2434 | license_list.pop(1) | ||
2435 | old_res_str = getattr(res_obj, field) | ||
2436 | if old_res_str is None: | ||
2437 | last_res_str = json.dumps(license_list) | ||
2438 | else: | ||
2439 | old_res_list = json.loads(old_res_str) | ||
2440 | old_res_list.extend(license_list) | ||
2441 | last_res_str = json.dumps(old_res_list) | ||
2442 | setattr(res_obj, field, last_res_str) | ||
2443 | res_obj.save() | ||
2444 | self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2445 | return res_obj | ||
2446 | |||
2447 | @transaction.atomic | ||
2448 | def atomicSaveDBHIL(self,result_class,doc,license_summary,ic_merge,rp_merge): | ||
2449 | with transaction.atomic('default'): | ||
2450 | res_obj = result_class.objects.using('default').select_for_update().filter(application_id=doc.application_id).first() | ||
2451 | self.online_log.info('{0} [sql lock HIL application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2452 | if res_obj is None: | ||
2453 | res_obj = result_class() | ||
2454 | res_obj.application_id = doc.application_id | ||
2455 | for classify, field in consts.RESULT_MAPPING.items(): | ||
2456 | if not hasattr(res_obj, field): | ||
2457 | continue | ||
2458 | license_list = license_summary.get(classify) | ||
2459 | if not license_list: | ||
2460 | continue | ||
2461 | if classify == consts.IC_CLASSIFY and ic_merge: | ||
2462 | license_list[0].update(license_list[1]) | ||
2463 | license_list.pop(1) | ||
2464 | elif classify == consts.RP_CLASSIFY and rp_merge: | ||
2465 | license_list[0].update(license_list[1]) | ||
2466 | license_list.pop(1) | ||
2467 | old_res_str = getattr(res_obj, field) | ||
2468 | if old_res_str is None: | ||
2469 | last_res_str = json.dumps(license_list) | ||
2470 | else: | ||
2471 | old_res_list = json.loads(old_res_str) | ||
2472 | old_res_list.extend(license_list) | ||
2473 | last_res_str = json.dumps(old_res_list) | ||
2474 | setattr(res_obj, field, last_res_str) | ||
2475 | res_obj.save() | ||
2476 | self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id)) | ||
2477 | return res_obj | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or sign in to post a comment