From 8e8f5eb8beccb0b5eb36b24ff55ed160435eb206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=B5=93?= <1440513926@qq.com> Date: Tue, 15 Jul 2025 11:29:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20Redis=20=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=90=8C=E6=AD=A5=E7=9B=B8=E5=85=B3=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B8=8E=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/controllers/sync_controller.py | 22 ++++++++++++++ sf_mrs_connect/models/common.py | 14 +++++++++ sf_mrs_connect/models/redis_utils.py | 30 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 sf_mrs_connect/controllers/sync_controller.py create mode 100644 sf_mrs_connect/models/common.py create mode 100644 sf_mrs_connect/models/redis_utils.py diff --git a/sf_mrs_connect/controllers/sync_controller.py b/sf_mrs_connect/controllers/sync_controller.py new file mode 100644 index 00000000..a70ae60c --- /dev/null +++ b/sf_mrs_connect/controllers/sync_controller.py @@ -0,0 +1,22 @@ +# study/jikimo_sf/sf_mrs_connect/controllers/sync_controller.py +from odoo import http +from odoo.http import request + +class FixtureSyncController(http.Controller): + + @http.route('/api/fixture_model/sync_from_mrs', type='json', auth='none', csrf=False) + def sync_model(self, **kw): + code = kw.get('code') + if not code: + return {'status':'fail','msg':'code missing'} + request.env['sf.fixture.model'].sudo().sync_from_mrs(code) + return {'status':'success'} + + @http.route('/api/fixture_param/sync_from_mrs', type='json', auth='none', csrf=False) + def sync_param(self, **kw): + code = kw.get('code') + if not code: + return {'status':'fail','msg':'code missing'} + request.env['sf.fixture.materials.basic.parameters']\ + .sudo().sync_from_mrs(code) + return {'status':'success'} diff --git a/sf_mrs_connect/models/common.py b/sf_mrs_connect/models/common.py new file mode 100644 index 00000000..320f6cac --- /dev/null +++ b/sf_mrs_connect/models/common.py @@ -0,0 +1,14 @@ +# study/jikimo_sf/sf_mrs_connect/models/common.py +import time, hashlib + +class Common: + @staticmethod + def get_headers(token, secret_key): + ts = str(int(time.time())) + sign = hashlib.sha256(f"{token}{secret_key}{ts}".encode()).hexdigest() + return { + "token": token, + "sign": sign, + "timestamp": ts, + "Content-Type": "application/json", + } diff --git a/sf_mrs_connect/models/redis_utils.py b/sf_mrs_connect/models/redis_utils.py new file mode 100644 index 00000000..24b679c2 --- /dev/null +++ b/sf_mrs_connect/models/redis_utils.py @@ -0,0 +1,30 @@ +# study/jikimo_sf/sf_mrs_connect/models/redis_utils.py +import redis, json, logging + +_logger = logging.getLogger(__name__) + +class RedisClient: + def __init__(self, host='localhost', port=6379, db=0): + try: + self.client = redis.Redis(host=host, port=port, db=db, decode_responses=True) + except Exception as e: + _logger.error(f"Redis init error: {e}") + self.client = None + + def get_json(self, key): + if not self.client: + return None + try: + data = self.client.get(key) + return json.loads(data) if data else None + except Exception as e: + _logger.error(f"Redis GET error [{key}]: {e}") + return None + + def set_json(self, key, value, ex=3600): + if not self.client: + return + try: + self.client.set(key, json.dumps(value, ensure_ascii=False), ex=ex) + except Exception as e: + _logger.error(f"Redis SET error [{key}]: {e}")