Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
周伟奇
/
bmw-ocr
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
efad9db2
authored
2024-08-12 10:00:46 +0800
by
chenyao
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
更新财务报表的三个报表的处理,dict为空,则excel中sheet不创建
1 parent
b859310a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
30 deletions
src/apps/doc/consts.py
src/apps/doc/management/commands/ocr_process.py
src/apps/doc/ocr/wb.py
src/apps/doc/consts.py
View file @
efad9db
...
...
@@ -98,6 +98,7 @@ RES_SHEET_HEADER = ('页码', '图片序号', '检测图片序号', '结果')
RES_SUCCESS
=
'识别成功'
RES_SUCCESS_OTHER
=
'识别成功(其他类)'
RES_SUCCESS_EMPTY
=
'识别成功(空数据)'
RES_SUCCESS_FINANCIAL_STATEMENT
=
'识别成功(财务报表类)'
RES_FAILED
=
'识别失败'
RES_FAILED_1
=
'识别失败(阶段1)'
RES_FAILED_2
=
'识别失败(阶段2)'
...
...
src/apps/doc/management/commands/ocr_process.py
View file @
efad9db
...
...
@@ -1725,7 +1725,7 @@ class Command(BaseCommand, LoggerMixin):
contract_result
=
{}
contract_result_compare
=
{}
# 添加财报三个报表的处理
financial_statement_dict
=
{
"code"
:
{},
"stamp"
:
{}
}
financial_statement_dict
=
{}
res_list
=
[]
interest_keyword
=
Keywords
.
objects
.
filter
(
type
=
KeywordsType
.
INTEREST
.
value
,
on_off
=
True
)
.
values_list
(
'keyword'
,
flat
=
True
)
...
...
@@ -1756,6 +1756,14 @@ class Command(BaseCommand, LoggerMixin):
self
.
log_base
,
img_path
))
continue
elif
classify
in
consts
.
FINANCIAL_STATEMENT_CLASSIFY_LIST
:
# 添加到 res_list 中
res_list
.
append
((
pno
,
ino
,
part_idx
,
consts
.
RES_SUCCESS_FINANCIAL_STATEMENT
))
# 只要分类为财报三个报表的,就在 financial_statement_dict 中添加对应的 code 和 stamp 两个dict
if
"code"
not
in
financial_statement_dict
:
financial_statement_dict
[
"code"
]
=
{}
if
"stamp"
not
in
financial_statement_dict
:
financial_statement_dict
[
"stamp"
]
=
{}
financial_statement_table_name
=
None
if
classify
==
97
:
financial_statement_table_name
=
"balance_sheet"
...
...
@@ -2057,7 +2065,51 @@ class Command(BaseCommand, LoggerMixin):
license_summary
[
consts
.
BS_CLASSIFY
]
=
bs_rebuild
# 比对
if
len
(
license_summary
)
>
0
and
doc
.
document_scheme
!=
consts
.
DOC_SCHEME_LIST
[
2
]:
if
len
(
license_summary
)
>
0
:
if
doc
.
document_scheme
!=
consts
.
DOC_SCHEME_LIST
[
2
]:
# if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]:
try
:
is_ca
=
True
if
doc
.
document_scheme
==
consts
.
DOC_SCHEME_LIST
[
0
]
else
False
# 更新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
,
task_str
,
financial_statement_dict
)
else
:
result_class
=
AFCOCRResult
if
is_ca
else
AFCSEOCRResult
res_obj
=
atomicSaveDBAFC
(
self
,
result_class
,
doc
,
license_summary
,
ic_merge
,
rp_merge
,
task_str
,
financial_statement_dict
)
except
Exception
as
e
:
self
.
online_log
.
error
(
'{0} [process error (ocr result save)] [task={1}] [error={2}]'
.
format
(
self
.
log_base
,
task_str
,
traceback
.
format_exc
()))
else
:
self
.
online_log
.
info
(
'{0} [ocr result save success] [task={1}] [res_id={2}]'
.
format
(
self
.
log_base
,
task_str
,
res_obj
.
id
))
# 触发比对
try
:
# 是否fsm
cms_status_class
=
HILCmsStatusInfo
if
business_type
in
consts
.
HIL_SET
else
AFCCmsStatusInfo
cms_status_info
=
cms_status_class
.
objects
.
filter
(
application_id
=
doc
.
application_id
)
.
first
()
is_fsm
=
cms_status_info
is
not
None
and
cms_status_info
.
is_fsm
==
1
self
.
online_log
.
info
(
'{0} [isfsm] [task={1}] [true or false={2}]'
.
format
(
self
.
log_base
,
task_str
,
is_fsm
))
if
is_fsm
:
fsm_compare
.
apply_async
((
doc
.
application_id
,
business_type
,
None
,
res_obj
.
id
,
is_ca
,
True
),
queue
=
'queue_compare'
)
else
:
# pass
compare
.
apply_async
((
doc
.
application_id
,
business_type
,
None
,
res_obj
.
id
,
is_ca
,
True
),
queue
=
'queue_compare'
)
except
Exception
as
e
:
self
.
online_log
.
error
(
'{0} [process error (comparison info send)] [task={1}] [error={2}]'
.
format
(
self
.
log_base
,
task_str
,
traceback
.
format_exc
()))
else
:
self
.
online_log
.
info
(
'{0} [comparison info send success] [task={1}] '
'[res_id={2}]'
.
format
(
self
.
log_base
,
task_str
,
res_obj
.
id
))
else
:
# license_summary 为空
self
.
online_log
.
info
(
'{0} [task={1}] [no license_summary]'
.
format
(
self
.
log_base
,
task_str
))
try
:
is_ca
=
True
if
doc
.
document_scheme
==
consts
.
DOC_SCHEME_LIST
[
0
]
else
False
# 更新OCR累计识别结果表
...
...
@@ -2067,36 +2119,10 @@ class Command(BaseCommand, LoggerMixin):
else
:
result_class
=
AFCOCRResult
if
is_ca
else
AFCSEOCRResult
res_obj
=
atomicSaveDBAFC
(
self
,
result_class
,
doc
,
license_summary
,
ic_merge
,
rp_merge
,
task_str
,
financial_statement_dict
)
except
Exception
as
e
:
self
.
online_log
.
error
(
'{0} [process error (ocr result save)] [task={1}] [error={2}]'
.
format
(
self
.
log_base
,
task_str
,
traceback
.
format_exc
()))
else
:
self
.
online_log
.
info
(
'{0} [ocr result save success] [task={1}] [res_id={2}]'
.
format
(
self
.
log_base
,
task_str
,
res_obj
.
id
))
# 触发比对
try
:
# 是否fsm
cms_status_class
=
HILCmsStatusInfo
if
business_type
in
consts
.
HIL_SET
else
AFCCmsStatusInfo
cms_status_info
=
cms_status_class
.
objects
.
filter
(
application_id
=
doc
.
application_id
)
.
first
()
is_fsm
=
cms_status_info
is
not
None
and
cms_status_info
.
is_fsm
==
1
self
.
online_log
.
info
(
'{0} [isfsm] [task={1}] [true or false={2}]'
.
format
(
self
.
log_base
,
task_str
,
is_fsm
))
if
is_fsm
:
fsm_compare
.
apply_async
((
doc
.
application_id
,
business_type
,
None
,
res_obj
.
id
,
is_ca
,
True
),
queue
=
'queue_compare'
)
else
:
# pass
compare
.
apply_async
((
doc
.
application_id
,
business_type
,
None
,
res_obj
.
id
,
is_ca
,
True
),
queue
=
'queue_compare'
)
except
Exception
as
e
:
self
.
online_log
.
error
(
'{0} [process error (comparison info send)] [task={1}] [error={2}]'
.
format
(
self
.
log_base
,
task_str
,
traceback
.
format_exc
()))
else
:
self
.
online_log
.
info
(
'{0} [comparison info send success] [task={1}] '
'[res_id={2}]'
.
format
(
self
.
log_base
,
task_str
,
res_obj
.
id
))
# DDA处理
if
do_dda
:
...
...
@@ -2451,7 +2477,9 @@ def atomicSaveDBAFC(self,result_class,doc,license_summary,ic_merge,rp_merge,task
res_obj
=
result_class
()
res_obj
.
application_id
=
doc
.
application_id
self
.
online_log
.
info
(
'{0} [res_obj is None application_id={1} doc_id={2}]'
.
format
(
self
.
log_base
,
doc
.
application_id
,
doc
.
id
))
res_obj
.
fs_ocr
=
json
.
dumps
([
financial_statement_dict
])
if
res_obj
is
not
None
:
if
financial_statement_dict
:
res_obj
.
fs_ocr
=
json
.
dumps
([
financial_statement_dict
])
for
classify
,
field
in
consts
.
RESULT_MAPPING
.
items
():
if
not
hasattr
(
res_obj
,
field
):
continue
...
...
@@ -2485,7 +2513,9 @@ def atomicSaveDBHIL(self,result_class,doc,license_summary,ic_merge,rp_merge, tas
res_obj
=
result_class
()
res_obj
.
application_id
=
doc
.
application_id
self
.
online_log
.
info
(
'{0} [res_obj is None application_id={1} doc_id={2}]'
.
format
(
self
.
log_base
,
doc
.
application_id
,
doc
.
id
))
res_obj
.
fs_ocr
=
json
.
dumps
([
financial_statement_dict
])
if
res_obj
is
not
None
:
if
financial_statement_dict
:
res_obj
.
fs_ocr
=
json
.
dumps
([
financial_statement_dict
])
for
classify
,
field
in
consts
.
RESULT_MAPPING
.
items
():
if
not
hasattr
(
res_obj
,
field
):
continue
...
...
src/apps/doc/ocr/wb.py
View file @
efad9db
...
...
@@ -829,6 +829,10 @@ class BSWorkbook(Workbook):
def
financial_rebuild
(
self
,
financial_statement_dict
):
# 如果 financial_statement_dict 为空,则不创建表
if
not
financial_statement_dict
:
return
# 如果 financial_statement_dict 不为空,则创建表
ws
=
self
.
create_sheet
(
consts
.
FINANCIAL_SHEET_NAME
)
for
fin_key
,
fin_value
in
financial_statement_dict
.
items
():
table_str
=
"识别码"
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment