商品事件
本页面介绍商品相关的事件类型及处理示例。
事件列表
| 事件标识 | 说明 | payload |
|---|---|---|
| PRODUCT_CREATE_SUCCESS | 商品创建成功 | 商品ID |
| PRODUCT_UPDATE | 商品更新 | 商品ID |
| PRODUCT_ON_SHELF | 商品上架成功 | 商品ID |
| PRODUCT_OFF_SHELF | 商品下架成功 | 商品ID |
事件数据结构
所有商品事件的payload是商品ID(Long类型):
json
{
"eventKey": "PRODUCT_CREATE_SUCCESS",
"payload": 12345,
"timestamp": 1704067200000
}PRODUCT_CREATE_SUCCESS - 商品创建成功
商户发布新商品审核通过后触发。
触发时机
- 商户发布商品审核通过
- 平台直接发布商品成功
处理示例:同步商品到ERP
javascript
// 接口路径: /custom/erp/product-sync
// 处理 PRODUCT_CREATE_SUCCESS 事件
var event = payload.event;
var productId = event.payload;
log.info("处理商品创建事件: productId={}", productId);
// 查询商品详情
var product = db.selectOne(`
SELECT p.*, m.mer_name, c.name as category_name
FROM eb_store_product p
LEFT JOIN eb_merchant m ON p.mer_id = m.id
LEFT JOIN eb_store_category c ON p.category_id = c.id
WHERE p.id = ?
`, productId);
if (!product) {
log.error("商品不存在: {}", productId);
return { success: false, message: "商品不存在" };
}
// 查询SKU信息
var skus = db.select(`
SELECT attr_value_id, sku, price, cost, ot_price, stock, image
FROM eb_store_product_attr_value
WHERE product_id = ?
`, productId);
// 转换为ERP格式
var erpProduct = {
sourceProductId: "MISEB_" + productId,
sourceSystem: "MISEB",
name: product.store_name,
merchantId: product.mer_id,
merchantName: product.mer_name,
categoryName: product.category_name,
mainImage: product.image,
unit: product.unit_name,
skus: skus.map(s => ({
skuId: "MISEB_" + s.attr_value_id,
skuName: s.sku,
price: s.price / 100,
costPrice: s.cost / 100,
stock: s.stock,
image: s.image
}))
};
// 调用ERP接口
var result = http.post(env.get('ERP_API_URL') + '/product/create', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + env.get('ERP_API_KEY')
},
body: erpProduct,
timeout: 10000
});
if (result.code == 0 || result.code == 200) {
log.info("商品同步ERP成功: productId={}, erpProductId={}", productId, result.data?.productId);
return { success: true, erpProductId: result.data?.productId };
} else {
log.error("商品同步ERP失败: productId={}, error={}", productId, result.message);
return { success: false, message: result.message };
}PRODUCT_UPDATE - 商品更新
商品信息修改时触发。
触发时机
- 商户编辑商品信息
- 商户修改商品价格
- 商户修改商品库存
处理示例:同步商品变更到WMS
javascript
// 接口路径: /custom/wms/product-update
// 处理 PRODUCT_UPDATE 事件
var event = payload.event;
var productId = event.payload;
log.info("处理商品更新事件: productId={}", productId);
// 查询商品详情
var product = db.selectOne(`
SELECT id, store_name, stock, mer_id
FROM eb_store_product
WHERE id = ?
`, productId);
// 查询SKU库存
var skus = db.select(`
SELECT attr_value_id, sku, stock, price
FROM eb_store_product_attr_value
WHERE product_id = ?
`, productId);
// 同步到WMS
var result = http.post(env.get('WMS_API_URL') + '/product/sync', {
headers: {
'Authorization': 'Bearer ' + env.get('WMS_API_KEY')
},
body: {
sourceProductId: "MISEB_" + productId,
name: product.store_name,
totalStock: product.stock,
skuList: skus.map(s => ({
skuId: "MISEB_" + s.attr_value_id,
skuName: s.sku,
stock: s.stock,
price: s.price / 100
}))
}
});
log.info("WMS商品同步: productId={}, result={}", productId, result);
return { success: true };PRODUCT_ON_SHELF - 商品上架成功
商品上架销售时触发。
触发时机
- 商户手动上架商品
- 定时任务自动上架
处理示例:推送到分销平台
javascript
// 接口路径: /custom/distribution/product-push
// 处理 PRODUCT_ON_SHELF 事件
var event = payload.event;
var productId = event.payload;
log.info("处理商品上架事件: productId={}", productId);
// 查询商品详情
var product = db.selectOne(`
SELECT p.*, m.mer_name
FROM eb_store_product p
LEFT JOIN eb_merchant m ON p.mer_id = m.id
WHERE p.id = ?
`, productId);
// 检查是否开启分销
if (product.is_brokerage != 1) {
log.info("商品未开启分销,跳过推送: productId={}", productId);
return { success: true, message: "未开启分销" };
}
// 推送到分销平台
var result = http.post(env.get('DISTRIBUTION_API_URL') + '/product/publish', {
headers: {
'Authorization': 'Bearer ' + env.get('DISTRIBUTION_API_KEY')
},
body: {
productId: "MISEB_" + productId,
name: product.store_name,
price: product.price / 100,
image: product.image,
commissionRate: product.brokerage_rate,
merchantName: product.mer_name
}
});
log.info("分销平台推送: productId={}, result={}", productId, result);
return { success: true };PRODUCT_OFF_SHELF - 商品下架成功
商品下架时触发。
触发时机
- 商户手动下架商品
- 库存为0自动下架
- 平台强制下架
处理示例:同步下架到其他平台
javascript
// 接口路径: /custom/sync/product-off
// 处理 PRODUCT_OFF_SHELF 事件
var event = payload.event;
var productId = event.payload;
log.info("处理商品下架事件: productId={}", productId);
// 查询商品信息
var product = db.selectOne(`
SELECT id, store_name, stock, mer_id
FROM eb_store_product
WHERE id = ?
`, productId);
// 通知ERP下架
http.post(env.get('ERP_API_URL') + '/product/offline', {
headers: {
'Authorization': 'Bearer ' + env.get('ERP_API_KEY')
},
body: {
sourceProductId: "MISEB_" + productId,
reason: product.stock <= 0 ? "库存不足" : "商户下架"
}
});
// 通知分销平台下架
http.post(env.get('DISTRIBUTION_API_URL') + '/product/offline', {
headers: {
'Authorization': 'Bearer ' + env.get('DISTRIBUTION_API_KEY')
},
body: {
productId: "MISEB_" + productId
}
});
// 发送下架通知给商户
var merchant = db.selectOne(`
SELECT mer_name, alert_phone FROM eb_merchant WHERE id = ?
`, product.mer_id);
if (merchant.alert_phone) {
http.post(env.get('SMS_API_URL') + '/send', {
body: {
phone: merchant.alert_phone,
template: 'product_off_shelf',
params: {
productName: product.store_name
}
}
});
}
log.info("商品下架同步完成: productId={}", productId);
return { success: true };库存预警处理
虽然没有专门的库存变更事件,但可以在商品更新事件中检查库存:
javascript
// 接口路径: /custom/alert/stock-warning
// 处理 PRODUCT_UPDATE 事件,检查库存
var event = payload.event;
var productId = event.payload;
// 查询SKU库存
var lowStockSkus = db.select(`
SELECT pav.*, p.store_name, m.mer_name, m.alert_phone
FROM eb_store_product_attr_value pav
LEFT JOIN eb_store_product p ON pav.product_id = p.id
LEFT JOIN eb_merchant m ON p.mer_id = m.id
WHERE pav.product_id = ?
AND pav.stock < 10
AND pav.stock > 0
`, productId);
if (lowStockSkus.length > 0) {
// 构建告警信息
var alertMessages = lowStockSkus.map(sku =>
`【${sku.store_name}】规格【${sku.sku}】库存仅剩${sku.stock}件`
);
// 发送钉钉告警
http.post(env.get('DINGTALK_WEBHOOK'), {
body: {
msgtype: 'text',
text: {
content: '【库存预警】\n' + alertMessages.join('\n')
}
}
});
log.warn("库存预警: productId={}, lowStockCount={}", productId, lowStockSkus.length);
}
return { success: true };数据库表参考
eb_store_product 商品表
| 字段 | 说明 |
|---|---|
| id | 商品ID |
| store_name | 商品名称 |
| mer_id | 商户ID |
| category_id | 分类ID |
| image | 主图 |
| price | 价格(分) |
| ot_price | 原价(分) |
| stock | 总库存 |
| is_show | 上架状态 |
| is_brokerage | 是否开启分销 |
eb_store_product_attr_value SKU表
| 字段 | 说明 |
|---|---|
| id | SKU ID |
| product_id | 商品ID |
| sku | 规格名称 |
| price | 价格(分) |
| cost | 成本价(分) |
| stock | SKU库存 |
| image | SKU图片 |
