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
20360921
authored
2023-01-05 15:03:24 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'feature/fsm-contract' into feature/uat-tmp
2 parents
430140c2
c18d2bad
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
114 additions
and
17 deletions
src/apps/doc/consts.py
src/apps/doc/management/commands/ocr_process.py
src/apps/doc/models.py
src/apps/doc/ocr/ecm.py
src/common/electronic_hil_contract/get_char_fsm.py
src/common/fsm_econtract/retriever.py
src/common/tools/mssql_script24.py
src/apps/doc/consts.py
View file @
2036092
...
...
@@ -10,7 +10,7 @@ PAGE_SIZE_DEFAULT = 10
FIXED_APPLICATION_ID_PREFIX
=
'CH-S'
DOC_SCHEME_LIST
=
[
'ACCEPTANCE'
,
'SETTLEMENT'
,
'CONTRACTMANAGEMENT'
]
DOC_SCHEME_LIST
=
[
'ACCEPTANCE'
,
'SETTLEMENT'
,
'CONTRACTMANAGEMENT'
,
'INSURANCE'
]
DATA_SOURCE_LIST
=
[
'POS'
,
'EAPP'
,
'ECONTRACT'
,
'OVP'
]
COMPARE_DOC_SCHEME_LIST
=
[
'CA'
,
'SE'
]
...
...
@@ -1541,6 +1541,9 @@ SE_AFC_CON_MAP = {
'还款账号'
:
(
2
,
2
,
'还款账户'
,
'账号'
),
'户名'
:
(
2
,
2
,
'还款账户'
,
'户名'
),
'开户行'
:
(
2
,
2
,
'还款账户'
,
'开户行'
),
'收款账号'
:
(
2
,
2
,
'借款人收款账户'
,
'账号'
),
'收款户名'
:
(
2
,
2
,
'借款人收款账户'
,
'户名'
),
'收款开户行'
:
(
2
,
2
,
'借款人收款账户'
,
'开户行'
),
'借款人签字及时间'
:
(
1
,
1
,
'借款人签字及时间'
,
None
),
...
...
@@ -1580,9 +1583,12 @@ SE_HIL_CON_1_MAP = {
'融资成本总额'
:
(
5
,
4
,
7
,
'融资成本总额'
,
None
),
'租期'
:
(
5
,
4
,
7
,
'租期'
,
None
),
'还款计划表'
:
(
5
,
5
,
7
,
'付款计划表'
,
None
),
'还款账号'
:
(
5
,
5
,
7
,
'银行账户-银行账号'
,
None
),
'户名'
:
(
5
,
5
,
7
,
'银行账户-户名'
,
None
),
'开户行'
:
(
5
,
5
,
7
,
'银行账户-开户行'
,
None
),
'还款账号'
:
(
5
,
6
,
7
,
'银行账户-银行账号'
,
None
),
'户名'
:
(
5
,
6
,
7
,
'银行账户-户名'
,
None
),
'开户行'
:
(
5
,
6
,
7
,
'银行账户-开户行'
,
None
),
'收款账号'
:
(
5
,
5
,
7
,
'收款银行账户-银行账号'
,
None
),
'收款户名'
:
(
5
,
5
,
7
,
'收款银行账户-户名'
,
None
),
'收款开户行'
:
(
5
,
5
,
7
,
'收款银行账户-开户行'
,
None
),
'ASP项目详情'
:
(
5
,
4
,
7
,
'车辆附加产品明细表'
,
None
),
'承租人法定代表人或授权代表'
:
(
1
,
1
,
7
,
'承租人-法定代表人或授权代表'
,
None
),
'共同承租人法定代表人或授权代表'
:
(
1
,
1
,
7
,
'共同承租人-法定代表人或授权代表'
,
None
),
...
...
@@ -1638,6 +1644,39 @@ SE_HIL_CON_MAP = {
HIL_CONTRACT_3_CLASSIFY
:
SE_HIL_CON_3_MAP
,
}
SE_FSM_WEP_MAP
=
{
'客户姓名'
:
(
1
,
'客户姓名'
),
'证件类型'
:
(
1
,
'证件类型'
),
'证件号码'
:
(
1
,
'证件号码'
),
'合同价格(小写)'
:
(
1
,
'合同价格(小写)'
),
'客户签名'
:
(
1
,
'客户签名'
),
'签单日期'
:
(
1
,
'签单日期'
),
}
SE_FSM_MSI_MAP
=
{
'客户姓名'
:
(
1
,
'客户姓名'
),
'证件类型'
:
(
1
,
'证件类型'
),
'证件号码'
:
(
1
,
'证件号码'
),
'合同价格(小写)'
:
(
1
,
'合同价格(小写)'
),
'客户签名'
:
(
2
,
'客户签名'
),
'签单日期'
:
(
2
,
'签单日期'
),
}
SE_FSM_SC_MAP
=
{
'姓名'
:
(
1
,
'姓名'
),
'证件类型'
:
(
1
,
'证件类型'
),
'证件号码'
:
(
1
,
'证件号码'
),
'总价'
:
(
1
,
'总价'
),
'客户签名'
:
(
12
,
'客户签名'
),
'签单日期'
:
(
12
,
'签单日期'
),
}
SE_FSM_CON_MAP
=
{
FSM_CONTRACT_WEP_CLASSIFY
:
SE_FSM_WEP_MAP
,
FSM_CONTRACT_MSI_CLASSIFY
:
SE_FSM_MSI_MAP
,
FSM_CONTRACT_SC_CLASSIFY
:
SE_FSM_SC_MAP
,
}
SE_AFC_CON_QRS_FIELD
=
[
'合同编号'
]
SE_AFC_CON_FIELD
=
[
'合同编号-每页'
,
'所购车辆价格-小写-重要条款'
,
'车架号-重要条款'
,
'贷款本金金额-重要条款'
,
'贷款期限-重要条款'
,
'车辆贷款本金金额-重要条款'
,
'附加产品融资贷款本金总额-重要条款'
,
'所购车辆价格'
,
'车架号'
,
'经销商'
,
...
...
src/apps/doc/management/commands/ocr_process.py
View file @
2036092
...
...
@@ -998,7 +998,7 @@ class Command(BaseCommand, LoggerMixin):
res
.
setdefault
(
consts
.
ALL_POSITION_KEY
,
dict
())[
key
]
=
page_info_dict
.
get
(
str
(
pno
),
{})
.
get
(
consts
.
ALL_POSITION_KEY
,
{})
.
get
(
key1
,
[])
license_summary
[
classify
]
=
[
res
]
elif
classify
in
consts
.
SE_HIL_CON_MAP
:
# TODO FSM新合同写入数据库用于比对
elif
classify
in
consts
.
SE_HIL_CON_MAP
:
res
=
{}
for
key
,
(
pno1
,
pno2
,
end_idx
,
key1
,
key2
)
in
consts
.
SE_HIL_CON_MAP
[
classify
]
.
items
():
if
pno1
is
None
:
...
...
@@ -1022,7 +1022,14 @@ class Command(BaseCommand, LoggerMixin):
res
[
key
]
=
tmp_res
res
.
setdefault
(
consts
.
IMG_PATH_KEY
,
dict
())[
key
]
=
page_info_dict
.
get
(
str
(
img_pno
),
{})
.
get
(
consts
.
IMG_PATH_KEY
,
''
)
license_summary
[
classify
]
=
[
res
]
elif
classify
in
consts
.
SE_FSM_CON_MAP
:
res
=
{}
for
key
,
(
pno1
,
key1
)
in
consts
.
SE_FSM_CON_MAP
[
classify
]
.
items
():
res
[
key
]
=
page_info_dict
.
get
(
str
(
pno1
),
{})
.
get
(
key1
)
res
.
setdefault
(
consts
.
IMG_PATH_KEY
,
dict
())[
key
]
=
page_info_dict
.
get
(
str
(
img_pno
),
{})
.
get
(
consts
.
IMG_PATH_KEY
,
''
)
license_summary
[
classify
]
=
[
res
]
def
rebuild_bs_summary
(
self
,
bs_summary
,
unknown_summary
):
...
...
src/apps/doc/models.py
View file @
2036092
...
...
@@ -329,6 +329,9 @@ class AFCOCRResult(models.Model):
hil_contract_2_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同2"
)
hil_contract_3_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同3"
)
qrs_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"AFC合同确认书"
)
fsm_wep_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-WEP"
)
fsm_msi_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-MSI"
)
fsm_sc_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-SC"
)
update_time
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
'修改时间'
)
create_time
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
'创建时间'
)
...
...
@@ -365,6 +368,9 @@ class HILOCRResult(models.Model):
hil_contract_2_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同2"
)
hil_contract_3_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同3"
)
qrs_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"AFC合同确认书"
)
fsm_wep_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-WEP"
)
fsm_msi_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-MSI"
)
fsm_sc_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-SC"
)
update_time
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
'修改时间'
)
create_time
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
'创建时间'
)
...
...
@@ -400,6 +406,9 @@ class AFCSEOCRResult(models.Model):
hil_contract_2_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同2"
)
hil_contract_3_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同3"
)
qrs_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"AFC合同确认书"
)
fsm_wep_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-WEP"
)
fsm_msi_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-MSI"
)
fsm_sc_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-SC"
)
update_time
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
'修改时间'
)
create_time
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
'创建时间'
)
...
...
@@ -436,6 +445,9 @@ class HILSEOCRResult(models.Model):
hil_contract_2_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同2"
)
hil_contract_3_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"HIL合同3"
)
qrs_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"AFC合同确认书"
)
fsm_wep_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-WEP"
)
fsm_msi_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-MSI"
)
fsm_sc_ocr
=
models
.
TextField
(
null
=
True
,
verbose_name
=
"FSM-SC"
)
update_time
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
'修改时间'
)
create_time
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
'创建时间'
)
...
...
src/apps/doc/ocr/ecm.py
View file @
2036092
...
...
@@ -34,6 +34,7 @@ class ECM:
'ACCEPTANCE'
:
(
'acceptance'
,
conf
.
ECM_FOLDER_CA
,
conf
.
ECM_FOLDER_CA_HIL
),
'SETTLEMENT'
:
(
self
.
settlement_type
,
conf
.
ECM_FOLDER_SE
,
conf
.
ECM_FOLDER_SE_HIL
),
'CONTRACTMANAGEMENT'
:
(
'contract_management'
,
conf
.
ECM_FOLDER_CA
,
conf
.
ECM_FOLDER_CA_HIL
),
'INSURANCE'
:
(
'insurance'
,
conf
.
ECM_FOLDER_INSURANCE
,
conf
.
ECM_FOLDER_INSURANCE_HIL
),
}
self
.
doc_base_map
=
{
'AFC'
:
'SF5_CN'
,
...
...
src/common/electronic_hil_contract/get_char_fsm.py
View file @
2036092
...
...
@@ -56,12 +56,12 @@ class Finder:
"融资成本总额"
:
self
.
item
,
"租期"
:
self
.
item
,
"付款计划表"
:
self
.
item
,
"
承租人收款
账户-户名"
:
self
.
item
,
"
承租人收款
账户-银行账号"
:
self
.
item
,
"
承租人收款
账户-开户行"
:
self
.
item
,
"
承租人扣款
账户-户名"
:
self
.
item
,
"
承租人扣款
账户-银行账号"
:
self
.
item
,
"
承租人扣款
账户-开户行"
:
self
.
item
,
"
收款银行
账户-户名"
:
self
.
item
,
"
收款银行
账户-银行账号"
:
self
.
item
,
"
收款银行
账户-开户行"
:
self
.
item
,
"
银行
账户-户名"
:
self
.
item
,
"
银行
账户-银行账号"
:
self
.
item
,
"
银行
账户-开户行"
:
self
.
item
,
"签字页-承租人姓名"
:
self
.
item
,
"签字页-承租人签章"
:
self
.
item
,
...
...
@@ -1260,18 +1260,18 @@ class Finder:
self
.
init_result
[
'付款计划表'
]
=
repayment_schedule
# 找承租人收款账户户名、银行账号、银行
name
=
self
.
get_key_value
(
key
=
'户名:'
,
page_num
=
'4'
)
self
.
init_result
[
'
承租人收款
账户-户名'
]
=
name
self
.
init_result
[
'
收款银行
账户-户名'
]
=
name
account
=
self
.
get_key_value
(
key
=
'银行账号:'
,
page_num
=
'4'
)
self
.
init_result
[
'
承租人收款
账户-银行账号'
]
=
account
self
.
init_result
[
'
收款银行
账户-银行账号'
]
=
account
bank
=
self
.
get_key_value
(
key
=
'开户银行:'
,
page_num
=
'4'
)
self
.
init_result
[
'承租人收款账户-开户行'
]
=
bank
# 找承租人扣款账户户名、银行账号、银行
name
=
self
.
get_key_value
(
key
=
'户名:'
,
page_num
=
'5'
)
self
.
init_result
[
'
承租人扣款
账户-户名'
]
=
name
self
.
init_result
[
'
银行
账户-户名'
]
=
name
account
=
self
.
get_key_value
(
key
=
'银行账号:'
,
page_num
=
'5'
)
self
.
init_result
[
'
承租人扣款
账户-银行账号'
]
=
account
self
.
init_result
[
'
银行
账户-银行账号'
]
=
account
bank
=
self
.
get_key_value
(
key
=
'开户银行:'
,
page_num
=
'5'
)
self
.
init_result
[
'
承租人扣款
账户-开户行'
]
=
bank
self
.
init_result
[
'
银行
账户-开户行'
]
=
bank
# 找签字页上的系列信息
# 承租人姓名、签章
...
...
src/common/fsm_econtract/retriever.py
View file @
2036092
...
...
@@ -195,7 +195,9 @@ class Retriever:
pdf_result
=
dict
()
for
pno_str
,
fields_dict
in
self
.
target_fields
.
items
():
is_last_pno
=
False
if
pno_str
==
'-1'
:
is_last_pno
=
True
pno_int_list
=
[
int
(
pno_str
)
for
pno_str
in
pdf_text_list
.
keys
()]
pno_str
=
str
(
max
(
pno_int_list
))
...
...
@@ -248,6 +250,7 @@ class Retriever:
self
.
position_str
:
list
(
coordinates
),
}
pdf_result
[
'page_{0}'
.
format
(
int
(
pno_str
)
+
1
)]
=
page_result
page_key
=
'page_12'
if
is_last_pno
else
'page_{0}'
.
format
(
int
(
pno_str
)
+
1
)
pdf_result
[
page_key
]
=
page_result
return
pdf_result
...
...
src/common/tools/mssql_script24.py
0 → 100644
View file @
2036092
import
pyodbc
hil_sql
=
"""
ALTER TABLE hil_ocr_result ADD fsm_wep_ocr nvarchar(max);
ALTER TABLE hil_ocr_result ADD fsm_msi_ocr nvarchar(max);
ALTER TABLE hil_ocr_result ADD fsm_sc_ocr nvarchar(max);
ALTER TABLE hil_se_ocr_result ADD fsm_wep_ocr nvarchar(max);
ALTER TABLE hil_se_ocr_result ADD fsm_msi_ocr nvarchar(max);
ALTER TABLE hil_se_ocr_result ADD fsm_sc_ocr nvarchar(max);
"""
afc_sql
=
"""
ALTER TABLE afc_ocr_result ADD fsm_wep_ocr nvarchar(max);
ALTER TABLE afc_ocr_result ADD fsm_msi_ocr nvarchar(max);
ALTER TABLE afc_ocr_result ADD fsm_sc_ocr nvarchar(max);
ALTER TABLE afc_se_ocr_result ADD fsm_wep_ocr nvarchar(max);
ALTER TABLE afc_se_ocr_result ADD fsm_msi_ocr nvarchar(max);
ALTER TABLE afc_se_ocr_result ADD fsm_sc_ocr nvarchar(max);
"""
hil_cnxn
=
pyodbc
.
connect
(
'DRIVER={ODBC Driver 17 for SQL Server};'
,
autocommit
=
True
)
hil_cursor
=
hil_cnxn
.
cursor
()
hil_cursor
.
execute
(
hil_sql
)
hil_cursor
.
close
()
hil_cnxn
.
close
()
afc_cnxn
=
pyodbc
.
connect
(
'DRIVER={ODBC Driver 17 for SQL Server};'
,
autocommit
=
True
)
afc_cursor
=
afc_cnxn
.
cursor
()
afc_cursor
.
execute
(
afc_sql
)
afc_cursor
.
close
()
afc_cnxn
.
close
()
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