提交 48082121 authored 作者: 郑笛's avatar 郑笛

队列

上级 50fbbe32
...@@ -5,4 +5,5 @@ from . import cc_customs_declaration_order ...@@ -5,4 +5,5 @@ from . import cc_customs_declaration_order
from . import cc_node_exception_reason from . import cc_node_exception_reason
from . import mail_thread from . import mail_thread
from . import common_common from . import common_common
from . import redis_connection
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime import datetime
import re import re
from .redis_connection import redis_connection
from odoo import fields, models, exceptions, api, tools from odoo import fields, models, exceptions, api, tools
import logging import logging
__author__ = 'zd' __author__ = 'zd'
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
r = redis_connection()
class CommonCommon(models.Model): class CommonCommon(models.Model):
...@@ -22,3 +25,10 @@ class CommonCommon(models.Model): ...@@ -22,3 +25,10 @@ class CommonCommon(models.Model):
d = dt + datetime.timedelta(hours=8) d = dt + datetime.timedelta(hours=8)
nTime = d.strftime("%Y-%m-%d %H:%M:%S") nTime = d.strftime("%Y-%m-%d %H:%M:%S")
return nTime return nTime
def get_redis(self):
"""
连接redis
:return:
"""
return r
# -*- coding: utf-8 -*-
from odoo.tools import config
import redis
import logging
_logger = logging.getLogger(__name__)
def redis_connection():
# 连接redis
redis_config = config.misc.get("redis", {})
if redis_config:
try:
redis_options = dict(
host=redis_config.get('redis_host'),
port=redis_config.get('redis_port'),
password=redis_config.get('password'),
decode_responses=True,
db=redis_config.get('db'),
)
pool = redis.ConnectionPool(**redis_options)
r = redis.Redis(connection_pool=pool)
return r
except Exception as e:
_logger.error(u'连接redis失败,原因:%s' % str(e))
return 'no'
else:
_logger.error(u'conf文件中未配置redis连接信息')
return 'no'
...@@ -22,6 +22,11 @@ msgstr "" ...@@ -22,6 +22,11 @@ msgstr ""
msgid "<span class=\"o_stat_text\">Not Sync Ship Packages</span>" msgid "<span class=\"o_stat_text\">Not Sync Ship Packages</span>"
msgstr "<span class=\"o_stat_text\">待同步小包</span>" msgstr "<span class=\"o_stat_text\">待同步小包</span>"
#. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "<span class=\"o_stat_text\">Wait Sync Ship Packages</span>"
msgstr "<span class=\"o_stat_text\">等待同步小包</span>"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "<span class=\"o_stat_text\">Ship Packages</span>" msgid "<span class=\"o_stat_text\">Ship Packages</span>"
...@@ -174,6 +179,13 @@ msgstr "未同步" ...@@ -174,6 +179,13 @@ msgstr "未同步"
msgid "Not Sync Ship Packages" msgid "Not Sync Ship Packages"
msgstr "待同步小包" msgstr "待同步小包"
#. module: ccs_connect_tiktok
#. odoo-python
#: code:addons/ccs_connect_tiktok/models/cc_bill_loading.py:0
#, python-format
msgid "Wait Sync Ship Packages"
msgstr "等待同步小包"
#. module: ccs_connect_tiktok #. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__operate_remark #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package_sync_log__operate_remark
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_ship_package_sync_log_view #: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_ship_package_sync_log_view
...@@ -388,3 +400,14 @@ msgstr "" ...@@ -388,3 +400,14 @@ msgstr ""
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__request_id #: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__request_id
msgid "请求id" msgid "请求id"
msgstr "" msgstr ""
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_ship_package__wait_sync
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.search_cc_ship_package_view_inherit
msgid "Wait Sync"
msgstr "等待同步"
#. module: ccs_connect_tiktok
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_cc_bl__waitsync_package_count
msgid "Waitsync Package Count"
msgstr "等待同步小包数"
import base64 import base64
import json import json
import logging import logging
import time
import pytz import pytz
from datetime import datetime from datetime import datetime
from lxml import etree from lxml import etree
...@@ -124,6 +126,7 @@ class CcShipPackage(models.Model): ...@@ -124,6 +126,7 @@ class CcShipPackage(models.Model):
_inherit = "cc.ship.package" _inherit = "cc.ship.package"
is_sync = fields.Boolean('Is Sync', default=False) is_sync = fields.Boolean('Is Sync', default=False)
wait_sync = fields.Boolean('Wait Sync', default=False) # 等待同步
tk_code = fields.Char(related='state.tk_code', store=True, string='TK Code', help='TK Code') tk_code = fields.Char(related='state.tk_code', store=True, string='TK Code', help='TK Code')
# 增加同步日志纪录字段 # 增加同步日志纪录字段
...@@ -181,35 +184,65 @@ class CcShipPackage(models.Model): ...@@ -181,35 +184,65 @@ class CcShipPackage(models.Model):
if not self.is_sync and self.state and self.state.tk_code: if not self.is_sync and self.state and self.state.tk_code:
data = self.get_callback_track_data() data = self.get_callback_track_data()
if is_push: if is_push:
# 连接redis
redis_conn = self.env['common.common'].sudo().get_redis()
if redis_conn == 'no':
raise ValidationError('请先配置redis')
tt_api_obj = self.env["ao.tt.api"].sudo() tt_api_obj = self.env["ao.tt.api"].sudo()
response = tt_api_obj.callback_track(data) timestamp = int(time.time())
response_data = response.json() sign = tt_api_obj.generate_sign(timestamp, data)
if response_data['code'] != 0: app_key = self.env["ir.config_parameter"].sudo().get_param('tt_app_key') or ''
self.is_sync = False version = self.env["ir.config_parameter"].sudo().get_param('tt_version') or '3.0'
self._cr.commit() tt_url = self.env["ir.config_parameter"].sudo().get_param('tt_url') or ''
error_msg = response_data['msg'] vals = {
request_id = response_data['requestID'] 'action': 'post',
code = response_data['code'] 'url': tt_url + '/logistics/provider/cross_border/callback_track?country=GB',
self.env['ao.tt.api.log'].sudo().create_api_log(self.tracking_no or '', 'data': data,
'小包状态轨迹回传:' + error_msg, 'sign': sign,
data, 'timestamp': timestamp,
code, 'version': version,
request_id, source='推出') 'app_key': app_key,
'ship_package_info': {
return error_msg 'id': self.id,
else: 'tracking_no': self.tracking_no or '',
# 回传成功 'tk_code': self.state.tk_code,
self.is_sync = True 'state_explain': self.state_explain or '',
self.env['cc.ship.package.sync.log'].sudo().create_sync_log(self.id, 'Tiktok', self.state.tk_code, 'process_time': self.process_time.strftime('%Y-%m-%d %H:%M:%S'),
self.state_explain, 'create_user_id': self.env.user.id,
self.process_time.strftime( },
'%Y-%m-%d %H:%M:%S')) }
self.wait_sync = True
self._cr.commit() self._cr.commit()
request_id = response_data['requestID'] redis_conn.lpush('package_track_list', json.dumps(vals))
self.env['ao.tt.api.log'].sudo().create_api_log(self.tracking_no or '', '', data, 0, request_id, # tt_api_obj = self.env["ao.tt.api"].sudo()
source='推出') # response = tt_api_obj.callback_track(data)
# response_data = response.json()
return '' # if response_data['code'] != 0:
# self.is_sync = False
# self._cr.commit()
# error_msg = response_data['msg']
# request_id = response_data['requestID']
# code = response_data['code']
# self.env['ao.tt.api.log'].sudo().create_api_log(self.tracking_no or '',
# '小包状态轨迹回传:' + error_msg,
# data,
# code,
# request_id, source='推出')
#
# return error_msg
# else:
# # 回传成功
# self.is_sync = True
# self.env['cc.ship.package.sync.log'].sudo().create_sync_log(self.id, 'Tiktok', self.state.tk_code,
# self.state_explain,
# self.process_time.strftime(
# '%Y-%m-%d %H:%M:%S'))
# self._cr.commit()
# request_id = response_data['requestID']
# self.env['ao.tt.api.log'].sudo().create_api_log(self.tracking_no or '', '', data, 0, request_id,
# source='推出')
#
# return ''
else: else:
self.is_sync = True self.is_sync = True
self.env['cc.ship.package.sync.log'].sudo().create_sync_log(self.id, 'Tiktok', self.state.tk_code, self.env['cc.ship.package.sync.log'].sudo().create_sync_log(self.id, 'Tiktok', self.state.tk_code,
...@@ -229,8 +262,10 @@ class CcBl(models.Model): ...@@ -229,8 +262,10 @@ class CcBl(models.Model):
# 增加未同步小包数量字段 # 增加未同步小包数量字段
unsync_package_count = fields.Integer('Unsync Package Count', compute='_compute_unsync_package_count') unsync_package_count = fields.Integer('Unsync Package Count', compute='_compute_unsync_package_count')
# 增加等待同步小包数量字段
waitsync_package_count = fields.Integer('Waitsync Package Count', compute='_compute_unsync_package_count')
# 计算未同步小包数量 # 计算未同步小包数量,等待同步小包数量
@api.depends('ship_package_ids') @api.depends('ship_package_ids')
def _compute_unsync_package_count(self): def _compute_unsync_package_count(self):
for record in self: for record in self:
...@@ -239,11 +274,14 @@ class CcBl(models.Model): ...@@ -239,11 +274,14 @@ class CcBl(models.Model):
record.unsync_package_count = len(record_counts) record.unsync_package_count = len(record_counts)
else: else:
record.unsync_package_count = 0 record.unsync_package_count = 0
wait_sync_counts = record.ship_package_ids.filtered(lambda r: r.wait_sync)
record.waitsync_package_count = len(wait_sync_counts)
# 定义一个方法, 获取提单下的所有未同步的小包,并回传小包状态 # 定义一个方法, 获取提单下的所有未同步的小包,并回传小包状态
def callback_track(self): def callback_track(self):
for item in self: for item in self:
ship_packages = self.env['cc.ship.package'].search([('bl_id', '=', item.id), ('is_sync', '=', False)]) ship_packages = self.env['cc.ship.package'].search([
('bl_id', '=', item.id), ('is_sync', '=', False), ('wait_sync', '=', False)])
for package in ship_packages: for package in ship_packages:
package.callback_track() package.callback_track()
return True return True
...@@ -274,6 +312,17 @@ class CcBl(models.Model): ...@@ -274,6 +312,17 @@ class CcBl(models.Model):
'domain': [('bl_id', '=', self.id), ('is_sync', '=', False)], 'domain': [('bl_id', '=', self.id), ('is_sync', '=', False)],
} }
# 创建显示包裹的action
def action_show_wait_sync_ship_package(self):
# 返回一个action,显示包裹
return {
'name': _('Wait Sync Ship Packages'),
'type': 'ir.actions.act_window',
'res_model': 'cc.ship.package',
'view_mode': 'tree,form',
'domain': [('bl_id', '=', self.id), ('wait_sync', '=', True)],
}
def search_bl_info(self, pda_lang=False): def search_bl_info(self, pda_lang=False):
""" """
查询提单信息 查询提单信息
......
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
<field name="inherit_id" ref="ccs_base.form_cc_bl_view"/> <field name="inherit_id" ref="ccs_base.form_cc_bl_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<!-- # header之间增加一个按钮,调用自定义的方法--> <!-- # header之间增加一个按钮,调用自定义的方法-->
<xpath expr="//button[@name='%(ccs_base.action_batch_input_ship_package_wizard)d']" position="attributes">
<attribute name="attrs">{'invisible': [('waitsync_package_count', '>', 0)]}</attribute>
</xpath>
<header position="inside"> <header position="inside">
<button name="callback_track" string="Sync Package Status" type="object"/> <button name="callback_track" string="Sync Package Status" type="object"/>
<button name="batch_action_sync" string="Sync CC Attachment" type="object"/> <button name="batch_action_sync" string="Sync CC Attachment" type="object"/>
...@@ -44,6 +47,13 @@ ...@@ -44,6 +47,13 @@
<span class="o_stat_text">Not Sync Ship Packages</span> <span class="o_stat_text">Not Sync Ship Packages</span>
</div> </div>
</button> </button>
<button name="action_show_wait_sync_ship_package" type="object"
class="oe_stat_button" icon="fa-circle-o-notch">
<div class="o_stat_info">
<field name="waitsync_package_count" widget="badge" decoration-danger="1 == 1"/>
<span class="o_stat_text">Wait Sync Ship Packages</span>
</div>
</button>
</button> </button>
</field> </field>
</record> </record>
...@@ -57,7 +67,7 @@ ...@@ -57,7 +67,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="state" position="after"> <field name="state" position="after">
<field name="is_sync"/> <field name="is_sync"/>
<field name="wait_sync"/>
</field> </field>
<tree position="attributes"> <tree position="attributes">
...@@ -74,6 +84,7 @@ ...@@ -74,6 +84,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search position="inside"> <search position="inside">
<filter string="Not Sync" name="filter_is_sync" domain="[('is_sync','=',False)]"/> <filter string="Not Sync" name="filter_is_sync" domain="[('is_sync','=',False)]"/>
<filter string="Wait Sync" name="filter_wait_sync" domain="[('wait_sync','=',True)]"/>
</search> </search>
</field> </field>
</record> </record>
......
# coding=utf-8
# 本地
# db_ip = "127.0.0.1"
# db_port = "8066"
# db_name = "ao"
# db_user = "admin"
# db_password = "123"
#
redis_options = dict(
host='127.0.0.1',
port=6379,
# password='topodoo1314',
decode_responses=True,
db=0
)
postgresql_options = dict(
host="127.0.0.1",
port=5432,
database="hh_ccs",
user="odoo",
password="odoo",
)
# 测试
# db_ip = "121.199.167.133"
# db_port = "8369"
# db_name = "airorder0309"
# db_user = "admin"
# db_password = "123123"
#
# redis_options = dict(
# host='172.18.0.6',
# port=6379,
# # password='top123',
# decode_responses=True,
# db=3
# )
# postgresql_options = dict(
# host="172.18.0.2",
# port=5432,
# database="airorder0309",
# user="ao",
# password="ao",
# )
# product
# db_ip = "172.18.183.214"
# db_port = "9169"
# db_name = "air_order"
# db_user = "admin"
# db_password = "YHB1408ups"
#
# redis_options = dict(
# host='172.18.183.214',
# port=32768,
# password='top123',
# decode_responses=True,
# db=3
# )
# postgresql_options = dict(
# host="pgm-wz94v126235u6syw.pg.rds.aliyuncs.com",
# port="3433",
# database="air_order",
# user="ao",
# password="ao888123../",
# )
No preview for this file type
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论