Compare commits

..

No commits in common. "datax" and "main" have entirely different histories.
datax ... main

84 changed files with 53 additions and 3361 deletions

5
.gitignore vendored
View File

@ -1,5 +0,0 @@
.DS_Store
deploy
.DS_Store
**/*.log
.DS_Store

View File

@ -1,54 +0,0 @@
## 修复计划
### 问题分析
- 所有报错的cube文件都缺少主键定义
- 所有cube的dimensions数组为空
- 当cube定义了join时Cube.js要求必须有一个主键
### 修复策略
为每个cube添加适当的主键和维度定义。由于这些都是关联表junction tables我将
1. 添加id字段作为主键如果表中存在
2. 添加表中的外键字段作为维度
3. 确保每个cube都有明确的primary_key定义
### 具体修复文件
#### 1. product_attributes_dict_item.yml
- 添加id、dictItemId、productId作为维度
- 将id设为主键
#### 2. product_v2_attributes_dict_item.yml
- 添加id、dictItemId、productV2Id作为维度
- 将id设为主键
#### 3. site_stock_points_stock_point.yml
- 添加id、siteId、stockPointId作为维度
- 将id设为主键
#### 4. site_v2_stock_points_stock_point.yml
- 添加id、siteV2Id、stockPointId作为维度
- 将id设为主键
#### 5. site_areas_area.yml
- 添加id、siteId、areaId作为维度
- 将id设为主键
#### 6. site_v2_areas_area.yml
- 添加id、siteV2Id、areaId作为维度
- 将id设为主键
#### 7. stock_point_areas_area.yml
- 添加id、stockPointId、areaId作为维度
- 将id设为主键
### 修复后效果
- 解决编译错误所有cube都有正确的主键定义
- 保持现有的join关系不变
- 允许在查询中使用这些cube的维度进行分析
- 支持正确的聚合操作
### 实施步骤
1. 依次编辑每个yml文件
2. 为每个cube添加dimensions配置
3. 为每个cube设置primary_key
4. 保存并验证修复效果

View File

@ -1,5 +0,0 @@
mysql
nginx
cube/conf/.cubestore
datax/log
!docker-compose.yml

View File

@ -1,29 +0,0 @@
cubes:
- name: area
sql_table: inventory_v2.area
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: code
sql: code
type: string
- name: name
sql: name
type: string
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,28 +0,0 @@
cubes:
- name: auth_code
sql_table: inventory_v2.auth_code
data_source: default
joins: []
dimensions:
- name: code
sql: code
type: string
- name: device_id
sql: device_id
type: string
- name: expires_at
sql: expires_at
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,45 +0,0 @@
cubes:
- name: category
sql_table: inventory_v2.category
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: shortname
sql: "{CUBE}.`shortName`"
type: string
- name: title
sql: title
type: string
- name: titlecn
sql: "{CUBE}.`titleCN`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,32 +0,0 @@
cubes:
- name: category_attribute
sql_table: inventory_v2.category_attribute
data_source: default
joins:
- name: category
sql: "{CUBE}.category_id = {category.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,41 +0,0 @@
cubes:
- name: category_v2
sql_table: inventory_v2.category_v2
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: title
sql: title
type: string
- name: titlecn
sql: "{CUBE}.`titleCN`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,87 +0,0 @@
cubes:
- name: customer
sql_table: inventory_v2.customer
data_source: default
joins:
- name: site
sql: "{CUBE}.site_id = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: customer_state
sql: "JSON_EXTRACT({customer.shipping}, '$.state')"
type: string
- name: avatar
sql: avatar
type: string
- name: billing
sql: billing
type: string
- name: email
sql: email
type: string
- name: first_name
sql: first_name
type: string
- name: fullname
sql: fullname
type: string
- name: last_name
sql: last_name
type: string
- name: origin_id
sql: origin_id
type: string
- name: phone
sql: phone
type: string
- name: raw
sql: raw
type: string
- name: shipping
sql: shipping
type: string
- name: username
sql: username
type: string
- name: created_at
sql: created_at
type: time
- name: site_created_at
sql: site_created_at
type: time
- name: site_updated_at
sql: site_updated_at
type: time
- name: updated_at
sql: updated_at
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,37 +0,0 @@
cubes:
- name: customer_tag
sql_table: inventory_v2.customer_tag
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: email
sql: email
type: string
- name: tag
sql: tag
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,29 +0,0 @@
cubes:
- name: device_whitelist
sql_table: inventory_v2.device_whitelist
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: device_id
sql: device_id
type: string
- name: created_at
sql: created_at
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,37 +0,0 @@
cubes:
- name: dict
sql_table: inventory_v2.dict
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: title
sql: title
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,60 +0,0 @@
cubes:
- name: dict_item
sql_table: inventory_v2.dict_item
data_source: default
joins:
- name: dict
sql: "{CUBE}.dict_id = {dict.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: description
sql: description
type: string
- name: image
sql: image
type: string
- name: name
sql: name
type: string
- name: shortname
sql: "{CUBE}.`shortName`"
type: string
- name: title
sql: title
type: string
- name: titlecn
sql: "{CUBE}.`titleCN`"
type: string
- name: value
sql: value
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,165 +0,0 @@
cubes:
- name: order
sql_table: inventory_v2.order
data_source: default
joins:
- name: customer
sql: "{CUBE}.customer_id = {customer.id}"
relationship: many_to_one
- name: shipment
sql: "{CUBE}.shipment_id = {shipment.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: billing
sql: billing
type: string
- name: cart_hash
sql: cart_hash
type: string
- name: created_via
sql: created_via
type: string
- name: currency
sql: currency
type: string
- name: currency_symbol
sql: currency_symbol
type: string
- name: customer_email
sql: customer_email
type: string
- name: customer_ip_address
sql: customer_ip_address
type: string
- name: customer_note
sql: customer_note
type: string
- name: customer_user_agent
sql: customer_user_agent
type: string
- name: device_type
sql: device_type
type: string
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: meta_data
sql: meta_data
type: string
- name: number
sql: number
type: string
- name: order_key
sql: order_key
type: string
- name: orderstatus
sql: "{CUBE}.`orderStatus`"
type: string
- name: payment_method
sql: payment_method
type: string
- name: payment_method_title
sql: payment_method_title
type: string
- name: payment_url
sql: payment_url
type: string
- name: shipping
sql: shipping
type: string
- name: source_type
sql: source_type
type: string
- name: status
sql: status
type: string
- name: transaction_id
sql: transaction_id
type: string
- name: utm_source
sql: utm_source
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: date_created
sql: date_created
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: date_completed
sql: date_completed
type: time
- name: date_modified
sql: date_modified
type: time
- name: date_paid
sql: date_paid
type: time
measures:
- name: count
type: count
- name: discount_total
sql: discount_total
type: sum
- name: shipping_total
sql: shipping_total
type: sum
- name: total
sql: total
type: sum
- name: last_created_at
sql: date_created
type: max
- name: first_created_at
sql: date_created
type: min
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,64 +0,0 @@
cubes:
- name: order_coupon
sql_table: inventory_v2.order_coupon
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: code
sql: code
type: string
- name: discount
sql: discount
type: string
- name: discount_tax
sql: discount_tax
type: string
- name: discount_type
sql: discount_type
type: string
- name: externalordercouponid
sql: "{CUBE}.`externalOrderCouponId`"
type: string
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: nominal_amount
sql: nominal_amount
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,64 +0,0 @@
cubes:
- name: order_fee
sql_table: inventory_v2.order_fee
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: amount
sql: amount
type: string
- name: externalorderfeeid
sql: "{CUBE}.`externalOrderFeeId`"
type: string
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: name
sql: name
type: string
- name: tax_class
sql: tax_class
type: string
- name: tax_status
sql: tax_status
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: total
sql: total
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,68 +0,0 @@
cubes:
- name: order_fulfillment
sql_table: inventory_v2.order_fulfillment
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.site_id = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: external_fulfillment_id
sql: external_fulfillment_id
type: string
- name: external_order_id
sql: external_order_id
type: string
- name: items
sql: items
type: string
- name: shipping_method
sql: shipping_method
type: string
- name: shipping_provider
sql: shipping_provider
type: string
- name: status
sql: status
type: string
- name: tracking_number
sql: tracking_number
type: string
- name: created_at
sql: created_at
type: time
- name: date_created
sql: date_created
type: time
- name: updated_at
sql: updated_at
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,115 +0,0 @@
cubes:
- name: order_item
sql_table: inventory_v2.order_item
data_source: default
joins:
- name: product
sql: "CONVERT({product.siteskus} USING utf8mb4) COLLATE utf8mb4_unicode_ci LIKE CONCAT('%', {CUBE}.sku, '%')"
relationship: many_to_one
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: bundled_by
sql: bundled_by
type: string
- name: bundled_item_title
sql: bundled_item_title
type: string
- name: bundled_items
sql: bundled_items
type: string
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: externalorderitemid
sql: "{CUBE}.`externalOrderItemId`"
type: string
- name: externalproductid
sql: "{CUBE}.`externalProductId`"
type: string
- name: externalvariationid
sql: "{CUBE}.`externalVariationId`"
type: string
- name: global_unique_id
sql: global_unique_id
type: string
- name: image
sql: image
type: string
- name: meta_data
sql: meta_data
type: string
- name: name
sql: name
type: string
- name: parent_name
sql: parent_name
type: string
- name: sku
sql: sku
type: string
- name: tax_class
sql: tax_class
type: string
- name: taxes
sql: taxes
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: price
sql: price
type: sum
- name: quantity
sql: quantity
type: sum
- name: subtotal
sql: subtotal
type: sum
- name: total
sql: total
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,56 +0,0 @@
cubes:
- name: order_item_original
sql_table: inventory_v2.order_item_original
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: externalorderitemid
sql: "{CUBE}.`externalOrderItemId`"
type: string
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: order_note
sql_table: inventory_v2.order_note
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: user
sql: "{CUBE}.`userId` = {user.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: content
sql: content
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,60 +0,0 @@
cubes:
- name: order_refund
sql_table: inventory_v2.order_refund
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: externalrefundid
sql: "{CUBE}.`externalRefundId`"
type: string
- name: meta_data
sql: meta_data
type: string
- name: reason
sql: reason
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: date_created
sql: date_created
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: amount
sql: amount
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,76 +0,0 @@
cubes:
- name: order_refund_item
sql_table: inventory_v2.order_refund_item
data_source: default
joins:
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: externalproductid
sql: "{CUBE}.`externalProductId`"
type: string
- name: externalrefundid
sql: "{CUBE}.`externalRefundId`"
type: string
- name: externalrefunditemid
sql: "{CUBE}.`externalRefundItemId`"
type: string
- name: externalvariationid
sql: "{CUBE}.`externalVariationId`"
type: string
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
- name: tax_class
sql: tax_class
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: price
sql: price
type: sum
- name: quantity
sql: quantity
type: sum
- name: subtotal
sql: subtotal
type: sum
- name: total
sql: total
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,84 +0,0 @@
cubes:
- name: order_sale
sql_table: inventory_v2.order_sale
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: brand
sql: brand
type: string
- name: category
sql: category
type: string
- name: externalorderitemid
sql: "{CUBE}.`externalOrderItemId`"
type: string
- name: flavor
sql: flavor
type: string
- name: humidity
sql: humidity
type: string
- name: name
sql: name
type: string
- name: size
sql: size
type: string
- name: sku
sql: sku
type: string
- name: strength
sql: strength
type: string
- name: version
sql: version
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,60 +0,0 @@
cubes:
- name: order_sale_original
sql_table: inventory_v2.order_sale_original
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
- name: site
sql: "{CUBE.siteid} = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: externalorderitemid
sql: "{CUBE}.`externalOrderItemId`"
type: string
- name: name
sql: name
type: string
- name: siteid
sql: "{CUBE}.`siteId`"
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: order_shipment
sql_table: inventory_v2.order_shipment
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: shipment
sql: "{CUBE}.shipment_id = {shipment.id}"
relationship: many_to_one
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,60 +0,0 @@
cubes:
- name: order_shipping
sql_table: inventory_v2.order_shipping
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: externalordershippingid
sql: "{CUBE}.`externalOrderShippingId`"
type: string
- name: instance_id
sql: instance_id
type: string
- name: method_id
sql: method_id
type: string
- name: method_title
sql: method_title
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: total
sql: total
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,88 +0,0 @@
cubes:
- name: order_tracking
sql_table: inventory_v2.order_tracking
data_source: default
joins:
- name: order
sql: "{CUBE.orderid} = {order.id}"
relationship: many_to_one
- name: shipment
sql: "{CUBE.shipment_id} = {shipment.id}"
relationship: many_to_one
- name: site
sql: "{CUBE.siteid} = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: custom_tracking_provider
sql: custom_tracking_provider
type: string
- name: externalorderid
sql: "{CUBE}.`externalOrderId`"
type: string
- name: orderid
sql: "{CUBE}.`orderId`"
type: string
- name: shipment_id
sql: shipment_id
type: string
- name: siteid
sql: "{CUBE}.`siteId`"
type: string
- name: status_shipped
sql: status_shipped
type: string
- name: tracking_id
sql: tracking_id
type: string
- name: tracking_link
sql: tracking_link
type: string
- name: tracking_number
sql: tracking_number
type: string
- name: tracking_product_code
sql: tracking_product_code
type: string
- name: tracking_provider
sql: tracking_provider
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: date_shipped
sql: date_shipped
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,48 +0,0 @@
cubes:
- name: order_tracking_product
sql_table: inventory_v2.order_tracking_product
data_source: default
joins:
- name: order_tracking
sql: "{CUBE}.`orderTrackingId` = {order_tracking.id}"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: nume
sql: nume
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,72 +0,0 @@
cubes:
- name: product
sql_table: inventory_v2.product
data_source: default
joins:
- name: category
sql: "{CUBE}.`categoryId` = {category.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: description
sql: description
type: string
- name: image
sql: image
type: string
- name: name
sql: name
type: string
- name: namecn
sql: "{CUBE}.`nameCn`"
type: string
- name: shortdescription
sql: "{CUBE}.`shortDescription`"
type: string
- name: siteskus
sql: "{CUBE}.`siteSkus`"
type: string
- name: sku
sql: sku
type: string
- name: type
sql: type
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: price
sql: price
type: sum
- name: promotionprice
sql: "{CUBE}.`promotionPrice`"
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: product_attributes_dict_item
sql_table: inventory_v2.product_attributes_dict_item
data_source: default
joins:
- name: dict_item
sql: "{CUBE}.`dictItemId` = {dict_item.id}"
relationship: many_to_one
- name: product_v2_attributes_dict_item
sql: "{CUBE}.`dictItemId` = {product_v2_attributes_dict_item}.`dictItemId`"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: dict_item_id
sql: "{CUBE}.`dictItemId`"
type: number
- name: product_id
sql: "{CUBE}.`productId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,36 +0,0 @@
cubes:
- name: product_site_sku
sql_table: inventory_v2.product_site_sku
data_source: default
joins:
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: sitesku
sql: "{CUBE}.`siteSku`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: product_stock_component
sql_table: inventory_v2.product_stock_component
data_source: default
joins:
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,64 +0,0 @@
cubes:
- name: product_v2
sql_table: inventory_v2.product_v2
data_source: default
joins:
- name: category
sql: "{CUBE}.`categoryId` = {category.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: description
sql: description
type: string
- name: name
sql: name
type: string
- name: namecn
sql: "{CUBE}.`nameCn`"
type: string
- name: shortdescription
sql: "{CUBE}.`shortDescription`"
type: string
- name: sku
sql: sku
type: string
- name: type
sql: type
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: price
sql: price
type: sum
- name: promotionprice
sql: "{CUBE}.`promotionPrice`"
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: product_v2_attributes_dict_item
sql_table: inventory_v2.product_v2_attributes_dict_item
data_source: default
joins:
- name: dict_item
sql: "{CUBE}.`dictItemId` = {dict_item.id}"
relationship: many_to_one
- name: product_attributes_dict_item
sql: "{CUBE}.`dictItemId` = {product_attributes_dict_item}.`dictItemId`"
relationship: many_to_one
- name: product_v2
sql: "{CUBE}.`productV2Id` = {product_v2.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: dict_item_id
sql: "{CUBE}.`dictItemId`"
type: number
- name: product_v2_id
sql: "{CUBE}.`productV2Id`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,56 +0,0 @@
cubes:
- name: purchase_order
sql_table: inventory_v2.purchase_order
data_source: default
joins:
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: note
sql: note
type: string
- name: ordernumber
sql: "{CUBE}.`orderNumber`"
type: string
- name: status
sql: status
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: expectedarrivaltime
sql: "{CUBE}.`expectedArrivalTime`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: purchase_order_item
sql_table: inventory_v2.purchase_order_item
data_source: default
joins:
- name: purchase_order
sql: "{CUBE}.`purchaseOrderId` = {purchase_order.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
measures:
- name: count
type: count
- name: price
sql: price
type: sum
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,37 +0,0 @@
cubes:
- name: service
sql_table: inventory_v2.service
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: string
primary_key: true
- name: carrier_name
sql: carrier_name
type: string
- name: service_name
sql: service_name
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,96 +0,0 @@
cubes:
- name: shipment
sql_table: inventory_v2.shipment
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.stock_point_id = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: bol_number
sql: bol_number
type: string
- name: customs_invoice_url
sql: customs_invoice_url
type: string
- name: labels
sql: labels
type: string
- name: pickup_confirmation_number
sql: pickup_confirmation_number
type: string
- name: primary_tracking_number
sql: primary_tracking_number
type: string
- name: rate
sql: rate
type: string
- name: return_tracking_number
sql: return_tracking_number
type: string
- name: state
sql: state
type: string
- name: tracking_id
sql: tracking_id
type: string
- name: tracking_numbers
sql: tracking_numbers
type: string
- name: tracking_provider
sql: tracking_provider
type: string
- name: tracking_url
sql: tracking_url
type: string
- name: transaction_number
sql: transaction_number
type: string
- name: type
sql: type
type: string
- name: unique_id
sql: unique_id
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,48 +0,0 @@
cubes:
- name: shipment_item
sql_table: inventory_v2.shipment_item
data_source: default
joins:
- name: order
sql: "{CUBE}.order_id = {order.id}"
relationship: many_to_one
- name: shipment
sql: "{CUBE}.shipment_id = {shipment.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,60 +0,0 @@
cubes:
- name: shipping_address
sql_table: inventory_v2.shipping_address
data_source: default
joins:
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: address
sql: address
type: string
- name: name
sql: name
type: string
- name: phone_number
sql: phone_number
type: string
- name: phone_number_country
sql: phone_number_country
type: string
- name: phone_number_extension
sql: phone_number_extension
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,48 +0,0 @@
cubes:
- name: shipping_item
sql_table: inventory_v2.shipping_item
data_source: default
joins:
- name: order
sql: "{CUBE}.`orderId` = {order.id}"
relationship: many_to_one
- name: product
sql: "{CUBE}.`productId` = {product.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,61 +0,0 @@
cubes:
- name: site
sql_table: inventory_v2.site
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: apiurl
sql: "{CUBE}.`apiUrl`"
type: string
- name: consumerkey
sql: "{CUBE}.`consumerKey`"
type: string
- name: consumersecret
sql: "{CUBE}.`consumerSecret`"
type: string
- name: description
sql: description
type: string
- name: name
sql: name
type: string
- name: skuprefix
sql: "{CUBE}.`skuPrefix`"
type: string
- name: token
sql: token
type: string
- name: type
sql: type
type: string
- name: webhook_url
sql: webhook_url
type: string
- name: website_url
sql: website_url
type: string
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,36 +0,0 @@
cubes:
- name: site_areas_area
sql_table: inventory_v2.site_areas_area
data_source: default
joins:
- name: area
sql: "{CUBE}.`areaId` = {area.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: site_id
sql: "{CUBE}.`siteId`"
type: number
- name: area_id
sql: "{CUBE}.`areaId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: site_stock_points_stock_point
sql_table: inventory_v2.site_stock_points_stock_point
data_source: default
joins:
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: site_id
sql: "{CUBE}.`siteId`"
type: number
- name: stock_point_id
sql: "{CUBE}.`stockPointId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,57 +0,0 @@
cubes:
- name: site_v2
sql_table: inventory_v2.site_v2
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: apiurl
sql: "{CUBE}.`apiUrl`"
type: string
- name: consumerkey
sql: "{CUBE}.`consumerKey`"
type: string
- name: consumersecret
sql: "{CUBE}.`consumerSecret`"
type: string
- name: description
sql: description
type: string
- name: name
sql: name
type: string
- name: skuprefix
sql: "{CUBE}.`skuPrefix`"
type: string
- name: token
sql: token
type: string
- name: type
sql: type
type: string
- name: website_url
sql: website_url
type: string
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,36 +0,0 @@
cubes:
- name: site_v2_areas_area
sql_table: inventory_v2.site_v2_areas_area
data_source: default
joins:
- name: area
sql: "{CUBE}.`areaId` = {area.id}"
relationship: many_to_one
- name: site_v2
sql: "{CUBE}.`siteV2Id` = {site_v2.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: site_v2_id
sql: "{CUBE}.`siteV2Id`"
type: number
- name: area_id
sql: "{CUBE}.`areaId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,40 +0,0 @@
cubes:
- name: site_v2_stock_points_stock_point
sql_table: inventory_v2.site_v2_stock_points_stock_point
data_source: default
joins:
- name: site_v2
sql: "{CUBE}.`siteV2Id` = {site_v2.id}"
relationship: many_to_one
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: site_v2_id
sql: "{CUBE}.`siteV2Id`"
type: number
- name: stock_point_id
sql: "{CUBE}.`stockPointId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,48 +0,0 @@
cubes:
- name: stock
sql_table: inventory_v2.stock
data_source: default
joins:
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,53 +0,0 @@
cubes:
- name: stock_point
sql_table: inventory_v2.stock_point
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: contactperson
sql: "{CUBE}.`contactPerson`"
type: string
- name: contactphone
sql: "{CUBE}.`contactPhone`"
type: string
- name: location
sql: location
type: string
- name: name
sql: name
type: string
- name: upstreamname
sql: "{CUBE}.`upStreamName`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: deletedat
sql: "{CUBE}.`deletedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,44 +0,0 @@
cubes:
- name: stock_point_areas_area
sql_table: inventory_v2.stock_point_areas_area
data_source: default
joins:
- name: area
sql: "{CUBE}.`areaId` = {area.id}"
relationship: many_to_one
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: stock_point_id
sql: "{CUBE}.`stockPointId`"
type: number
- name: area_id
sql: "{CUBE}.`areaId`"
type: number
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,48 +0,0 @@
cubes:
- name: stock_record
sql_table: inventory_v2.stock_record
data_source: default
joins:
- name: site_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: site_v2_stock_points_stock_point
sql: "{CUBE}.`stockPointId` = {site_v2_stock_points_stock_point}.`stockPointId`"
relationship: many_to_one
- name: stock_point
sql: "{CUBE}.`stockPointId` = {stock_point.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: note
sql: note
type: string
- name: operationtype
sql: "{CUBE}.`operationType`"
type: string
- name: sku
sql: sku
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,84 +0,0 @@
cubes:
- name: subscription
sql_table: inventory_v2.subscription
data_source: default
joins:
- name: customer
sql: "{CUBE}.customer_id = {customer.id}"
relationship: many_to_one
- name: site
sql: "{CUBE}.`siteId` = {site.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: billing_period
sql: billing_period
type: string
- name: currency
sql: currency
type: string
- name: customer_email
sql: customer_email
type: string
- name: externalsubscriptionid
sql: "{CUBE}.`externalSubscriptionId`"
type: string
- name: line_items
sql: line_items
type: string
- name: meta_data
sql: meta_data
type: string
- name: status
sql: status
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: end_date
sql: end_date
type: time
- name: next_payment_date
sql: next_payment_date
type: time
- name: start_date
sql: start_date
type: time
- name: trial_end
sql: trial_end
type: time
measures:
- name: count
type: count
- name: total
sql: total
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,45 +0,0 @@
cubes:
- name: template
sql_table: inventory_v2.template
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: description
sql: description
type: string
- name: name
sql: name
type: string
- name: testdata
sql: "{CUBE}.`testData`"
type: string
- name: value
sql: value
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,45 +0,0 @@
cubes:
- name: transfer
sql_table: inventory_v2.transfer
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: note
sql: note
type: string
- name: ordernumber
sql: "{CUBE}.`orderNumber`"
type: string
- name: createdat
sql: "{CUBE}.`createdAt`"
type: time
- name: updatedat
sql: "{CUBE}.`updatedAt`"
type: time
- name: arriveat
sql: "{CUBE}.`arriveAt`"
type: time
- name: sendat
sql: "{CUBE}.`sendAt`"
type: time
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,36 +0,0 @@
cubes:
- name: transfer_item
sql_table: inventory_v2.transfer_item
data_source: default
joins:
- name: transfer
sql: "{CUBE}.`transferId` = {transfer.id}"
relationship: many_to_one
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: name
sql: name
type: string
- name: sku
sql: sku
type: string
measures:
- name: count
type: count
- name: quantity
sql: quantity
type: sum
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,41 +0,0 @@
cubes:
- name: user
sql_table: inventory_v2.user
data_source: default
joins: []
dimensions:
- name: id
sql: id
type: number
primary_key: true
- name: email
sql: email
type: string
- name: password
sql: password
type: string
- name: permissions
sql: permissions
type: string
- name: remark
sql: remark
type: string
- name: username
sql: username
type: string
measures:
- name: count
type: count
pre_aggregations:
# Pre-aggregation definitions go here.
# Learn more in the documentation: https://cube.dev/docs/caching/pre-aggregations/getting-started

View File

@ -1,29 +0,0 @@
# In Cube, views are used to expose slices of your data graph and act as data marts.
# You can control which measures and dimensions are exposed to BIs or data apps,
# as well as the direction of joins between the exposed cubes.
# You can learn more about views in documentation here - https://cube.dev/docs/schema/reference/view
# The following example shows a view defined on top of orders and customers cubes.
# Both orders and customers cubes are exposed using the "includes" parameter to
# control which measures and dimensions are exposed.
# Prefixes can also be applied when exposing measures or dimensions.
# In this case, the customers' city dimension is prefixed with the cube name,
# resulting in "customers_city" when querying the view.
# views:
# - name: example_view
#
# cubes:
# - join_path: orders
# includes:
# - status
# - created_date
#
# - total_amount
# - count
#
# - join_path: orders.customers
# prefix: true
# includes:
# - city

View File

@ -1,16 +0,0 @@
{
"measures": [
"order.total",
"order.count",
"order.last_created_at"
],
"dimensions": [
"order.customer_email"
],
"filters": [],
"timeDimensions": [],
"order": {
"order.count": "desc"
},
"limit": 100
}

View File

@ -1,17 +0,0 @@
{
"measures": [
"customer.count"
],
"dimensions": [
"customer.customer_state"
],
"filters": [],
"timeDimensions": [],
"order": [
{
"id": "customer.count",
"desc": true
}
],
"limit": 100
}

View File

@ -1,8 +0,0 @@
{
"dimensions": ["order_item.name"],
"measures": ["order_item.quantity"],
"order": {
"order_item.quantity": "desc"
},
"filters": []
}

View File

@ -1,7 +0,0 @@
{
"dimensions": ["product.sku"],
"measures": ["order_item.quantity","product.siteskus"],
"order": {
"order_item.quantity": "desc"
}
}

View File

@ -1,8 +0,0 @@
{
"dimensions": ["product.sku"],
"measures": ["order_item.quantity"],
"order": {
"order_item.quantity": "desc"
},
"filters": []
}

View File

@ -1,8 +0,0 @@
{
"dimensions": ["order_item.sku"],
"measures": ["order_item.quantity"],
"order": {
"order_item.total_sales_quantity": "desc"
},
"filters": []
}

View File

@ -1,4 +0,0 @@
version: '3.8'
services:

View File

@ -1,61 +0,0 @@
version: '3.8'
services:
# MySQL 服务(可选,如果需要可以取消注释)
# mysql:
# image: mysql:8.0
# container_name: mysql-container
# restart: on-failure
# environment:
# MYSQL_ROOT_PASSWORD: root
# MYSQL_DATABASE: mydb
# ports:
# - "3306:3306"
# volumes:
# - mysql-data:/var/lib/mysql
# networks:
# - app-network
# API 服务
api:
build:
context: ../../API
dockerfile: Dockerfile
container_name: api-container
restart: on-failure
environment:
- NODE_ENV=prod
# 数据库连接信息(连接到外部 MySQL 容器)
- MYSQL_HOST=host.docker.internal
- MYSQL_PORT=23306
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=inventory
ports:
- "7001:7001"
networks:
- app-network
# WEB 服务
web:
build:
context: ../../WEB
dockerfile: Dockerfile
container_name: web-container
restart: on-failure
environment:
- NODE_ENV=prod
ports:
- "8080:80"
depends_on:
- api
networks:
- app-network
# volumes:
# mysql-data:
# driver: local
networks:
app-network:
driver: bridge

View File

@ -1,86 +1,24 @@
version: '3.8' version: '3.8'
services: services:
# MySQL 服务(可选,如果需要可以取消注释) mysql-container:
# mysql: image: mysql:8.0
# image: mysql:8.0 container_name: mysql-container
# container_name: mysql-container
# restart: on-failure
# environment:
# MYSQL_ROOT_PASSWORD: 12345678
# MYSQL_DATABASE: inventory_v2
# ports:
# - "23306:3306"
# volumes:
# - ./mysql/data:/var/lib/mysql
# networks:
# - app-network
# API 服务
api:
image: node:22-alpine
container_name: api-container
restart: on-failure restart: on-failure
environment: environment:
- NODE_ENV=prod MYSQL_ROOT_PASSWORD: root
# 数据库连接信息(连接到外部 MySQL 容器) MYSQL_DATABASE: mydb
- MYSQL_HOST=host.docker.internal
- MYSQL_PORT=23306
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=inventory
volumes:
- ../../API:/app
working_dir: /app
command: sh -c "npm run dev"
ports: ports:
- "7001:7001" - "23306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
networks: networks:
- app-network - mysql-network
# Cube 服务 volumes:
cube: mysql-data:
image: cubejs/cube:latest driver: local
ports:
- 4000:4000
environment:
- CUBEJS_DEV_MODE=true
- CUBEJS_DB_TYPE=mysql
- CUBEJS_DB_HOST=host.docker.internal
- CUBEJS_DB_PORT=23306
- CUBEJS_DB_USER=cubejs
- CUBEJS_DB_PASS=12345678
- CUBEJS_DB_NAME=inventory_v2
- CUBEJS_DB_SSL=false
- CUBEJS_API_SECRET=your-secret-here
- CUBEJS_WEB_SOCKETS=true
# - CUBEJS_REFRESH_SCHEMA=true
volumes:
- ./cube/conf:/cube/conf
# networks:
# - app-network
# network_mode: host
# WEB 服务
web:
image: nginx:alpine
container_name: web-container
restart: on-failure
volumes:
- ../../WEB/dist:/usr/share/nginx/html
- ../../WEB/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
depends_on:
- api
networks:
- app-network
# volumes:
# mysql-data:
# driver: local
networks: networks:
app-network: mysql-network:
driver: bridge driver: bridge

View File

@ -1,57 +0,0 @@
version: '3.8'
services:
# MySQL 服务(可选,如果需要可以取消注释)
# mysql:
# image: mysql:8.0
# container_name: mysql-container
# restart: on-failure
# environment:
# MYSQL_ROOT_PASSWORD: root
# MYSQL_DATABASE: mydb
# ports:
# - "3306:3306"
# volumes:
# - mysql-data:/var/lib/mysql
# networks:
# - app-network
# API 服务
api:
image: container-api:latest
container_name: api-container
restart: on-failure
environment:
- NODE_ENV=prod
# 数据库连接信息(连接到外部 MySQL 容器)
- MYSQL_HOST=host.docker.internal
- MYSQL_PORT=23306
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=inventory
ports:
- "7001:7001"
networks:
- app-network
# WEB 服务
web:
image: container-web:latest
container_name: web-container
restart: on-failure
environment:
- NODE_ENV=prod
ports:
- "8080:80"
depends_on:
- api
networks:
- app-network
# volumes:
# mysql-data:
# driver: local
networks:
app-network:
driver: bridge

View File

@ -17,11 +17,11 @@
## 【使用流程】 ## 【使用流程】
### 方案一:忽略SSL验证(仅开发环境) ### 方案一忽略SSL验证仅开发环境)
#### 1. 修改axios配置 #### 1. 修改axios配置
在`src/service/wp.service.ts`中的`fetchPagedData`方法添加SSL配置: 在`src/service/wp.service.ts`中的`fetchPagedData`方法添加SSL配置
```typescript ```typescript
// 在fetchPagedData方法中修改config配置 // 在fetchPagedData方法中修改config配置
@ -46,7 +46,7 @@ const config: AxiosRequestConfig = {
#### 2. 全局axios配置 #### 2. 全局axios配置
在项目入口文件中添加全局配置: 在项目入口文件中添加全局配置
```typescript ```typescript
// 在src/configuration.ts或app.ts中添加 // 在src/configuration.ts或app.ts中添加
@ -61,11 +61,11 @@ if (process.env.NODE_ENV === 'development') {
} }
``` ```
### 方案二:环境变量控制(推荐) ### 方案二:环境变量控制(推荐)
#### 1. 创建环境配置 #### 1. 创建环境配置
在`.env`文件中添加: 在`.env`文件中添加
```bash ```bash
# SSL配置 # SSL配置
@ -83,7 +83,7 @@ import { Config } from '@midwayjs/core';
@Provide() @Provide()
export class WPService { export class WPService {
@Config('wpSite') @Config('wpSite')
sites: Site[]; sites: WpSite[];
// 获取SSL配置 // 获取SSL配置
private getHttpsAgent() { private getHttpsAgent() {
@ -100,7 +100,7 @@ export class WPService {
async fetchPagedData<T>( async fetchPagedData<T>(
endpoint: string, endpoint: string,
site: Site, site: WpSite,
page: number = 1, page: number = 1,
perPage: number = 100 perPage: number = 100
): Promise<T[]> { ): Promise<T[]> {
@ -141,7 +141,7 @@ export class WPService {
} catch (error) { } catch (error) {
// 增强错误处理 // 增强错误处理
if (error.code === 'DEPTH_ZERO_SELF_SIGNED_CERT') { if (error.code === 'DEPTH_ZERO_SELF_SIGNED_CERT') {
console.error('SSL证书错误:请检查证书配置或在开发环境中忽略SSL验证'); console.error('SSL证书错误请检查证书配置或在开发环境中忽略SSL验证');
} }
throw error; throw error;
} }
@ -152,7 +152,7 @@ export class WPService {
} }
``` ```
### 方案三:安装自签名证书(生产环境推荐) ### 方案三:安装自签名证书(生产环境推荐)
#### 1. 生成证书 #### 1. 生成证书
@ -181,7 +181,7 @@ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
| 测试环境 | 建议验证 | 使用测试证书 | 中 | | 测试环境 | 建议验证 | 使用测试证书 | 中 |
| 生产环境 | 必须验证 | 有效SSL证书 | 高 | | 生产环境 | 必须验证 | 有效SSL证书 | 高 |
### 代码示例:环境检测 ### 代码示例环境检测
```typescript ```typescript
// 环境安全检测 // 环境安全检测

View File

@ -26,7 +26,7 @@
## 【使用流程】 ## 【使用流程】
### 步骤1:创建URL工具类 ### 步骤1创建URL工具类
```typescript ```typescript
// src/utils/url.util.ts // src/utils/url.util.ts
@ -56,12 +56,12 @@ export class UrlUtil {
} }
/** /**
* 标准化URL路径(移除重复斜杠) * 标准化URL路径移除重复斜杠)
* @param url 原始URL * @param url 原始URL
* @returns 标准化后的URL * @returns 标准化后的URL
*/ */
static normalizeUrl(url: string): string { static normalizeUrl(url: string): string {
// 保护协议部分的双斜杠(如 http:// // 保护协议部分的双斜杠如 http://
const protocolMatch = url.match(/^([a-zA-Z][a-zA-Z\d+\-.]*:\/\/)/); const protocolMatch = url.match(/^([a-zA-Z][a-zA-Z\d+\-.]*:\/\/)/);
const protocol = protocolMatch ? protocolMatch[1] : ''; const protocol = protocolMatch ? protocolMatch[1] : '';
const restUrl = protocolMatch ? url.slice(protocol.length) : url; const restUrl = protocolMatch ? url.slice(protocol.length) : url;
@ -72,7 +72,7 @@ export class UrlUtil {
} }
``` ```
### 步骤2:创建专用API URL构建器 ### 步骤2创建专用API URL构建器
```typescript ```typescript
// 扩展UrlUtil类添加WordPress专用方法 // 扩展UrlUtil类添加WordPress专用方法
@ -102,7 +102,7 @@ export class UrlUtil {
} }
``` ```
### 步骤3:在服务中应用 ### 步骤3在服务中应用
```typescript ```typescript
// src/service/wp.service.ts // src/service/wp.service.ts
@ -112,22 +112,22 @@ import { UrlUtil } from '../utils/url.util';
export class WPService { export class WPService {
async fetchPagedData<T>( async fetchPagedData<T>(
endpoint: string, endpoint: string,
site: Site, site: WpSite,
page: number = 1, page: number = 1,
perPage: number = 100 perPage: number = 100
): Promise<T[]> { ): Promise<T[]> {
const { wpApiUrl, consumerKey, consumerSecret } = site; const { wpApiUrl, consumerKey, consumerSecret } = site;
// 原始方式(容易出错) // 原始方式容易出错)
// const url = `${wpApiUrl}/wp-json${endpoint}`; // const url = `${wpApiUrl}/wp-json${endpoint}`;
// 推荐方式(安全可靠) // 推荐方式安全可靠)
const url = UrlUtil.buildWpApiUrl(wpApiUrl, endpoint); const url = UrlUtil.buildWpApiUrl(wpApiUrl, endpoint);
// ... 其他代码 // ... 其他代码
} }
async createShipment(site: Site, orderId: string, data: Record<string, any>) { async createShipment(site: WpSite, orderId: string, data: Record<string, any>) {
const { wpApiUrl, consumerKey, consumerSecret } = site; const { wpApiUrl, consumerKey, consumerSecret } = site;
// 复杂路径拼接示例 // 复杂路径拼接示例
@ -151,7 +151,7 @@ export class WPService {
### 问题场景演示 ### 问题场景演示
```typescript ```typescript
// 问题场景:配置文件中的URL格式不统一 // 问题场景配置文件中的URL格式不统一
const configs = [ const configs = [
{ wpApiUrl: 'http://wp-test.local/' }, // 带尾部斜杠 { wpApiUrl: 'http://wp-test.local/' }, // 带尾部斜杠
{ wpApiUrl: 'http://wp-test.local' }, // 不带尾部斜杠 { wpApiUrl: 'http://wp-test.local' }, // 不带尾部斜杠
@ -169,7 +169,7 @@ configs.forEach(config => {
endpoints.forEach(endpoint => { endpoints.forEach(endpoint => {
const badUrl = `${config.wpApiUrl}/wp-json${endpoint}`; const badUrl = `${config.wpApiUrl}/wp-json${endpoint}`;
console.log('问题URL:', badUrl); console.log('问题URL:', badUrl);
// 输出可能包含: // 输出可能包含
// http://wp-test.local//wp-json/wc/v3/orders // http://wp-test.local//wp-json/wc/v3/orders
// http://wp-test.localwp-json/wc/v3/products // http://wp-test.localwp-json/wc/v3/products
}); });
@ -184,7 +184,7 @@ configs.forEach(config => {
endpoints.forEach(endpoint => { endpoints.forEach(endpoint => {
const safeUrl = UrlUtil.buildWpApiUrl(config.wpApiUrl, endpoint); const safeUrl = UrlUtil.buildWpApiUrl(config.wpApiUrl, endpoint);
console.log('安全URL:', safeUrl); console.log('安全URL:', safeUrl);
// 输出始终正确: // 输出始终正确
// http://wp-test.local/wp-json/wc/v3/orders // http://wp-test.local/wp-json/wc/v3/orders
// http://wp-test.local/wp-json/wc/v3/products // http://wp-test.local/wp-json/wc/v3/products
}); });

View File

@ -2,9 +2,9 @@
## erp-API 服务非 https 也可用配置 ## erp-API 服务非 https 也可用配置
webhook 调用的时候默认是需要 https但开发时本地一般不配置 ssl(或者只是自签名),所以需要在 wordpress 中添加非 https 也可用配置。 webhook 调用的时候默认是需要 https但开发时本地一般不配置 ssl或者只是自签名),所以需要在 wordpress 中添加非 https 也可用配置。
执行:在你应用的主题对应的 `functions.php` 中添加以下代码(可以放在最后即可访问非https地址 执行:在你应用的主题对应的 `functions.php` 中添加以下代码(可以放在最后即可访问非https地址
备注:路径:比如你应用的主题是 `twentytwentyfive`,则对应的文件路径是 `<siteFolder>/app/public/wp-content/themes/twentytwentyfive/functions.php` 备注:路径:比如你应用的主题是 `twentytwentyfive`,则对应的文件路径是 `<siteFolder>/app/public/wp-content/themes/twentytwentyfive/functions.php`
```php ```php
add_filter( 'http_request_args', function( $args ) { add_filter( 'http_request_args', function( $args ) {
@ -33,8 +33,8 @@ if ( (isset($_GET['consumer_key']) && isset($_GET['consumer_secret'])) || isset(
## 在wordpress管理端网页添加webhook ## 在wordpress管理端网页添加webhook
地址: <http://wp-test.local/wp-admin/admin.php?page=wc-settings&tab=advanced&section=webhooks> 地址 <http://wp-test.local/wp-admin/admin.php?page=wc-settings&tab=advanced&section=webhooks>
举例说明: 举例说明
![1760338330047](image/使用webhook自动同步woocommerce的订单/1760338330047.png) ![1760338330047](image/使用webhook自动同步woocommerce的订单/1760338330047.png)
## 最终在订单更新时会调用地址,然后进而调用 syncSingleOrder 函数 ## 最终在订单更新时会调用地址,然后进而调用 syncSingleOrder 函数

View File

@ -13,7 +13,7 @@ const config = {
wpApiUrl: 'http://wp-test.local', // wordpress地址 wpApiUrl: 'http://wp-test.local', // wordpress地址
consumerKey: 'ck_d6fc55914e2aba162bcf979a549e965a751e71ee', // woocommerce advanced 中创建rest api的key consumerKey: 'ck_d6fc55914e2aba162bcf979a549e965a751e71ee', // woocommerce advanced 中创建rest api的key
consumerSecret: 'cs_5828d66ddd23f17f7c7693f4414756ddb637fb47',// woocommerce advanced 中创建rest api的key consumerSecret: 'cs_5828d66ddd23f17f7c7693f4414756ddb637fb47',// woocommerce advanced 中创建rest api的key
name: 'Local', siteName: 'Local',
// email配置对访问不重要 // email配置对访问不重要
email: '*', email: '*',
emailPswd: '*', emailPswd: '*',
@ -24,15 +24,15 @@ const config = {
``` ```
## 开通woocommere 权限(key ## 开通woocommere 权限key
key只要添加即可使用(一般测试直接添加具有 READ WRITE 权限即可) key只要添加即可使用一般测试直接添加具有 READ WRITE 权限即可)
![1760323937560](image/如何连接wordpress/1760323937560.png) ![1760323937560](image/如何连接wordpress/1760323937560.png)
## 常见问题 ## 常见问题
### SSL证书问题 ### SSL证书问题
因为是我们访问 woocommerce 所以可以直接忽略 ssl 错误(比如 axios 直接忽略) 因为是我们访问 woocommerce 所以可以直接忽略 ssl 错误比如 axios 直接忽略)
如果遇到SSL证书错误(如`DEPTH_ZERO_SELF_SIGNED_CERT`),请参考:[SSL证书问题解决方案](./SSL证书问题解决方案.md) 如果遇到SSL证书错误(如`DEPTH_ZERO_SELF_SIGNED_CERT`),请参考:[SSL证书问题解决方案](./SSL证书问题解决方案.md)

View File

@ -1,5 +1,5 @@
# 如何快速搭建你的wordpress # 如何快速搭建你的wordpress
## 直接使用 `local` 这个软件进行搭建 ## 直接使用 `local` 这个软件进行搭建
网站: https://localwp.com/ 网站 https://localwp.com/

View File

@ -8,7 +8,7 @@
### ECONNRESET 错误原因 ### ECONNRESET 错误原因
`ECONNRESET` 是一个网络连接重置错误,通常由以下原因引起: `ECONNRESET` 是一个网络连接重置错误,通常由以下原因引起
1. **服务器主动断开连接** 1. **服务器主动断开连接**
- 服务器负载过高 - 服务器负载过高
@ -103,7 +103,7 @@ if (hasMore) {
### 2. 超时配置 ### 2. 超时配置
- 设置合理的请求超时时间(建议 30-60 秒) - 设置合理的请求超时时间建议 30-60 秒)
- 根据网络环境调整超时参数 - 根据网络环境调整超时参数
### 3. 重试策略 ### 3. 重试策略
@ -120,9 +120,9 @@ if (hasMore) {
## 代码实现 ## 代码实现
已在 `wp.service.ts``fetchPagedData` 方法中实现以下改进: 已在 `wp.service.ts``fetchPagedData` 方法中实现以下改进
1. ✅ 添加重试机制(最多重试3次 1. ✅ 添加重试机制最多重试3次
2. ✅ 实现指数退避算法 2. ✅ 实现指数退避算法
3. ✅ 优化 HTTPS Agent 配置 3. ✅ 优化 HTTPS Agent 配置
4. ✅ 添加请求超时设置 4. ✅ 添加请求超时设置

View File

@ -1,61 +0,0 @@
# 商品上架流程
本文档描述了从准备商品数据到同步至多个 WooCommerce 站点的完整流程。
## 流程图 (Mermaid)
```mermaid
graph TD
%% 节点样式定义
classDef process fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef storage fill:#fff9c4,stroke:#fbc02d,stroke-width:2px;
classDef action fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
Start((开始)) --> Step1[制作批量导入表]
subgraph 数据准备阶段
Step1 -->|包含| Info1[基础属性]
Step1 -->|包含| Info2[商品组成/SKU]
Info1 -.-> TableFile(Excel/CSV 文件)
Info2 -.-> TableFile
end
TableFile --> Step2{导入 ERP 系统}
subgraph ERP处理阶段
Step2 -->|解析 & 存储| ERPDB[(ERP 商品数据库)]
ERPDB --> Step3[用户操作: 点击同步按钮]
end
Step3 --> SyncProcess{分发同步任务}
subgraph 多站点同步
SyncProcess -->|API 推送| SiteA[WooCommerce 站点 A]
SyncProcess -->|API 推送| SiteB[WooCommerce 站点 B]
SyncProcess -->|API 推送| SiteC[WooCommerce 站点 C]
end
SiteA --> End((上架完成))
SiteB --> End
SiteC --> End
%% 应用样式
class Step1,Step2,Step3,SyncProcess process;
class ERPDB,TableFile storage;
class Start,End action;
```
## 详细步骤说明
1. **制作批量导入表**
* 准备 Excel 或 CSV 格式的数据表。
* **关键内容**:必须包含商品的**基础属性**(如名称、描述、分类)和**商品组成**(如变体 SKU、价格、库存
2. **导入 ERP 系统**
* 将制作好的表格上传至 ERP 系统。
* 系统会自动解析文件,将商品数据存入 ERP 的商品数据库中。
3. **多站点同步**
* 在 ERP 系统中找到已导入的商品。
* 点击**“同步”**按钮。
* 系统将自动把商品信息推送到配置好的多个 **WooCommerce** 站点,完成上架。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

View File

@ -1,2 +0,0 @@
网站,账号 ,密码,验证码
admin.yoone.ca,admin,yoone2025.,yoone2025!@YOONE0923
1 网站 账号 密码 验证码
2 admin.yoone.ca admin yoone2025. yoone2025!@YOONE0923

View File

@ -152,7 +152,7 @@
│ │ │ │ │────│ │ │ │ │ │ │ │────│ │ │
│ │ • id │ │ • id │ │ • id │ │ │ │ • id │ │ • id │ │ • id │ │
│ │ • productId │ │ • quantity │ │ • name │ │ │ │ • productId │ │ • quantity │ │ • name │ │
│ │ • sku │ │ • sku│ │ • address │ │ │ │ • sku │ │ • productSku│ │ • address │ │
│ │ • price │ └─────────────┘ └─────────────┘ │ │ │ • price │ └─────────────┘ └─────────────┘ │
│ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │

View File

@ -45,7 +45,7 @@
**业务描述**: 完整的订单生命周期管理,从创建到发货的全流程 **业务描述**: 完整的订单生命周期管理,从创建到发货的全流程
**精彩之处**: **精彩之处**:
- 双状态管理:WooCommerce状态 + ERP内部状态 - 双状态管理WooCommerce状态 + ERP内部状态
- 完整的订单项目管理,支持原始订单和销售订单分离 - 完整的订单项目管理,支持原始订单和销售订单分离
- 订单退款、优惠券、运费等复杂业务场景支持 - 订单退款、优惠券、运费等复杂业务场景支持
- 订单同步机制支持从WooCommerce自动同步订单 - 订单同步机制支持从WooCommerce自动同步订单
@ -79,7 +79,7 @@
**业务描述**: 集成多个物流服务商的发货管理系统 **业务描述**: 集成多个物流服务商的发货管理系统
**精彩之处**: **精彩之处**:
- 集成多个物流服务商:FreightCom、CanadaPost、UniExpress - 集成多个物流服务商FreightCom、CanadaPost、UniExpress
- 运费计算和比较功能 - 运费计算和比较功能
- 自动生成运单和跟踪号 - 自动生成运单和跟踪号
- 物流状态同步到WooCommerce - 物流状态同步到WooCommerce

View File