提交 1f9cdd1b authored 作者: 刘擎阳's avatar 刘擎阳

1.数据导入

上级 e35ed8ef
......@@ -20,6 +20,7 @@
# wizard
'wizard/batch_input_ship_package_statu_wizard.xml',
'wizard/update_bl_status_wizard.xml',
'wizard/excel_wizard.xml',
# 'wizard/again_push_wizard.xml',
# 'wizard/batch_push_tiktok.xml',
# view
......
......@@ -22,3 +22,4 @@ access_pda_scan_record_manager,pda.scan.record.manager,model_pda_scan_record,bas
access_bl_patrol_user,bl.patrol.user,model_bl_patrol,base.group_user,1,0,0,0
access_bl_patrol_manager,bl.patrol.manager,model_bl_patrol,base.group_system,1,1,1,1
access_package_data_wizard_base.group_user,package_data_wizard base.group_user,ccs_connect_tiktok.model_package_data_wizard,base.group_user,1,1,1,1
\ No newline at end of file
......@@ -5,3 +5,4 @@ from . import batch_input_ship_package_statu_wizard
from . import update_bl_status_wizard
from . import batch_get_pod_info_wizard
from . import excel_wizard
# 文件:wizards/collection_receive_wizard.py
import xlrd
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from datetime import date, datetime
import logging
_logger = logging.getLogger(__name__)
class PackageDataWizard(models.TransientModel):
_name = 'package.data.wizard'
_description = '包裹数据处理'
attachment_ids = fields.Many2many('ir.attachment', 'ref_package_data_attachment', string='附件')
node_id = fields.Many2one('cc.node', string='变更状态')
def get_file_path(self, report_file_ids):
"""
得到excel表格的内容
:return:
"""
report_path = report_file_ids._full_path(report_file_ids.store_fname)
if report_file_ids.name[-3:] == 'xls':
data = xlrd.open_workbook(report_path, formatting_info=True)
else:
data = xlrd.open_workbook(report_path)
return data
def submit(self):
for attachment_obj in self.attachment_ids:
data = self.get_file_path(attachment_obj)
first_table = data.sheets()[0]
try:
if self.node_id.name == '待尾程提货':
select_node_obj = self.env['cc.node'].sudo().search([('node_type', '=', 'package'),
('name', '=', '已提货')],
limit=1)
else:
select_node_obj = self.env['cc.node'].sudo().search([('node_type', '=', 'package'),
('name', '=', '待尾程提货')],
limit=1)
# 新增:定义一个累加器,记录整个 Excel 总共更新了多少个小包
total_updated_count = 0
for i in range(1, first_table.nrows):
line = first_table.row_values(i)
big_no = str(line[0]).strip()
if not big_no:
continue
lh_time = line[9]
wj_time = line[4]
update_time = lh_time if self.node_id.name == '待尾程提货' else wj_time
ship_package_objs = self.env['cc.ship.package'].sudo().search([
('big_package_no', '=', big_no),
('state', '=', select_node_obj.id)
]) # 已提货
if ship_package_objs:
# 核心修改:计算当前大包查到的小包数量
current_count = len(ship_package_objs)
total_updated_count += current_count # 累加到总数
# 日志记录:每个大包具体查到了多少个小包
_logger.info(f"处理第 {i} 行: 大包号 [{big_no}] 查到 {current_count} 个小包准备更新。")
sql = """
UPDATE cc_ship_package
SET state = %s, process_time = %s , is_sync=False
WHERE id IN %s
"""
self.env.cr.execute(sql, (self.node_id.id, update_time, tuple(ship_package_objs.ids)))
else:
# 选做:把没查到数据的大包也用 warning 级别记录下来,方便后期排查漏刷的数据
_logger.warning(f"处理第 {i} 行: 大包号 [{big_no}] 未查到状态为'已提货'的小包,跳过更新。")
# 循环结束后,记录该文件的最终战果
_logger.info(f"==== 附件处理完毕 ==== 整个表格共查到并更新了 {total_updated_count} 个小包!")
except Exception as err:
_logger.error(f'package_data_xls error : {str(err)}')
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_package_data_wizard_form" model="ir.ui.view">
<field name="name">package.data.wizard.form</field>
<field name="model">package.data.wizard</field>
<field name="arch" type="xml">
<form string="包裹数据处理向导">
<group>
<group>
<field name="attachment_ids" widget="many2many_binary" string="上传Excel附件" required="1"/>
<field name="node_id" required="1" domain="[('node_type', '=', 'package'), ('name', 'in', ['待尾程提货', '尾程交接'])]" options="{'no_edit': True, 'no_create': True}"/>
</group>
</group>
<footer>
<button name="submit" string="确认处理" type="object" class="btn-primary"/>
<button string="取消" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_package_data_wizard" model="ir.actions.act_window">
<field name="name">包裹数据导入处理</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">package.data.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem id="menu_package_data_wizard"
name="导入包裹数据"
action="action_package_data_wizard" groups="base.group_system"
sequence="50"/>
</data>
</odoo>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论