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

队列

上级 50fbbe32
......@@ -5,4 +5,5 @@ from . import cc_customs_declaration_order
from . import cc_node_exception_reason
from . import mail_thread
from . import common_common
from . import redis_connection
# -*- coding: utf-8 -*-
import datetime
import re
from .redis_connection import redis_connection
from odoo import fields, models, exceptions, api, tools
import logging
__author__ = 'zd'
_logger = logging.getLogger(__name__)
r = redis_connection()
class CommonCommon(models.Model):
......@@ -22,3 +25,10 @@ class CommonCommon(models.Model):
d = dt + datetime.timedelta(hours=8)
nTime = d.strftime("%Y-%m-%d %H:%M:%S")
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 ""
msgid "<span class=\"o_stat_text\">Not Sync Ship Packages</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
#: model_terms:ir.ui.view,arch_db:ccs_connect_tiktok.form_cc_bl_view_inherit
msgid "<span class=\"o_stat_text\">Ship Packages</span>"
......@@ -174,6 +179,13 @@ msgstr "未同步"
msgid "Not Sync Ship Packages"
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
#: 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
......@@ -388,3 +400,14 @@ msgstr ""
#: model:ir.model.fields,field_description:ccs_connect_tiktok.field_ao_tt_api_log__request_id
msgid "请求id"
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 json
import logging
import time
import pytz
from datetime import datetime
from lxml import etree
......@@ -124,6 +126,7 @@ class CcShipPackage(models.Model):
_inherit = "cc.ship.package"
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')
# 增加同步日志纪录字段
......@@ -181,35 +184,65 @@ class CcShipPackage(models.Model):
if not self.is_sync and self.state and self.state.tk_code:
data = self.get_callback_track_data()
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()
response = tt_api_obj.callback_track(data)
response_data = response.json()
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'))
timestamp = int(time.time())
sign = tt_api_obj.generate_sign(timestamp, data)
app_key = self.env["ir.config_parameter"].sudo().get_param('tt_app_key') or ''
version = self.env["ir.config_parameter"].sudo().get_param('tt_version') or '3.0'
tt_url = self.env["ir.config_parameter"].sudo().get_param('tt_url') or ''
vals = {
'action': 'post',
'url': tt_url + '/logistics/provider/cross_border/callback_track?country=GB',
'data': data,
'sign': sign,
'timestamp': timestamp,
'version': version,
'app_key': app_key,
'ship_package_info': {
'id': self.id,
'tracking_no': self.tracking_no or '',
'tk_code': self.state.tk_code,
'state_explain': self.state_explain or '',
'process_time': self.process_time.strftime('%Y-%m-%d %H:%M:%S'),
'create_user_id': self.env.user.id,
},
}
self.wait_sync = True
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 ''
redis_conn.lpush('package_track_list', json.dumps(vals))
# tt_api_obj = self.env["ao.tt.api"].sudo()
# response = tt_api_obj.callback_track(data)
# response_data = response.json()
# 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:
self.is_sync = True
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):
# 增加未同步小包数量字段
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')
def _compute_unsync_package_count(self):
for record in self:
......@@ -239,11 +274,14 @@ class CcBl(models.Model):
record.unsync_package_count = len(record_counts)
else:
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):
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:
package.callback_track()
return True
......@@ -274,6 +312,17 @@ class CcBl(models.Model):
'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):
"""
查询提单信息
......
......@@ -21,6 +21,9 @@
<field name="inherit_id" ref="ccs_base.form_cc_bl_view"/>
<field name="arch" type="xml">
<!-- # 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">
<button name="callback_track" string="Sync Package Status" type="object"/>
<button name="batch_action_sync" string="Sync CC Attachment" type="object"/>
......@@ -44,6 +47,13 @@
<span class="o_stat_text">Not Sync Ship Packages</span>
</div>
</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>
</field>
</record>
......@@ -57,7 +67,7 @@
<field name="arch" type="xml">
<field name="state" position="after">
<field name="is_sync"/>
<field name="wait_sync"/>
</field>
<tree position="attributes">
......@@ -74,6 +84,7 @@
<field name="arch" type="xml">
<search position="inside">
<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>
</field>
</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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论