jeecg-boot/db/views/calculate_shipping_fees.sql

41 lines
1.3 KiB
Java

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;