DELIMITER $$
USE `qrsoft_dyj_db`$$
DROP PROCEDURE IF EXISTS `proc_withdraw_approve`$$
CREATE PROCEDURE `proc_withdraw_approve`(
IN p_apply_id INT,
IN p_handleuserid INT,
IN p_handlestate INT,
IN p_handletype INT,
IN p_bankreceipt VARCHAR(200),
IN p_apply_mark VARCHAR(2000),
IN p_cash_serial VARCHAR(200))
label_pro : BEGIN
DECLARE apply_userid INT;
DECLARE apply_balance DECIMAL;
DECLARE apply_code VARCHAR(200);
DECLARE before_avabalance DECIMAL;
START TRANSACTION;
-- 校驗審核記錄ID
IF p_apply_id = 0 THEN
SELECT -1002 AS RESULT_CODE;
ROLLBACK;
LEAVE label_pro ;
END IF;
-- 校驗審核狀態
IF p_handlestate <> 2 && p_handlestate <> 3 THEN
SELECT -1001 AS RESULT_CODE;
ROLLBACK;
LEAVE label_pro;
END IF;
-- 查詢用戶ID 提現訂單號 提現金額
SELECT applyrecord_ref_userid ,
applyrecord_balance ,
applyrecord_code INTO apply_userid, apply_balance ,apply_code
FROM qr_apply_record
WHERE applyrecord_id = p_apply_id;
IF p_handlestate = 2 THEN -- 審核成功
-- 更新提現信息表
UPDATE qr_apply_record SET
applyrecord_handlestate = p_handlestate,
applyrecord_handletime = NOW(),
applyrecord_handleuserid = p_handleuserid,
applyrecord_handletype = p_handletype,
applyrecord_bankreceipt = p_bankreceipt ,
applyrecord_mark = p_apply_mark
WHERE applyrecord_id = p_apply_id;
-- 修改用戶賬號信息表中累計提現金額值
UPDATE qr_useraccount SET account_drawalsbalance = account_drawalsbalance + apply_balance
WHERE account_ref_userid = apply_userid;
ELSE -- 審核失敗
-- 更新提現信息表
UPDATE qr_apply_record SET
applyrecord_handlestate = p_handlestate,
applyrecord_handletime = NOW(),
applyrecord_handleuserid = p_handleuserid,
applyrecord_mark = p_apply_mark
WHERE applyrecord_id = p_apply_id;
-- 返還提現金額到賬戶余額和添加退款記錄
-- 1.查詢用戶變動前可用余額
SELECT account_avabalance INTO before_avabalance FROM qr_useraccount
WHERE account_ref_userid = apply_userid;
-- 2.更新賬戶可用余額
UPDATE qr_useraccount SET account_avabalance = before_avabalance + apply_balance
WHERE account_ref_userid = apply_userid;
-- 3.添加退款記錄
-- 交易類型 (4:退款(旅游訂單申請退款) 5:退款(提現申請被拒絕退款))
-- 交易方式 1:余額支付
INSERT INTO `qr_cash_record` (`cashrecord_serial`,
`cashrecord_ref_userid`,
`cashrecord_beforebalance`,
`cashrecord_balance`,
`cashrecord_afterbalance`,
`cashrecord_type`,
`cashrecord_time`,
cashrecord_ref_id,
cashrecord_model)
VALUES (
p_cash_serial,
apply_userid,
before_avabalance,
apply_balance,
(before_avabalance + apply_balance), 5, NOW(), p_apply_id, 1);
END IF;
COMMIT;
SELECT 1 AS RESULT_CODE;
END$$
DELIMITER ;