在实现锁定优惠券的过程中:
1、锁定优惠券记录 将coupon_record 中当前用户的优惠券的状态由new改为lock
<!--批量锁定优惠券记录-->
<update id="lockUserStateBatch">
update coupon_record set user_state = #{useState} where user_id = #{userId} and user_state = "NEW"
and id in
<foreach collection="lockCouponRecordIds" index="index" item ="id"
separator="," open="(" close=")">
#{id}
</foreach>
</update>
2、coupon_task表插入记录
<!--批量插入-->
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
insert into coupon_task
( <include refid="Base_Column_List_No_Id"></include>)
values
<foreach collection="couponTaskList" item="item" index="index" separator=",">
(#{item.couponRecordId},
#{item.createrTime},
#{item.lockState}
)
</foreach>
</insert>
3、发送延迟消息
配置rabbitMQ
mqconfig:
# 延迟队列,不能被监听消费
coupon_release_delay_queue: coupon.release.delay.queue
# 延迟队列的消息过期后转发的队列
coupon_release_queue: coupon.release.queue
# 交换机
coupon_event_exchange: coupon.event.exchange
# 进入延迟队列的路由key
coupon_release_delay_routing_key:
coupon.release.delay.routing.key
# 消息过期,进入释放死信队列的key
coupon_release_routing_key:
coupon.release.routing.key
# 消息过期的时间,毫秒
ttl: 15000
然后需要将以上配置信息读取到配置类里面