《仿电商ERP:Spring Boot整合京东JOS实现商品/订单/库存三件套自动同步》(附python源码)

简介: 本文提供“仿电商ERP”同步方案:以Spring Boot架构为蓝本,配套可运行Python实现,聚焦商品、订单、库存三模块与京东JOS自动对接。含MD5签名客户端、增量拉取逻辑、幂等处理及APScheduler定时任务,支持快速原型验证或过渡开发。(239字)

虽然标题是《仿电商ERP:Spring Boot整合京东JOS...》,但你明确要求了附Python源码,下面我给你一套“架构思路(Spring Boot视角)+ 可直接跑的Python实现”,聚焦商品 / 订单 / 库存三件套自动同步,方便你对照理解或先用Python做原型验证。

一、仿ERP同步整体架构(对照Spring Boot思路)

在Java Spring Boot里通常是分层设计,Python这边可以一一对应:

• 配置层:AppKey / AppSecret / AccessToken 统一管理

→ 对应 @ConfigurationProperties
• 平台适配层:京东JOS签名、网关、鉴权封装

→ 对应 JdClient / JosTemplate
• 业务同步层:商品、订单、库存增量拉取 + 本地落库

→ 对应 XxxSyncService
• 调度层:定时任务(APScheduler / Spring @Scheduled)

→ 对应 ScheduledExecutorService

  • 幂等与重试:订单号去重、异常重试、分页游标
    → 对应 数据库唯一索引 + @Retryable

二、京东JOS通用API Client(Python,含MD5签名)

京东JOS特点:
• 网关:https://api.jd.com/routerjson

• 签名:MD5(AppSecret + 排序KV + AppSecret) → 大写

• timestamp 是秒级(10位),别用毫秒

jd_jos_client.py

import hashlib
import time
import requests
from typing import Dict

封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
class JdJosClient:
GATEWAY = "https://api.jd.com/routerjson"

def __init__(self, app_key: str, app_secret: str, access_token: str = ""):
    self.app_key = app_key
    self.app_secret = app_secret
    self.access_token = access_token

def _sign(self, params: Dict) -> str:
    # 剔除 sign、空值
    filtered = sorted(
        (k, v) for k, v in params.items()
        if k != "sign" and v is not None and str(v).strip() != ""
    )
    kv = "".join(f"{k}{v}" for k, v in filtered)
    raw = self.app_secret + kv + self.app_secret
    return hashlib.md5(raw.encode("utf-8")).hexdigest().upper()

def execute(self, method: str, biz_params: Dict) -> dict:
    params = {
        "app_key": self.app_key,
        "method": method,
        "timestamp": str(int(time.time())),
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        **biz_params,
    }
    if self.access_token:
        params["access_token"] = self.access_token

    params["sign"] = self._sign(params)

    resp = requests.post(self.GATEWAY, data=params, timeout=15)
    resp.raise_for_status()
    return resp.json()

三、三件套同步示例(商品 / 订单 / 库存)

1️⃣ 商品同步(SKU读取)

对应JOS接口:jingdong.ware.sku.read
def sync_products(client: JdJosClient, sku_ids: str):
"""
sku_ids: 逗号分隔的skuId字符串
"""
result = client.execute("jingdong.ware.sku.read", {
"sku_id": sku_ids,
"field": "sku_id,outer_id,stock_num,price,ware_name"
})
data = result.get("jingdong_ware_sku_read_responce", {})
skus = data.get("skus", [])
for sku in skus:
print({
"sku_id": sku.get("sku_id"),
"name": sku.get("ware_name"),
"price": sku.get("price"),
"stock": sku.get("stock_num"),
})

2️⃣ 订单同步(增量分页拉取)

对应接口:jd.order.search / jingdong.pop.order.search
def sync_orders(client: JdJosClient, start_time: str, end_time: str, page: int = 1):
"""
start_time / end_time: yyyy-MM-dd HH:mm:ss
"""
result = client.execute("jingdong.pop.order.search", {
"start_date": start_time,
"end_date": end_time,
"order_state": "WAIT_SELLER_STOCK_OUT,WAIT_BUYER_CONFIRM_GOODS,FINISHED",
"page": page,
"page_size": 100,
})
orders = result.get("jingdong_pop_order_search_responce", {}).get("order_list", [])
for o in orders:
print({
"order_id": o.get("order_id"),
"state": o.get("order_state"),
"amount": o.get("order_total_price"),
})
return len(orders)

ERP实践:

  • 用 modified 时间做增量

  • 本地表用 order_id 做唯一索引防重

  • 分页直到返回条数为0

3️⃣ 库存同步(读取 + 回写思路)

  • 读取:复用 jingdong.ware.sku.read 里的 stock_num
    • 回写(ERP→京东):用库存更新接口(需对应权限),一般按 sku_id + outer_id 映射本地仓库库存

伪代码思路:
def sync_stock_to_jd(client, sku_id, new_stock):

# 实际接口以京东文档为准,示例仅为结构
client.execute("jingdong.ware.stock.update", {
    "sku_id": sku_id,
    "quantity": new_stock,
})

四、定时任务(仿 @Scheduled)

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
client = JdJosClient("APP_KEY", "APP_SECRET", "ACCESS_TOKEN")
sync_products(client, "123456,789012")
sync_orders(client, "2026-07-13 00:00:00", "2026-07-14 23:59:59")

if name == "main":
scheduler = BlockingScheduler()
scheduler.add_job(job, "interval", minutes=30, id="jd_sync_job")
scheduler.start()

五、常见坑(京东JOS特有)

• 时间戳用秒:京东是10位秒级,淘宝才是毫秒,混用必报签名错误

• 参数名ASCII排序:必须严格排序再拼串

• 订单接口要access_token:商品公开读可能不用,但订单/库存一定需要OAuth授权

  • 分页+增量:不要全量扫历史订单,用 modified 时间窗口 + 页游标

如果你愿意,我可以帮你把这套 Python 同步脚本改成标准 Spring Boot 分层结构(Config / Client / Service / Scheduled)的Java示例代码,方便你直接往ERP项目里搬。

相关文章
|
1月前
|
人工智能 API iOS开发
Codex Computer Use 完整指南:AI 自动操控 Mac 与 Windows 桌面实战详解
先说结论。 OpenAI 4 月 16 日给 Codex 桌面 app 发了 Computer Use:Codex 现在能看屏、点按、打字,接管你桌面上的任意 GUI 应用——不再局限于浏览器。macOS 上它在后台跑(不占用你的鼠标键盘,你能同时用电脑干别的),Windows 上是前台接管(5/29 的 v26.527 才补上)。 从「聊天框里的编程助手」变成「会自己动手操作整台电脑的 agent」,这是这次更新真正跨过的那道线。国内照例卡在三道墙——ChatGPT 账号、海外支付、网络——凑得齐走官方;凑不齐,桌面接管这一刀没有等价替代,但编程模型可以用 Codex CLI + 网关本地化
|
1月前
|
人工智能 搜索推荐 Cloud Native
2026 GEO优化技术解析:AI搜索引擎内容引用机制与5步落地方法
2026年Q1中国AI搜索月活破2亿,豆包、Kimi等生成式引擎重塑内容分发。传统SEO失效,GEO(生成式引擎优化)成为新关键——聚焦RAG架构下语义理解与可信度评估。本文解析AI引用三机制,提出5步结构化方法:问题标题、前置FAQ、因果链正文、权威引用、知识图谱钩子,助技术团队提升AI可见度。
487 2
|
1月前
|
存储 人工智能 缓存
企业AI私有化与云端协同方案:GLM5.2部署+OpenClaw/Hermes运维教程
GLM 5.2是一款753B混合专家架构开源旗舰大模型,原生支持百万Token超长上下文、复杂代码工程、长周期自主智能体任务,完整支持本地、私有云自托管部署。自托管模式能够实现全部业务数据不出环境、企业自定义推理调度、全链路操作私有化审计,对数据安全管控有严格要求的研发、金融、政企团队具备不可替代价值。整套落地链路包含硬件分级选型、多量化权重存储配置、vLLM/SGLang双推理框架部署、长期使用成本盈亏测算四大核心模块,同时可搭配轻量应用服务器部署OpenClaw、Hermes两类主流AI智能体,结合百炼Token Plan云端订阅算力构建混合AI架构,兼顾私有化数据安全与云端灵活弹性
300 1
|
1月前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5全维度实测:定价、性能、迁移A/B方案完整解析
2026年OpenAI正式发布GPT-5.6系列全量模型,包含旗舰Sol、均衡Terra、轻量Luna三大层级,其中GPT-5.6 Terra作为替代前代GPT-5.5的主力均衡模型,凭借全套计费标准统一减半的核心优势,成为批量编码、长上下文重构、企业日常AI工作流的热门选择。Terra与GPT-5.5共享完全一致的上下文容量、最大输出长度与API兼容协议,迁移仅需替换一行模型标识字符串,但存在关键短板:官方未单独公布Terra编码专项基准分数,仅放出定性成本对比描述,无法直接确认其代码生成、复杂补丁修复能力是否持平GPT-5.5。本文结合官方定价数据、多套行业基准、不同量级业务成本测算、标准
368 0
缓存 NoSQL API
88 0
API 调度 开发者
71 0
弹性计算 安全 API
59 0
|
1月前
|
BI
Tushare接口文档:每日指标(daily_basic)
本文旨在对Tushare的每日指标`daily_basic`数据接口进行介绍,提供更多参考示例和使用说明。接口中包含重要的基本面指标,例如换手率、量比、市销率、股息率、股本与市值等指标,可用于选股分析、报表展示等。本文介绍了如何获取某个交易日所有股票的基本面指标、如何获取某支股票历史基本面指标、如何指定返回字段,以及对不同股本类型进行了简要地说明。
382 1
|
1月前
|
SQL 关系型数据库 MySQL
阿里云RDS-MariaDB从零到实战:完整对接流程与SQL语法深度解析
本文提供了一份完整的阿里云RDS-MariaDB从入门到实战的技术指南。文章从RDS-MariaDB的核心优势与选型考量入手,详细讲解了实例创建、计费方式选择、地域与VPC网络规划、白名单安全配置、数据库与账号管理的完整对接流程。深入剖析了通过DMS、命令行、第三方客户端以及Python/Java应用程序连接RDS-MariaDB的多种方式,并提供了完整的代码示例。在SQL语法层面,系统梳理了MariaDB的DDL、DML、DQL核心语法体系,重点对比了MariaDB与MySQL的关键差异,包括存储引擎、字符集默认值、GTID复制机制、序列对象以及EXCEPT/INTERSECT集合操作等。文
|
1月前
|
运维 调度
企业出海实战:多云架构下的基础设施治理与运维协同实践
随着业务全球化加速,多云出海成为趋势,但合规治理、财税集成与跨时区运维成为SRE新挑战。本文剖析多云治理痛点,提出统一资源管理、财税自动化闭环及协同响应机制三大实践路径,助力企业平衡技术效能与合规要求,聚焦核心业务创新。