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

修改的接口,返回条件后台再同步包裹状态

上级 a23e78ca
......@@ -9,8 +9,9 @@
<group>
<field name="name"/> <!-- 快递名称 -->
<field name="abbreviation"/> <!-- 简称 -->
<field name="tape_color_value" required="1"/> <!-- 胶带色值 -->
<field name="matching_value" placeholder="Multiple entries can be made, one matching value per line"/> <!-- 尾程服务商匹配值 -->
<field name="tape_color_value" widget="color" required="1"/> <!-- 胶带色值 -->
<field name="matching_value"
placeholder="Multiple entries can be made, one matching value per line"/> <!-- 尾程服务商匹配值 -->
</group>
<group>
<field name="active"/> <!-- 有效☑️ -->
......
......@@ -177,8 +177,9 @@ class OrderController(http.Controller):
for package in package_obj:
ship_packages += [{
'id': ship_package,
'tally_time': tally_time} for ship_package in package.ship_package_ids
if package.tally_state == 'unprocessed_goods'] # 小包
'tally_time': tally_time} for ship_package in
package.ship_package_ids if
package.tally_state == 'unprocessed_goods'] # 小包
package_obj.update_big_package_info(action_type=action_type,
tally_state=package_item.get('tally_state'),
tally_user_id=package_item.get(
......@@ -268,21 +269,10 @@ class OrderController(http.Controller):
ship_package_ids = tuple(
ship_package_dict['id'].id for ship_package_dict in ship_packages if
ship_package_dict['id'])
ship_package_objs = request.env['cc.ship.package'].sudo().search(
[('id', 'in', ship_package_ids)])
bl_obj.package_callback_func(ship_package_objs)
# asyncio.create_task(bl_obj.package_callback_func(ship_package_objs)) # 异步执行 报错 没有什么loop
# threading.Thread(target=bl_obj.package_callback_func, args=(ship_package_objs,)).start()#方法里报错
# # 定义一个函数来在新线程中执行异步任务
# def run_async_task():
# loop = asyncio.new_event_loop() # 创建新的事件循环
# asyncio.set_event_loop(loop) # 设置事件循环
# loop.run_until_complete(bl_obj.package_callback_func(ship_package_objs)) # 运行异步函数
# loop.close() # 关闭事件循环
#
# # 创建并启动新线程
# threading.Thread(target=run_async_task).start()
# bl_obj.with_delay(description=bl_obj.bl_no).package_callback_func(ship_package_objs) # 不执行了
redis_conn = request.env['common.common'].sudo().get_redis()
if redis_conn and redis_conn != 'no':
redis_conn.lpush('push_ship_package_state', json.dumps(
{'bl_id': bl_obj.id, 'ship_package_ids': ship_package_ids}))
res['state'] = 200
else:
res['message'] = bill_noexist_msg_dic[pda_lang] # 提单不存在
......
......@@ -186,6 +186,7 @@ class CcShipPackage(models.Model):
return push_data
def callback_track(self, is_push=True):
logging.info('开始推送')
if not self.is_sync and self.state and self.state.tk_code:
data = self.get_callback_track_data()
if is_push:
......@@ -262,13 +263,14 @@ class CcBl(models.Model):
is_ok = True
for item in self:
ship_packages = self.env['cc.ship.package'].search([('bl_id', '=', item.id), ('is_sync', '=', False)])
is_ok = item.package_callback_func(ship_packages)
is_ok = item.package_callback_func(ship_packages.ids)
return is_ok
def package_callback_func(self, ship_packages):
def package_callback_func(self, ship_package_ids):
"""
同步小包状态
"""
ship_packages = self.env['cc.ship.package'].search([('id', 'in', ship_package_ids), ('is_sync', '=', False)])
is_ok = True
tt_api_obj = self.env["ao.tt.api"].sudo()
......
......@@ -2,16 +2,14 @@
# 本地
db_ip = "127.0.0.1"
db_port = "8888"
db_name = "hh_ccs_test"
db_port = "8069"
db_name = "hhccs_test"
db_user = "admin"
db_password = "admin"
redis_options = dict(
host='127.0.0.1',
port=6379,
# password='topodoo1314',
decode_responses=True,
db=0
)
......@@ -44,5 +42,3 @@ redis_options = dict(
# decode_responses=True,
# db=3
# )
# coding=utf-8
import json
import logging
import odoorpc
import redis
import requests
import time
from requests.adapters import HTTPAdapter
import config
# 本地
# 默认字符gbk
logging.basicConfig(filename='./push_ship_package_state.log', level=logging.INFO)
# 环境?
# 设置文件字符为utf-8
# logging.basicConfig(handlers=[logging.FileHandler('logs/push_ship_package_state.log', 'a', 'utf-8')],
# format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
class Order_dispose(object):
def __init__(self):
# rpc连接
self.odoo_db = odoorpc.ODOO(config.db_ip, port=config.db_port)
self.odoo_db.login(config.db_name, config.db_user, config.db_password)
def order_data(self, record_ids):
res_data = []
try:
result = json.loads(record_ids)
ship_package_ids = result['ship_package_ids'] # 小包
bl_id = result['bl_id']
logging.info('push_ship_package_state kw: %s', result)
bl_obj = self.odoo_db.env['cc.bl'].browse(bl_id) # 提单
is_ok = bl_obj.package_callback_func(ship_package_ids) # 调用同步包裹状态
# 失败的重复推送
for i in range(3):
if not is_ok:
is_ok = bl_obj.package_callback_func(ship_package_ids)
logging.info('push_ship_package_state 重试推送: %d次' % (i + 1))
else:
break
except Exception as ex:
logging.error('push_ship_package_state error:%s' % str(ex))
return res_data
try:
pool = redis.ConnectionPool(**config.redis_options)
r = redis.Redis(connection_pool=pool)
logging.info(u'redis连接成功')
Order_dispose = Order_dispose()
while 1:
try:
result = r.brpop('push_ship_package_state', 0)
data1 = result[1]
response_data = Order_dispose.order_data(data1)
except Exception as e:
logging.error(e)
continue
except Exception as e:
logging.error("登录失败")
logging.error(e)
[program:push_big_consumer_1]
process_name=%(program_name)s_%(process_num)02d ; 进程名称
directory = D:/hh_ccs ; 程序的启动目录
command = /usr/bin/python3 D:/hh_ccs/push_ship_package_state.py ; 启动命令
;directory = /mnt/extra-addons ; 程序的启动目录
;command = /usr/bin/python3 /mnt/extra-addons/push_ship_package_state.py ; 启动命令
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
numprocs=1 ; 进程数
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/supervisor/push_ship_package_state.log
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论