Files
RuoYi-Vue/ruoyi-system/src/main/resources/mapper/app/AppVirtualOrderMapper.xml

151 lines
6.5 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.app.mapper.AppVirtualOrderMapper">
<resultMap id="AppVirtualOrderResult" type="AppVirtualOrder">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/>
<result property="resourceId" column="resource_id"/>
<result property="resourceTitle" column="resource_title"/>
<result property="productId" column="product_id"/>
<result property="priceFen" column="price_fen"/>
<result property="openId" column="open_id"/>
<result property="status" column="status"/>
<result property="wxOrderNo" column="wx_order_no"/>
<result property="transactionId" column="transaction_id"/>
<result property="createTime" column="create_time"/>
<result property="payTime" column="pay_time"/>
<result property="provideTime" column="provide_time"/>
<result property="refundTime" column="refund_time"/>
<result property="lastQueryTime" column="last_query_time"/>
</resultMap>
<sql id="selectAppVirtualOrderVo">
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
</sql>
<insert id="insertAppVirtualOrder" parameterType="AppVirtualOrder" useGeneratedKeys="true" keyProperty="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})
</insert>
<select id="selectByOrderNo" resultMap="AppVirtualOrderResult">
select id, order_no, user_id, resource_id, product_id, price_fen, open_id, status,
wx_order_no, transaction_id, create_time, pay_time, provide_time, refund_time, last_query_time
from app_virtual_order
where order_no = #{orderNo}
limit 1
</select>
<select id="selectAppVirtualOrderById" parameterType="Long" resultMap="AppVirtualOrderResult">
<include refid="selectAppVirtualOrderVo"/>
where vo.id = #{id}
</select>
<select id="selectAppVirtualOrderList" parameterType="AppVirtualOrder" resultMap="AppVirtualOrderResult">
<include refid="selectAppVirtualOrderVo"/>
<where>
<if test="orderNo != null and orderNo != ''">
and vo.order_no like concat('%', #{orderNo}, '%')
</if>
<if test="transactionId != null and transactionId != ''">
and vo.transaction_id like concat('%', #{transactionId}, '%')
</if>
<if test="wxOrderNo != null and wxOrderNo != ''">
and vo.wx_order_no like concat('%', #{wxOrderNo}, '%')
</if>
<if test="userId != null">and vo.user_id = #{userId}</if>
<if test="userName != null and userName != ''">
and (u.user_name like concat('%', #{userName}, '%')
or u.nick_name like concat('%', #{userName}, '%'))
</if>
<if test="resourceId != null">and vo.resource_id = #{resourceId}</if>
<if test="productId != null and productId != ''">
and vo.product_id like concat('%', #{productId}, '%')
</if>
<if test="openId != null and openId != ''">
and vo.open_id like concat('%', #{openId}, '%')
</if>
<if test="status != null">and vo.status = #{status}</if>
<if test="params.beginTime != null and params.beginTime != ''">
and vo.create_time &gt;= #{params.beginTime}
</if>
<if test="params.endTime != null and params.endTime != ''">
and vo.create_time &lt;= concat(#{params.endTime}, ' 23:59:59')
</if>
</where>
order by vo.create_time desc, vo.id desc
</select>
<select id="countAnyEntitlement" resultType="int">
select
(select count(1) from app_resource_entitlement
where user_id = #{userId} and resource_id = #{resourceId} and status = 1)
+
(select count(1) from app_integral_record
where user_id = #{userId}
and resource_id = #{resourceId}
and source = '资源兑换'
and is_add = 1)
</select>
<update id="markPaid">
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
</update>
<insert id="insertEntitlement" parameterType="AppVirtualOrder">
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
</insert>
<update id="markRefunded">
update app_virtual_order
set status = 2, refund_time = #{refundTime}
where order_no = #{orderNo} and status in (0, 1)
</update>
<update id="deleteEntitlementByOrderNo">
update app_resource_entitlement
set status = 0, revoked_time = now()
where order_no = #{orderNo} and status = 1
</update>
<update id="markClosed">
update app_virtual_order set status = 3
where order_no = #{orderNo} and status = 0
</update>
<update id="markQuerying">
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 &lt; date_sub(now(), interval 5 second))
</update>
</mapper>