select vo.id, vo.order_no, vo.user_id, u.user_name, u.nick_name,
vo.resource_id, r.resource_title, vo.product_id, vo.price_fen,
vo.open_id, vo.status, vo.wx_order_no, vo.transaction_id,
vo.create_time, vo.pay_time, vo.provide_time, vo.refund_time, vo.last_query_time
from app_virtual_order vo
left join sys_user u on u.user_id = vo.user_id
left join app_resource r on r.id = vo.resource_id
insert into app_virtual_order
(order_no, user_id, resource_id, product_id, price_fen, open_id, status, create_time)
values
(#{orderNo}, #{userId}, #{resourceId}, #{productId}, #{priceFen}, #{openId}, #{status}, #{createTime})
update app_virtual_order
set status = 1,
wx_order_no = coalesce(#{wxOrderNo}, wx_order_no),
transaction_id = coalesce(#{transactionId}, transaction_id),
pay_time = coalesce(#{payTime}, pay_time),
provide_time = now()
where order_no = #{orderNo} and status = 0
insert into app_resource_entitlement
(user_id, resource_id, order_no, status, granted_time)
values
(#{userId}, #{resourceId}, #{orderNo}, 1, now())
on duplicate key update
order_no = values(order_no),
status = 1,
granted_time = now(),
revoked_time = null
update app_virtual_order
set status = 2, refund_time = #{refundTime}
where order_no = #{orderNo} and status in (0, 1)
update app_resource_entitlement
set status = 0, revoked_time = now()
where order_no = #{orderNo} and status = 1
update app_virtual_order set status = 3
where order_no = #{orderNo} and status = 0
update app_virtual_order
set last_query_time = now()
where order_no = #{orderNo}
and status = 0
and (last_query_time is null or last_query_time < date_sub(now(), interval 5 second))