70735d1f by 冯轩

FIX

1 parent d62fb776
......@@ -2033,37 +2033,11 @@ class Command(BaseCommand, LoggerMixin):
# 更新OCR累计识别结果表
if business_type == consts.HIL_PREFIX:
result_class = HILOCRResult if is_ca else HILSEOCRResult
res_obj = atomicSaveDBHIL(self,result_class,doc,license_summary,ic_merge,rp_merge)
else:
result_class = AFCOCRResult if is_ca else AFCSEOCRResult
res_obj = atomicSaveDBAFC(self,result_class,doc,license_summary,ic_merge,rp_merge)
with transaction.atomic():
res_obj = result_class.objects.select_for_update().filter(application_id=doc.application_id).first()
self.online_log.info('{0} [sql lock application_id={1}]'.format(self.log_base, doc.application_id))
if res_obj is None:
res_obj = result_class()
res_obj.application_id = doc.application_id
for classify, field in consts.RESULT_MAPPING.items():
if not hasattr(res_obj, field):
continue
license_list = license_summary.get(classify)
if not license_list:
continue
if classify == consts.IC_CLASSIFY and ic_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
elif classify == consts.RP_CLASSIFY and rp_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
old_res_str = getattr(res_obj, field)
if old_res_str is None:
last_res_str = json.dumps(license_list)
else:
old_res_list = json.loads(old_res_str)
old_res_list.extend(license_list)
last_res_str = json.dumps(old_res_list)
setattr(res_obj, field, last_res_str)
res_obj.save()
self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id))
except Exception as e:
self.online_log.error(
'{0} [process error (ocr result save)] [task={1}] [error={2}]'.format(
......@@ -2437,3 +2411,67 @@ class Command(BaseCommand, LoggerMixin):
p.join()
self.online_log.info('{0} [stop safely]'.format(self.log_base))
@transaction.atomic
def atomicSaveDBAFC(self,result_class,doc,license_summary,ic_merge,rp_merge):
with transaction.atomic('afc'):
res_obj = result_class.objects.using('afc').select_for_update().filter(application_id=doc.application_id).first()
self.online_log.info('{0} [sql lock AFC application_id={1}]'.format(self.log_base, doc.application_id))
if res_obj is None:
res_obj = result_class()
res_obj.application_id = doc.application_id
for classify, field in consts.RESULT_MAPPING.items():
if not hasattr(res_obj, field):
continue
license_list = license_summary.get(classify)
if not license_list:
continue
if classify == consts.IC_CLASSIFY and ic_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
elif classify == consts.RP_CLASSIFY and rp_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
old_res_str = getattr(res_obj, field)
if old_res_str is None:
last_res_str = json.dumps(license_list)
else:
old_res_list = json.loads(old_res_str)
old_res_list.extend(license_list)
last_res_str = json.dumps(old_res_list)
setattr(res_obj, field, last_res_str)
res_obj.save()
self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id))
return res_obj
@transaction.atomic
def atomicSaveDBHIL(self,result_class,doc,license_summary,ic_merge,rp_merge):
with transaction.atomic('default'):
res_obj = result_class.objects.using('default').select_for_update().filter(application_id=doc.application_id).first()
self.online_log.info('{0} [sql lock HIL application_id={1}]'.format(self.log_base, doc.application_id))
if res_obj is None:
res_obj = result_class()
res_obj.application_id = doc.application_id
for classify, field in consts.RESULT_MAPPING.items():
if not hasattr(res_obj, field):
continue
license_list = license_summary.get(classify)
if not license_list:
continue
if classify == consts.IC_CLASSIFY and ic_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
elif classify == consts.RP_CLASSIFY and rp_merge:
license_list[0].update(license_list[1])
license_list.pop(1)
old_res_str = getattr(res_obj, field)
if old_res_str is None:
last_res_str = json.dumps(license_list)
else:
old_res_list = json.loads(old_res_str)
old_res_list.extend(license_list)
last_res_str = json.dumps(old_res_list)
setattr(res_obj, field, last_res_str)
res_obj.save()
self.online_log.info('{0} [sql lock release application_id={1}]'.format(self.log_base, doc.application_id))
return res_obj
\ 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!