提交 26212651 authored 作者: 贺阳's avatar 贺阳

Merge branch 'develop' into feature/PDA扫码揽收

# Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -29,9 +29,9 @@ class CcPackageGood(models.Model):
bl_id = fields.Many2one('cc.bl')
# 按item_id,唯一
_sql_constraints = [
('item_id_uniq', 'unique(item_id)', 'The Item ID must be unique.')
]
# _sql_constraints = [
# ('item_id_uniq', 'unique(item_id)', 'The Item ID must be unique.')
# ]
item_id = fields.Char(string='Item ID', index=True)
# SKU标识ID
......
......@@ -35,9 +35,9 @@ class CcHistoryShipPackage(models.Model):
logistic_order_no = fields.Char(string='Logistic Order No', index=True)
# 按logistic_order_no,唯一
_sql_constraints = [
('logistic_order_no_uniq', 'unique(logistic_order_no)', 'The Logistic Order No must be unique.')
]
# _sql_constraints = [
# ('logistic_order_no_uniq', 'unique(logistic_order_no)', 'The Logistic Order No must be unique.')
# ]
# 运单号(面单号)
tracking_no = fields.Char(string='Tracking No', index=True) # 对应面单号
......@@ -177,3 +177,5 @@ class CcHistoryShipPackage(models.Model):
# 增加同步日志纪录字段
sync_log_ids = fields.One2many('cc.history.package.sync.log', 'package_id', 'Sync Logs')
# 消费者地址
receiver_detailed_address = fields.Char(string='Detailed Address', index=True)
......@@ -3,6 +3,7 @@
import logging
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
......@@ -11,6 +12,7 @@ class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
before_min = fields.Integer('清关时间取值(早于清关结束)')
package_scan_min = fields.Integer('一键全扫完成时间(min)', help='输入示范:10,即表示在10分钟内大包时间随机分配,并不能重复')
@api.model
def get_values(self):
......@@ -21,9 +23,11 @@ class ResConfigSettings(models.TransientModel):
values = super(ResConfigSettings, self).get_values()
config = self.env['ir.config_parameter'].sudo()
before_min = config.get_param('before_min', default=10)
package_scan_min = config.get_param('package_scan_min', default=10)
values.update(
before_min=before_min,
package_scan_min=package_scan_min,
)
return values
......@@ -31,3 +35,4 @@ class ResConfigSettings(models.TransientModel):
super(ResConfigSettings, self).set_values()
ir_config = self.env['ir.config_parameter'].sudo()
ir_config.set_param("before_min", self.before_min or 10)
ir_config.set_param("package_scan_min", self.package_scan_min or 10)
......@@ -148,7 +148,7 @@
<field name="res_model">cc.history.big.package</field>
<field name="view_mode">tree,form,pivot,graph</field>
<field name="domain">[]</field>
<field name="context">{'search_default_last_30d':1}</field>
<field name="context">{'search_default_last_30d':0}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[History Big Package] Not yet! Click the Create button in the top left corner and the sofa is yours!
......
......@@ -114,7 +114,7 @@
<field name="arch" type="xml">
<search string="Package Good">
<field name="item_name_en" string="Search"
filter_domain="['|', ('item_id', 'ilike', self)'|', ('sku_id', 'ilike', self)'|', ('item_name_en', 'ilike', self), ('item_name_cn', 'ilike', self)]"/>
filter_domain="['|', ('item_id', 'ilike', self), '|', ('sku_id', 'ilike', self), '|', ('item_name_en', 'ilike', self), ('item_name_cn', 'ilike', self)]"/>
<separator/>
<field name="item_id"/>
<field name="sku_id" string="SKU ID"/>
......
......@@ -177,6 +177,7 @@
<field name="receiver_add_1" string="ADD 1"/>
<field name="receiver_add_2" string="ADD 2"/>
<field name="receiver_add_3" string="ADD 3"/>
<field name="receiver_detailed_address"/>
</group>
</page>
<page string="Other">
......@@ -274,6 +275,7 @@
<field name="receiver_add_1"/>
<field name="receiver_add_2"/>
<field name="receiver_add_3"/>
<field name="receiver_detailed_address"/>
<field name="actual_tax_currency" string="Actual Tax Currency"/>
<field name="actual_gst" string="Actual GST"/>
<field name="actual_tax" string="Actual Tax"/>
......@@ -324,7 +326,7 @@
<field name="res_model">cc.history.ship.package</field>
<field name="view_mode">tree,form,search,pivot,graph</field>
<field name="domain">[]</field>
<field name="context">{'search_default_last_30d':1}</field>
<field name="context">{'search_default_last_30d':0}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[History Ship Package] Not yet! Click the Create button in the top left corner and the sofa is yours!
......
......@@ -114,7 +114,7 @@
<field name="arch" type="xml">
<search string="Package Good">
<field name="item_name_en" string="Search"
filter_domain="['|', ('item_id', 'ilike', self)'|', ('sku_id', 'ilike', self)'|', ('item_name_en', 'ilike', self), ('item_name_cn', 'ilike', self)]"/>
filter_domain="['|', ('item_id', 'ilike', self), '|', ('sku_id', 'ilike', self), '|', ('item_name_en', 'ilike', self), ('item_name_cn', 'ilike', self)]"/>
<separator/>
<field name="item_id" string="Item ID"/>
<field name="sku_id" string="SKU ID"/>
......
......@@ -95,7 +95,7 @@
<field name="res_model">history.tt.api.log</field>
<field name="view_mode">tree,form,search</field>
<field name="domain">[]</field>
<field name="context">{'search_default_last_30d':1}</field>
<field name="context">{'search_default_last_30d':0}</field>
</record>
......
......@@ -21,6 +21,20 @@
</div>
</div>
</div>
<div>
<h2>pda扫码配置</h2>
<div class="row mt16 o_settings_container" id="pda_scan">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<div class="text-muted">
<label for="package_scan_min"/>
<field name="package_scan_min"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
......
......@@ -89,6 +89,7 @@ class OrderController(http.Controller):
if bl_obj:
if bl_obj.state in state_arr:
res['bl_info'] = bl_obj.search_bl_info(pda_lang=pda_lang, type=action_type)
res['package_scan_min'] = int(request.env['res.config.settings'].sudo().get_values().get('package_scan_min'))
res['state'] = 200
else:
res['message'] = bill_state_msg_dic[pda_lang] # 没有在系统中找到未完成清关的该提单信息
......
......@@ -437,26 +437,30 @@ class Order_dispose(object):
pd.read_sql(update_sql, con=db_handle, chunksize=100)
if origin_delete:
# print('delete data')
if origin_big_ids: # 删除原大包
ids = '(%s)' % str(origin_big_ids)[1:-1]
delete_big_sql = 'delete from cc_big_package where id in %s' % ids
pd.read_sql(delete_big_sql, con=db_handle, chunksize=100)
if origin_ship_ids: # 删除原小包
ids = '(%s)' % str(origin_ship_ids)[1:-1]
delete_package_sql = 'delete from cc_ship_package where id in %s' % ids
pd.read_sql(delete_package_sql, con=db_handle, chunksize=100)
if origin_goods_ids: # 删除原小包商品
ids = '(%s)' % str(origin_goods_ids)[1:-1]
delete_goods_sql = 'delete from cc_package_good where id in %s' % ids
pd.read_sql(delete_goods_sql, con=db_handle, chunksize=100)
if origin_log_ids: # 删除原小包同步日志
ids = '(%s)' % str(origin_log_ids)[1:-1]
delete_log_sql = 'delete from cc_ship_package_sync_log where id in %s' % ids
pd.read_sql(delete_log_sql, con=db_handle, chunksize=100)
if origin_goods_ids: # 删除原小包商品
ids = '(%s)' % str(origin_goods_ids)[1:-1]
delete_goods_sql = 'delete from cc_package_good where id in %s' % ids
pd.read_sql(delete_goods_sql, con=db_handle, chunksize=100)
if origin_ship_ids: # 删除原小包
ids = '(%s)' % str(origin_ship_ids)[1:-1]
delete_package_sql = 'delete from cc_ship_package where id in %s' % ids
pd.read_sql(delete_package_sql, con=db_handle, chunksize=100)
if origin_big_ids: # 删除原大包
ids = '(%s)' % str(origin_big_ids)[1:-1]
delete_big_sql = 'delete from cc_big_package where id in %s' % ids
pd.read_sql(delete_big_sql, con=db_handle, chunksize=100)
logging.info(f'同步提单:{select_bl_no},删除大包{len(origin_big_ids)}个,删除小包{len(origin_ship_ids)}个,删除小包商品{len(origin_goods_ids)}个,删除小包同步日志{len(origin_log_ids)}条')
logging.info(f'提单{select_bl_no}同步完成')
# tk日志
origin_tk_log_ids = self.history_ao_tt_log(db_handle, past_date, limit_log_num)
if origin_delete and origin_tk_log_ids:
log_ids = '(%s)' % str(origin_tk_log_ids)[1:-1]
delete_api_log_sql = 'delete from ao_tt_api_log where id in %s' % log_ids
pd.read_sql(delete_api_log_sql, con=db_handle, chunksize=100)
logging.info(f'同步日志完成,删除tk日志:{len(origin_tk_log_ids)}个')
logging.info('同步完成')
except Exception as ex:
......@@ -502,12 +506,14 @@ class Order_dispose(object):
val_df = pd.DataFrame(big_package_arr)
val_df.to_sql('cc_history_big_package', con=db_handle, if_exists='append', index=False)
#
big_ids_str = '(%s)' % str(origin_big_ids)[1:-1]
sql = 'select id,origin_id from cc_history_big_package where origin_id in %s' % big_ids_str
new_order_arr = pd.read_sql(sql, con=db_handle)
result_dict = {}
for new_order_data in new_order_arr.itertuples():
result_dict[new_order_data.origin_id] = new_order_data.id
if origin_big_ids:
big_ids_str = '(%s)' % str(origin_big_ids)[1:-1]
sql = 'select id,origin_id from cc_history_big_package where origin_id in %s' % big_ids_str
new_order_arr = pd.read_sql(sql, con=db_handle)
for new_order_data in new_order_arr.itertuples():
result_dict[new_order_data.origin_id] = new_order_data.id
# logging.info("new_order:%s" % len(new_order))
if result_dict:
# 大包的异常信息处理
......@@ -541,7 +547,7 @@ class Order_dispose(object):
'customer_id': ship_package_data.customer_id,
'origin_id': ship_package_data.id,
'bl_id': ship_package_data.bl_id,
'big_package_id': big_dict.get(ship_package_data.id),
'big_package_id': big_dict.get(ship_package_data.big_package_id),
'logistic_order_no': ship_package_data.logistic_order_no,
'tracking_no': ship_package_data.tracking_no,
'customer_ref': ship_package_data.customer_ref,
......@@ -594,6 +600,7 @@ class Order_dispose(object):
'node_exception_reason_id': ship_package_data.node_exception_reason_id,
'process_time': ship_package_data.process_time,
'cancel_reason': ship_package_data.cancel_reason,
'receiver_detailed_address': ship_package_data.receiver_detailed_address,
# 'exception_info_ids': ship_package_obj.exception_info_ids,ship_package_data.id
# 'invoice_attachment_ids': ship_package_obj.invoice_attachment_ids,ship_package_data.id
......@@ -611,13 +618,14 @@ class Order_dispose(object):
if history_ship_package_vals_arr:
val_df = pd.DataFrame(history_ship_package_vals_arr)
val_df.to_sql('cc_history_ship_package', con=db_handle, if_exists='append', index=False)
ship_ids_str = '(%s)' % str(origin_ship_ids)[1:-1]
sql = 'select id,origin_id from cc_history_ship_package where origin_id in %s' % ship_ids_str
new_order_arr = pd.read_sql(sql, con=db_handle)
result_dict = {}
for new_order_data in new_order_arr.itertuples():
result_dict[new_order_data.origin_id] = new_order_data.id
if origin_ship_ids:
ship_ids_str = '(%s)' % str(origin_ship_ids)[1:-1]
sql = 'select id,origin_id from cc_history_ship_package where origin_id in %s' % ship_ids_str
new_order_arr = pd.read_sql(sql, con=db_handle)
for new_order_data in new_order_arr.itertuples():
result_dict[new_order_data.origin_id] = new_order_data.id
# 小包的异常信息处理
if result_dict:
......@@ -656,27 +664,29 @@ class Order_dispose(object):
:param package_dict: 原来小包数据
:return:
"""
ids = '(%s)' % str(origin_ship_ids)[1:-1]
sync_sql = "SELECT id, package_id, sync_time, api_customer, process_code, operate_time, operate_remark, operate_user FROM cc_ship_package_sync_log WHERE package_id in %s;" % ids
sync_log_result_arr = pd.read_sql(sync_sql, con=db_handle)
sync_log_vals_list = []
for sync_log_result in sync_log_result_arr.itertuples():
sync_log_data = sync_log_result
# 创建历史小包日志数据
sync_log_vals = {
'package_id': package_dict.get(sync_log_data.package_id, None),
'sync_time': sync_log_data.sync_time,
'api_customer': sync_log_data.api_customer,
'process_code': sync_log_data.process_code,
'operate_time': sync_log_data.operate_time,
'operate_remark': sync_log_data.operate_remark,
'operate_user': sync_log_data.operate_user,
}
sync_log_vals_list.append(sync_log_vals)
if sync_log_vals_list:
val_df = pd.DataFrame(sync_log_vals_list)
val_df.to_sql('cc_history_package_sync_log', con=db_handle, if_exists='append', index=False)
origin_log_ids = sync_log_result_arr['id'].tolist()
origin_log_ids = []
if origin_ship_ids:
ids = '(%s)' % str(origin_ship_ids)[1:-1]
sync_sql = "SELECT id, package_id, sync_time, api_customer, process_code, operate_time, operate_remark, operate_user FROM cc_ship_package_sync_log WHERE package_id in %s;" % ids
sync_log_result_arr = pd.read_sql(sync_sql, con=db_handle)
sync_log_vals_list = []
for sync_log_result in sync_log_result_arr.itertuples():
sync_log_data = sync_log_result
# 创建历史小包日志数据
sync_log_vals = {
'package_id': package_dict.get(sync_log_data.package_id, None),
'sync_time': sync_log_data.sync_time,
'api_customer': sync_log_data.api_customer,
'process_code': sync_log_data.process_code,
'operate_time': sync_log_data.operate_time,
'operate_remark': sync_log_data.operate_remark,
'operate_user': sync_log_data.operate_user,
}
sync_log_vals_list.append(sync_log_vals)
if sync_log_vals_list:
val_df = pd.DataFrame(sync_log_vals_list)
val_df.to_sql('cc_history_package_sync_log', con=db_handle, if_exists='append', index=False)
origin_log_ids = sync_log_result_arr['id'].tolist()
return origin_log_ids
def batch_history_package_goods(self, db_handle, package_dict, origin_ship_ids, big_dict):
......@@ -689,58 +699,60 @@ class Order_dispose(object):
:return:
"""
# 商品
ids = '(%s)' % str(origin_ship_ids)[1:-1]
package_good_sql = """select id, bl_line_id, big_package_id, bl_id, item_id, sku_id,
item_name_cn, item_name_en, export_hs_code, import_hs_code, weight,
quantity, quantity_unit, declare_price, freight, cod_amount, vat_rate,
item_vat, origin_country, item_type, item_total_price, item_link,
item_tax_status, actual_tax, actual_tax_rate, actual_tax_currency,
actual_vat, actual_vat_rate, actual_gst, actual_gst_rate, currency_id,
is_cancel from cc_package_good where bl_line_id in %s;""" % ids
package_good_result_arr = pd.read_sql(package_good_sql, con=db_handle)
# origin_goods_ids = []
package_good_vals_list = []
for package_good_data in package_good_result_arr.itertuples():
# 创建历史小包商品数据
package_good_vals = {
'origin_id': package_good_data.id,
'bl_line_id': package_dict.get(package_good_data.bl_line_id, None),
'big_package_id': big_dict.get(package_good_data.big_package_id, None),
'bl_id': package_good_data.bl_id,
'item_id': package_good_data.item_id,
'sku_id': package_good_data.sku_id,
'item_name_cn': package_good_data.item_name_cn,
'item_name_en': package_good_data.item_name_en,
'export_hs_code': package_good_data.export_hs_code,
'import_hs_code': package_good_data.import_hs_code,
'weight': package_good_data.weight,
'quantity': package_good_data.quantity,
'quantity_unit': package_good_data.quantity_unit,
'declare_price': package_good_data.declare_price,
'freight': package_good_data.freight,
'cod_amount': package_good_data.cod_amount,
'vat_rate': package_good_data.vat_rate,
'item_vat': package_good_data.item_vat,
'origin_country': package_good_data.origin_country,
'item_type': package_good_data.item_type,
'item_total_price': package_good_data.item_total_price,
'item_link': package_good_data.item_link,
'item_tax_status': package_good_data.item_tax_status,
'actual_tax': package_good_data.actual_tax,
'actual_tax_rate': package_good_data.actual_tax_rate,
'actual_tax_currency': package_good_data.actual_tax_currency,
'actual_vat': package_good_data.actual_vat,
'actual_vat_rate': package_good_data.actual_vat_rate,
'actual_gst': package_good_data.actual_gst,
'actual_gst_rate': package_good_data.actual_gst_rate,
'currency_id': package_good_data.currency_id,
'is_cancel': package_good_data.is_cancel,
}
package_good_vals_list.append(package_good_vals)
if package_good_vals_list:
val_df = pd.DataFrame(package_good_vals_list)
val_df.to_sql('cc_history_package_good', con=db_handle, if_exists='append', index=False)
origin_goods_ids = package_good_result_arr['id'].tolist()
origin_goods_ids = []
if origin_ship_ids:
ids = '(%s)' % str(origin_ship_ids)[1:-1]
package_good_sql = """select id, bl_line_id, big_package_id, bl_id, item_id, sku_id,
item_name_cn, item_name_en, export_hs_code, import_hs_code, weight,
quantity, quantity_unit, declare_price, freight, cod_amount, vat_rate,
item_vat, origin_country, item_type, item_total_price, item_link,
item_tax_status, actual_tax, actual_tax_rate, actual_tax_currency,
actual_vat, actual_vat_rate, actual_gst, actual_gst_rate, currency_id,
is_cancel from cc_package_good where bl_line_id in %s;""" % ids
package_good_result_arr = pd.read_sql(package_good_sql, con=db_handle)
# origin_goods_ids = []
package_good_vals_list = []
for package_good_data in package_good_result_arr.itertuples():
# 创建历史小包商品数据
package_good_vals = {
'origin_id': package_good_data.id,
'bl_line_id': package_dict.get(package_good_data.bl_line_id, None),
'big_package_id': big_dict.get(package_good_data.big_package_id, None),
'bl_id': package_good_data.bl_id,
'item_id': package_good_data.item_id,
'sku_id': package_good_data.sku_id,
'item_name_cn': package_good_data.item_name_cn,
'item_name_en': package_good_data.item_name_en,
'export_hs_code': package_good_data.export_hs_code,
'import_hs_code': package_good_data.import_hs_code,
'weight': package_good_data.weight,
'quantity': package_good_data.quantity,
'quantity_unit': package_good_data.quantity_unit,
'declare_price': package_good_data.declare_price,
'freight': package_good_data.freight,
'cod_amount': package_good_data.cod_amount,
'vat_rate': package_good_data.vat_rate,
'item_vat': package_good_data.item_vat,
'origin_country': package_good_data.origin_country,
'item_type': package_good_data.item_type,
'item_total_price': package_good_data.item_total_price,
'item_link': package_good_data.item_link,
'item_tax_status': package_good_data.item_tax_status,
'actual_tax': package_good_data.actual_tax,
'actual_tax_rate': package_good_data.actual_tax_rate,
'actual_tax_currency': package_good_data.actual_tax_currency,
'actual_vat': package_good_data.actual_vat,
'actual_vat_rate': package_good_data.actual_vat_rate,
'actual_gst': package_good_data.actual_gst,
'actual_gst_rate': package_good_data.actual_gst_rate,
'currency_id': package_good_data.currency_id,
'is_cancel': package_good_data.is_cancel,
}
package_good_vals_list.append(package_good_vals)
if package_good_vals_list:
val_df = pd.DataFrame(package_good_vals_list)
val_df.to_sql('cc_history_package_good', con=db_handle, if_exists='append', index=False)
origin_goods_ids = package_good_result_arr['id'].tolist()
return origin_goods_ids
try:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论