mirror of https://github.com/jeecgboot/jeecg-boot
41 lines
1.3 KiB
Java
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; |