Merge pull request !10419 from 李鹏宇/dev_wang
This commit is contained in:
李鹏宇
2026-03-31 03:25:16 +00:00
committed by Gitee
@@ -44,26 +44,26 @@ class PropertyStatementsWizard(models.Model):
for rx in range(4, sh.nrows):
row = sh.row(rx)
self.property_bank_statements_dj_data(row, your_own_account)
elif self.selection_bank in ('gs', 'xy'):
# 工商银行(兴源格式):xlsx文件,数据从第2行(索引1)开始
import openpyxl, io
wb = openpyxl.load_workbook(io.BytesIO(file_content))
ws = wb.active
for i, row_cells in enumerate(ws.iter_rows(values_only=True)):
if i < 1: # 跳过表头行
continue
self.property_bank_statements_xy_data_openpyxl(row_cells)
else:
first_round = True
book = xlrd.open_workbook(file_contents=file_content)
sh = book.sheet_by_index(0)
for rx in range(1, sh.nrows):
row = sh.row(rx)
if self.selection_bank == 'gs':
if first_round:
first_round = False
continue
if self.selection_bank == 'js':
self.property_bank_statements_jh_data(row)
elif self.selection_bank == 'sh':
self.property_bank_statements_sh_data(row)
elif self.selection_bank == 'ms':
self.property_bank_statements_ms_data(row)
elif self.selection_bank == 'gs':
self.property_bank_statements_gc_data(row)
# elif self.selection_bank == 'xy':
# self.property_bank_statements_xy_data(row)
count_after = self.env['property.bank.statements'].search_count([])
_logger.info('[银行流水导入] 银行=%s 导入前总条数=%d 导入后总条数=%d 新增=%d', self.selection_bank, count_before, count_after, count_after - count_before)
@@ -465,6 +465,76 @@ class PropertyStatementsWizard(models.Model):
# if not existing_record:
# self.env['property.bank.statements'].create(bank_data)
def property_bank_statements_xy_data_openpyxl(self, row):
"""工商银行(兴源)openpyxl版本解析,row为元组,列结构:
0:交易时间, 1:对方单位, 2:摘要, 4:转入金额(贷时取), 7:借贷标志,
8:发生额(借时取), 9:对方账号, 16:本方账号, 22:对方行名, 31:顺序号
"""
def get_val(idx):
v = row[idx] if len(row) > idx and row[idx] is not None else ''
return str(v).strip()
time_val = get_val(0)
if time_val and time_val != 'None':
try:
start_time = datetime.strptime(time_val, '%Y-%m-%d %H:%M:%S')
except Exception:
start_time = None
else:
start_time = None
direction_val = get_val(7)
if direction_val == '贷':
lending_direction = 'loan'
amount_str = get_val(4).replace(',', '') # E列:转入金额
elif direction_val == '借':
lending_direction = 'borrow'
amount_str = get_val(8).replace(',', '') # I列:发生额
else:
return
try:
original_amount = float(amount_str)
except Exception:
return
if not original_amount:
return
name = get_val(9) # 对方账号
name_account = get_val(1) # 对方单位
remake = get_val(2) # 摘要
bank_branch = get_val(22) # 对方行名
your_own_account = get_val(16)
serial_number = get_val(31) # 顺序号
your_own_unit = self.classify_by_last_four(your_own_account)
company_id = self._get_company_by_unit(your_own_unit)
if not company_id:
return
dedup_key = serial_number if serial_number and serial_number != '0' else (time_val + name)
existing_record = self.env['property.bank.statements'].search(
[('serial_number', '=', dedup_key)], limit=1
)
bank_data = {
'name': name,
'name_account': name_account,
'serial_number': dedup_key,
'your_own_account': your_own_account,
'your_own_unit': your_own_unit,
'bank_branch': bank_branch,
'original_amount': original_amount,
'lending_direction': lending_direction,
'start_time': start_time - timedelta(hours=8) if start_time else False,
'remake': remake,
'company_id': company_id.id,
'bank_state': 'not_reconciled',
}
if not existing_record:
self.env['property.bank.statements'].create(bank_data)
else:
existing_record.write(bank_data)
def _get_company_by_unit(self, unit_name):
"""根据简称匹配 yuthon.property.company 配置,再匹配 res.company"""
if not unit_name: