UserWalletMapper.xml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.ruoyi.system.mapper.UserWalletMapper">
  6. <resultMap type="UserWallet" id="UserWalletResult">
  7. <result property="id" column="id" />
  8. <result property="userId" column="user_id" />
  9. <result property="pointsWallet" column="points_wallet" />
  10. <result property="balanceWallet" column="balance_wallet" />
  11. <result property="blockedFunds" column="blocked_funds" />
  12. <result property="version" column="version" />
  13. </resultMap>
  14. <sql id="selectUserWalletVo">
  15. select id, user_id, points_wallet, balance_wallet, blocked_funds, version from user_wallet
  16. </sql>
  17. <select id="selectUserWalletList" parameterType="UserWallet" resultMap="UserWalletResult">
  18. <include refid="selectUserWalletVo"/>
  19. <where>
  20. <if test="pointsWallet != null "> and points_wallet = #{pointsWallet}</if>
  21. <if test="balanceWallet != null "> and balance_wallet = #{balanceWallet}</if>
  22. </where>
  23. </select>
  24. <select id="selectUserWalletById" parameterType="Long" resultMap="UserWalletResult">
  25. <include refid="selectUserWalletVo"/>
  26. where id = #{id}
  27. </select>
  28. <insert id="insertUserWallet" parameterType="UserWallet" useGeneratedKeys="true" keyProperty="id">
  29. insert into user_wallet
  30. <trim prefix="(" suffix=")" suffixOverrides=",">
  31. <if test="userId != null">user_id,</if>
  32. <if test="pointsWallet != null">points_wallet,</if>
  33. <if test="balanceWallet != null">balance_wallet,</if>
  34. <if test="blockedFunds != null">blocked_funds,</if>
  35. <if test="version != null">version,</if>
  36. </trim>
  37. <trim prefix="values (" suffix=")" suffixOverrides=",">
  38. <if test="userId != null">#{userId},</if>
  39. <if test="pointsWallet != null">#{pointsWallet},</if>
  40. <if test="balanceWallet != null">#{balanceWallet},</if>
  41. <if test="blockedFunds != null">#{blockedFunds},</if>
  42. <if test="version != null">#{version},</if>
  43. </trim>
  44. </insert>
  45. <update id="updateUserWallet" parameterType="UserWallet">
  46. update user_wallet
  47. <trim prefix="SET" suffixOverrides=",">
  48. <if test="userId != null">user_id = #{userId},</if>
  49. <if test="pointsWallet != null">points_wallet = #{pointsWallet},</if>
  50. <if test="balanceWallet != null">balance_wallet = #{balanceWallet},</if>
  51. <if test="blockedFunds != null">blocked_funds = #{blockedFunds},</if>
  52. <if test="version != null">version = #{version},</if>
  53. </trim>
  54. where id = #{id}
  55. </update>
  56. <!-- 检查余额是否足够 -->
  57. <select id="checkBalanceSufficient" resultType="boolean">
  58. select
  59. <if test="pointsWallet != null and balanceWallet != null">
  60. (points_wallet + (#{pointsWallet}) >= 0) and (balance_wallet + (#{balanceWallet}) >= 0)
  61. </if>
  62. <if test="pointsWallet != null and balanceWallet == null">
  63. points_wallet + (#{pointsWallet}) >= 0
  64. </if>
  65. <if test="pointsWallet == null and balanceWallet != null">
  66. balance_wallet + (#{balanceWallet}) >= 0
  67. </if>
  68. from user_wallet
  69. where id = #{id} and version = #{version}
  70. </select>
  71. <!-- 获取余额检查结果详情 -->
  72. <select id="getBalanceCheckResult" resultType="map">
  73. select
  74. id,
  75. points_wallet as currentPointsWallet,
  76. balance_wallet as currentBalanceWallet,
  77. version,
  78. <if test="pointsWallet != null">
  79. points_wallet + (#{pointsWallet}) as afterPointsWallet,
  80. (points_wallet + (#{pointsWallet}) >= 0) as pointsWalletSufficient,
  81. </if>
  82. <if test="balanceWallet != null">
  83. balance_wallet + (#{balanceWallet}) as afterBalanceWallet,
  84. (balance_wallet + (#{balanceWallet}) >= 0) as balanceWalletSufficient,
  85. </if>
  86. <if test="pointsWallet != null and balanceWallet != null">
  87. ((points_wallet + (#{pointsWallet}) >= 0) and (balance_wallet + (#{balanceWallet}) >= 0)) as allSufficient
  88. </if>
  89. <if test="pointsWallet != null and balanceWallet == null">
  90. (points_wallet + (#{pointsWallet}) >= 0) as allSufficient
  91. </if>
  92. <if test="pointsWallet == null and balanceWallet != null">
  93. (balance_wallet + (#{balanceWallet}) >= 0) as allSufficient
  94. </if>
  95. from user_wallet
  96. where id = #{id} and version = #{version}
  97. </select>
  98. <update id="updateUserWalletWithLock">
  99. update user_wallet
  100. <set>
  101. version = version+1,
  102. <if test="pointsWallet != null">points_wallet = points_wallet + (#{pointsWallet}),</if>
  103. <if test="balanceWallet != null">balance_wallet = balance_wallet + (#{balanceWallet}),</if>
  104. </set>
  105. <where>
  106. id = #{id} and version = #{version}
  107. <if test="pointsWallet != null">and points_wallet + (#{pointsWallet}) >= 0</if>
  108. <if test="balanceWallet != null">and balance_wallet + (#{balanceWallet}) >= 0</if>
  109. </where>
  110. </update>
  111. <delete id="deleteUserWalletById" parameterType="Long">
  112. delete from user_wallet where id = #{id}
  113. </delete>
  114. <delete id="deleteUserWalletByIds" parameterType="String">
  115. delete from user_wallet where id in
  116. <foreach item="id" collection="array" open="(" separator="," close=")">
  117. #{id}
  118. </foreach>
  119. </delete>
  120. </mapper>