UserWalletMapper.xml 5.4 KB

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