70735d1f by 冯轩

FIX

1 parent d62fb776
...@@ -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
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!