call create_order_infos(7,2,3);
delimiter $$
create procedure create_order_infos(
in in_user_id int,
in in_product_id int,
in in_count int
)
begin
-- 判断用户是否有消费资格
declare count_money decimal(10,2); -- 用户余额
declare out_price decimal(10,2); -- 产品价格
declare all_price decimal(10,2); -- 总消费金额
declare result_str varchar(200); -- 用于返回消息
select balance into count_money from user_wallet where user_id=in_user_id; -- 赋值有多少钱
select price into out_price from product where product_id=in_product_id; -- 获取产品的单价
set all_price=out_price * in_count; -- 总消费金额
-- 判断是否能消费的起
if all_price>count_money then
set result_str = concat('金额不足',all_price,'您当前账户余额:',count_money,'请充值。');
signal sqlstate '45000' set message_text=result_str;
end if;
-- 需要修改以及插入具体数据,共涉及到5张表的操作,2表修改,3个插入
update user_wallet set balance=balance-all_price where user_id=in_user_id; -- 1、修改用户钱包余额
update product set stock=stock-in_count where product_id=in_product_id; -- 1、修改产品表的产品数量
insert into user_wallet_log (user_id,transaction_type,amount)values(in_user_id,'消费',all_price); -- 3、添加消费日志
insert into user_wallet_log (user_id,transaction_type,amount)values `order`(user_id,order_status,payment_status,payment_time,total_price)values(in_user_id,'已支付',now(),all_price); --4、添加订单
代码HHH
最新推荐文章于 2024-07-14 19:46:27 发布