Add SQL backup scripts for existing views

pull/6221/head
Qiuyi LI 2023-08-07 16:27:36 +02:00
parent b192d43a4c
commit 3570da7c0f
18 changed files with 489 additions and 0 deletions

76
db/util.sql Normal file
View File

@ -0,0 +1,76 @@
SELECT DISTINCT sku_id FROM platform_order_content WHERE sku_id not LIKE '1%';
UPDATE platform_order
SET fret_fee = NULL,
shipping_invoice_number = NULL
WHERE shipping_invoice_number IS NOT NULL;
UPDATE platform_order_content
SET shipping_fee = NULL,
service_fee = NULL,
vat = NULL
WHERE vat IS NOT NULL;
DELETE from platform_order_content WHERE sku_id is NULL;
SELECT @@character_set_database, @@collation_database;
SHOW VARIABLES LIKE 'collation%';
SHOW TABLE STATUS LIKE 'sen%';
ALTER DATABASE wia_app COLLATE utf8mb4_general_ci;
SELECT c.internal_code AS '',
s.erp_code AS SKU,
p.zh_name AS '',
p.weight AS '',
ROUND(calculate_shipping_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24',
p.weight), 2) AS '',
get_registration_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24',
p.weight) AS ''
FROM sku s
LEFT JOIN client_sku ON s.id = client_sku.sku_id
LEFT JOIN client c ON client_sku.client_id = c.id
JOIN product p ON p.id = s.product_id
JOIN sensitive_attribute sa ON p.sensitive_attribute_id = sa.id;
SELECT c.internal_code AS 'Client',
po.platform_order_id AS 'Order ID',
po.logistic_channel_name AS 'Logistic Channel',
po.platform_order_number AS 'Order Number',
po.order_time AS 'Order Time',
po.shipping_time AS 'Shipping Time',
po.country AS 'Country',
IF(s.erp_code IS NULL, poc.sku_id, s.erp_code) AS 'SKU',
poc.quantity AS 'Quantity',
po.fret_fee AS 'Fret Fee',
(SELECT SUM(poc.shipping_fee)
WHERE poc.platform_order_id = po.id) AS 'Shipping Fee',
poc.service_fee AS 'Service Fee',
po.status AS 'Status'
FROM platform_order po
JOIN platform_order_content poc ON po.id = poc.platform_order_id
LEFT JOIN shop ON po.shop_id = shop.id
LEFT JOIN client c ON shop.owner_id = c.id
LEFT JOIN sku s ON poc.sku_id = s.id
WHERE po.erp_status = 3
ORDER BY Client;
SELECT json_array(poc.shipping_fee)
from platform_order_content poc JOIN platform_order po ON po.id = poc.platform_order_id
WHERE poc.platform_order_id = po.id;
SELECT s.erp_code, count(DISTINCT po.id), sum(poc.quantity)
FROM platform_order po
JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN shop s ON po.shop_id = s.id
WHERE shipping_invoice_number IS not NULL
AND po.erp_status = '3'
GROUP BY erp_code
ORDER BY erp_code;
SELECT s.erp_code, po.*
FROM platform_order po
JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN shop s ON po.shop_id = s.id
WHERE shipping_invoice_number IS NULL
AND po.erp_status = '3' and (erp_code = 'EP5' OR erp_code ='EP6')
ORDER BY erp_code;

13
db/views/api_view.sql Normal file
View File

@ -0,0 +1,13 @@
CREATE OR REPLACE VIEW api_view AS
SELECT p.country, p.third_bill_code as trackingNumber,
(SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'scanType', scan_type,
'scanTime', scan_time,
'description', IF(description_en IS NOT NULL, description_en, description)
))
FROM parcel_trace pt
WHERE p.id = pt.parcel_id
ORDER BY scan_time DESC
) AS traces
FROM parcel p;

View File

@ -0,0 +1,41 @@
CREATE FUNCTION calculate_shipping_fees(logistic_channel varchar(50), country varchar(2), shipping_date date,
weight int) RETURNS DOUBLE
BEGIN
DECLARE minimum_weight INT;
DECLARE minimum_weight_price double;
DECLARE cal_unit INT;
DECLARE cal_unit_price double;
DECLARE additional_cost double;
DECLARE shipping_fee double;
SELECT lcp.minimum_weight,
lcp.minimum_weight_price,
lcp.cal_unit,
lcp.cal_unit_price,
lcp.additional_cost
INTO minimum_weight,
minimum_weight_price,
cal_unit,
cal_unit_price,
additional_cost
FROM logistic_channel_price lcp
JOIN logistic_channel lc ON lc.id = lcp.channel_id
WHERE lc.zh_name = logistic_channel
AND weight_range_start <= weight
AND weight_range_end >= weight
AND effective_country = country
AND effective_date <= shipping_date
ORDER BY effective_date
DESC
LIMIT 1;
IF weight = 0 THEN
SET shipping_fee = 0;
ELSEIF weight < minimum_weight THEN
SET shipping_fee = minimum_weight_price;
ELSE
SET shipping_fee = ((weight - minimum_weight) / cal_unit) * cal_unit_price + minimum_weight_price;
END IF;
RETURN shipping_fee;
END;

View File

@ -0,0 +1,30 @@
CREATE OR REPLACE VIEW detail_de_facture AS
SELECT s.name AS 'Boutique',
po.platform_order_id AS 'N° de Mabang',
po.platform_order_number AS 'N° de commande',
po.tracking_number AS 'N° de suivi',
po.order_time AS 'Date de commande',
po.shipping_time AS 'Date d\'expédition',
po.recipient AS 'Nom de client',
po.country AS 'Pays',
po.postcode AS 'Code postal',
JSON_ARRAYAGG(sku.erp_code) AS 'SKU',
JSON_ARRAYAGG(p.en_name) AS 'Nom produits',
JSON_ARRAYAGG(poc.quantity) AS 'Quantité',
SUM(poc.purchase_fee) AS 'Frais d\'achat',
po.fret_fee AS 'Frais de FRET',
SUM(poc.shipping_fee) AS 'Frais de livraison',
po.order_service_fee + SUM(poc.service_fee) AS 'Frais de service',
po.picking_fee + SUM(poc.picking_fee) AS 'Frais de préparation',
po.packaging_material_fee AS 'Frais de matériel d\'emballage',
SUM(poc.vat) AS 'TVA',
po.shipping_invoice_number AS 'N° de facture'
FROM platform_order po
JOIN shop s ON po.shop_id = s.id
RIGHT JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN sku ON poc.sku_id = sku.id
JOIN product p ON sku.product_id = p.id
WHERE shipping_invoice_number IS NOT NULL
AND poc.erp_status <> 5
GROUP BY po.id, s.name, po.order_time
ORDER BY s.name, po.order_time;

View File

@ -0,0 +1,51 @@
CREATE OR REPLACE VIEW full_logistic_expense_detail AS
SELECT led.tracking_number AS 'trackingNumber',
led.real_weight,
led.volumetric_weight,
led.charging_weight,
led.discount,
led.shipping_fee,
led.fuel_surcharge,
led.registration_fee,
led.second_delivery_fee,
led.vat,
led.vat_service_fee,
led.total_fee,
led.logistic_company_id,
led.additional_fee
FROM logistic_expense_detail led
WHERE tracking_number = logistic_internal_number
UNION
SELECT led.logistic_internal_number AS 'trackingNumber',
led.real_weight,
led.volumetric_weight,
led.charging_weight,
led.discount,
led.shipping_fee,
led.fuel_surcharge,
led.registration_fee,
led.second_delivery_fee,
led.vat,
led.vat_service_fee,
led.total_fee,
led.logistic_company_id,
led.additional_fee
FROM logistic_expense_detail led
WHERE tracking_number <> logistic_internal_number
UNION
SELECT led.tracking_number AS 'trackingNumber',
led.real_weight,
led.volumetric_weight,
led.charging_weight,
led.discount,
led.shipping_fee,
led.fuel_surcharge,
led.registration_fee,
led.second_delivery_fee,
led.vat,
led.vat_service_fee,
led.total_fee,
led.logistic_company_id,
led.additional_fee
FROM logistic_expense_detail led
WHERE tracking_number <> logistic_internal_number;

View File

@ -0,0 +1,24 @@
CREATE FUNCTION get_registration_fees(logistic_channel varchar(50), country varchar(2), shipping_date date,
weight int) RETURNS DOUBLE
BEGIN
DECLARE registration_fee double;
SELECT lcp.registration_fee
INTO registration_fee
FROM logistic_channel_price lcp
JOIN logistic_channel lc ON lc.id = lcp.channel_id
WHERE lc.zh_name = logistic_channel
AND weight_range_start <= weight
AND weight_range_end >= weight
AND effective_country = country
AND effective_date <= shipping_date
ORDER BY effective_date
DESC
LIMIT 1;
IF weight = 0 THEN
RETURN 0;
ELSE
RETURN registration_fee;
END IF;
END;

View File

@ -0,0 +1,25 @@
CREATE OR REPLACE VIEW inventory_record AS
SELECT sku.id AS id,
cs.client_id AS client_id,
sku.product_id AS product_id,
sku.erp_code AS erp_code,
sku.image_source AS image_source,
sku.available_amount AS available_amount,
p.moq AS moq,
rs.quantity AS red_quantity,
gs.quantity AS green_quantity,
sales_7.quantity AS sales_7,
sales_14.quantity AS sales_14,
sales_28.quantity AS sales_28,
sipo.quantity AS platform_order_quantity
FROM sku
JOIN product p ON sku.product_id = p.id
JOIN client_sku cs ON sku.id = cs.sku_id
LEFT JOIN sales_7 ON sku.id = sales_7.sku_id
LEFT JOIN sales_14 ON sku.id = sales_14.sku_id
LEFT JOIN sales_28 ON sku.id = sales_28.sku_id
LEFT JOIN red_sku rs ON sku.id = rs.sku_id
LEFT JOIN green_sku gs ON sku.id = gs.sku_id
LEFT JOIN sku_in_platform_order sipo ON sku.id = sipo.sku_id
ORDER BY platform_order_quantity DESC;

View File

@ -0,0 +1,16 @@
CREATE OR REPLACE VIEW logistic_fees_by_country AS
SELECT s.name AS '',
po.country AS '',
SUM(po.fret_fee) AS '',
SUM(led.registration_fee) AS '',
SUM(poc.shipping_fee) AS '',
SUM(led.total_fee) - SUM(registration_fee) AS '',
SUM(poc.vat) AS 'TVA',
SUM(led.vat) + SUM(led.vat_service_fee) AS 'TVA'
FROM platform_order po
JOIN shop s ON po.shop_id = s.id
RIGHT JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN logistic_expense_detail led ON po.tracking_number = led.tracking_number
WHERE shipping_invoice_number IS NOT NULL
GROUP BY s.name, po.country
ORDER BY s.name

View File

@ -0,0 +1,29 @@
CREATE OR REPLACE VIEW logistic_profit_analyze AS
SELECT c.internal_code AS '',
shopErpCode AS '',
lc.name AS '',
logisticChannelName AS '线',
platformOrderId AS '',
platformOrderNumber AS '',
orderTime AS '',
shippingTime AS '',
poled.country AS '',
fretFee AS '',
registration_fee AS '',
(fretFee * 7.6 - registration_fee) AS '',
shippingFee AS '',
realShippingFee AS '',
(shippingFee * 7.6 - realShippingFee) AS '',
vatFee AS '',
(vat + vat_service_fee) AS '',
(vatFee * 7.6 - vat - vat_service_fee) AS '',
serviceFee AS '',
serviceFee * 7.6 AS '',
(fretFee * 7.6 - registration_fee + shippingFee * 7.6 -
realShippingFee + vat * 7.6 - vat - vat_service_fee) AS ''
FROM platform_order_logistic_expense_detail poled
JOIN shop s
ON shop_id = s.id
JOIN CLIENT c ON s.owner_id = c.id
JOIN logistic_company lc ON poled.logistic_company_id = lc.id;

View File

@ -0,0 +1,35 @@
CREATE OR REPLACE VIEW platform_order_logistic_expense_detail AS
SELECT s.erp_code AS 'shopErpCode',
po.tracking_number AS 'trackingNumber',
po.shop_id,
po.logistic_channel_name AS 'logisticChannelName',
po.platform_order_id AS 'platformOrderId',
po.platform_order_number AS 'platformOrderNumber',
po.order_time AS 'orderTime',
po.shipping_time AS 'shippingTime',
po.country,
po.fret_fee AS 'fretFee',
SUM(poc.shipping_fee) AS 'shippingFee',
SUM(poc.vat) AS 'vatFee',
po.order_service_fee + SUM(poc.service_fee) AS 'serviceFee',
po.shipping_invoice_number AS 'shippingInvoiceNumber',
fled.real_weight,
fled.volumetric_weight,
fled.charging_weight,
fled.discount,
fled.shipping_fee AS 'realShippingFee',
fled.fuel_surcharge,
fled.registration_fee,
fled.second_delivery_fee,
fled.vat,
fled.vat_service_fee,
fled.total_fee,
fled.logistic_company_id,
fled.additional_fee
FROM full_logistic_expense_detail fled
RIGHT JOIN platform_order po ON fled.trackingNumber = po.tracking_number
JOIN shop s ON po.shop_id = s.id
JOIN platform_order_content poc ON po.id = poc.platform_order_id
WHERE po.erp_status IN (3, 4)
GROUP BY po.id, s.erp_code
ORDER BY s.erp_code;

20
db/views/sales.sql Normal file
View File

@ -0,0 +1,20 @@
CREATE OR REPLACE VIEW sales_7 AS
SELECT poc.sku_id AS sku_id, SUM(poc.quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
WHERE po.order_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()
GROUP BY poc.sku_id;
CREATE OR REPLACE VIEW sales_14 AS
SELECT poc.sku_id AS sku_id, SUM(poc.quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
WHERE po.order_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 DAY) AND CURDATE()
GROUP BY poc.sku_id;
CREATE OR REPLACE VIEW sales_28 AS
SELECT poc.sku_id AS sku_id, SUM(poc.quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
WHERE po.order_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 28 DAY) AND CURDATE()
GROUP BY poc.sku_id;

View File

@ -0,0 +1,42 @@
CREATE OR REPLACE VIEW sales_analyze AS
SELECT c.internal_code AS '',
s.name AS '',
s.erp_code AS '',
po.platform_order_number AS '',
po.country AS '',
po.order_time AS '',
CAST(po.order_time AS DATE) AS '',
CASE
WHEN
s2.erp_code IS NULL
THEN poc.sku_id
WHEN s2.erp_code IS NOT NULL
THEN s2.erp_code
END AS 'SKU',
p.zh_name AS '',
poc.quantity AS '',
p.weight AS '',
poc.purchase_fee AS '',
poc.service_fee AS '',
poc.shipping_fee AS '',
po.fret_fee AS '',
CASE
WHEN po.erp_status = '1'
THEN ''
WHEN po.erp_status = '2'
THEN ''
WHEN po.erp_status = '3'
THEN ''
WHEN po.erp_status = '4'
THEN ''
WHEN po.erp_status = '5'
THEN ''
END AS '',
po.logistic_channel_name AS ''
FROM platform_order_content poc
LEFT JOIN sku s2 ON poc.sku_id = s2.id
LEFT JOIN product p ON s2.product_id = p.id
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
ORDER BY order_time;

View File

@ -0,0 +1,16 @@
CREATE OR REPLACE VIEW sav_refund_with_detail
AS
SELECT sr.*,
po.platform_order_id AS mabang_id,
s.erp_code,
s.name as shop_name,
po.platform_order_number,
po.fret_fee,
SUM(poc.shipping_fee) AS shipping_fee,
SUM(poc.vat) AS vat,
po.order_service_fee + SUM(poc.service_fee) AS service_fee
FROM sav_refund sr
JOIN platform_order po ON sr.platform_order_id = po.id
JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN shop s ON po.shop_id = s.id
GROUP BY po.id;

View File

@ -0,0 +1,25 @@
CREATE OR REPLACE VIEW sku_country_channel_choice AS
SELECT sku.id AS id,
cs.client_id AS client_id,
sku.product_id AS product_id,
sku.erp_code AS erp_code,
sku.image_source AS image_source,
sku.available_amount AS available_amount,
p.moq AS moq,
rs.quantity AS red_quantity,
gs.quantity AS green_quantity,
sales_7.quantity AS sales_7,
sales_14.quantity AS sales_14,
sales_28.quantity AS sales_28,
sipo.quantity AS platform_order_quantity
FROM sku
JOIN product p ON sku.product_id = p.id
JOIN client_sku cs ON sku.id = cs.sku_id
LEFT JOIN sales_7 ON sku.id = sales_7.sku_id
LEFT JOIN sales_14 ON sku.id = sales_14.sku_id
LEFT JOIN sales_28 ON sku.id = sales_28.sku_id
LEFT JOIN red_sku rs ON sku.id = rs.sku_id
LEFT JOIN green_sku gs ON sku.id = gs.sku_id
LEFT JOIN sku_in_platform_order sipo ON sku.id = sipo.sku_id
ORDER BY platform_order_quantity DESC;

View File

@ -0,0 +1,12 @@
CREATE OR REPLACE VIEW sku_current_price AS
SELECT id AS price_id,
sp.sku_id AS sku_id,
price AS price,
threshold AS threshold,
discounted_price AS discounted_price,
price_rmb AS price_rmb,
discounted_price_rmb AS discounted_price_rmb,
date AS date
FROM sku_price sp
INNER JOIN (SELECT sku_id, MAX(date) max_date FROM sku_price GROUP BY sku_id) sp2
ON sp.sku_id = sp2.sku_id AND sp.date = sp2.max_date

View File

@ -0,0 +1,5 @@
CREATE OR REPLACE VIEW sku_in_platform_order AS
SELECT poc.sku_id AS sku_id, SUM(poc.quantity) AS quantity
FROM platform_order_content poc join platform_order po ON poc.platform_order_id = po.id
WHERE po.status = 2
GROUP BY poc.sku_id;

View File

@ -0,0 +1,22 @@
CREATE OR REPLACE VIEW sku_price_promotion AS
SELECT s.id AS sku_id,
p.en_name AS name_en,
p.zh_name AS name_zh,
s.erp_code AS erp_code,
s.image_source AS image_source,
spr.promotion_id AS promotion_id,
spr.promo_milestone AS promo_milestone,
spr.quantity_purchased AS quantity_purchased,
spr.discount AS discount,
scp.price_id AS price_id,
scp.price AS price,
scp.threshold AS threshold,
scp.discounted_price AS discounted_price,
scp.price_rmb AS price_rmb,
scp.discounted_price_rmb AS discounted_price_rmb
FROM sku s
LEFT JOIN sku_promotion_relation spr ON s.id = spr.sku_id
LEFT JOIN sku_current_price scp ON s.id = scp.sku_id
JOIN product p ON s.product_id = p.id
LEFT JOIN sku_in_platform_order sipo ON s.id = sipo.sku_id
ORDER BY sipo.quantity DESC;

View File

@ -0,0 +1,7 @@
CREATE OR REPLACE VIEW sku_weight_discount_service_fees AS
SELECT s.id,
s.erp_code,
p.weight,
s.shipping_discount,
s.service_fee
FROM sku s JOIN product p ON p.id = s.product_id;