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