yujian
2020-05-09 7e7db2fa55a9a3af46d4fd8ede0dee147f101d64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?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.yeshi.fanli.dao.mybatis.redpack.RedPackBalanceMapper">
  <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.redpack.RedPackBalance">
    <id column="rpb_uid" property="id" jdbcType="BIGINT"/>
    <result column="rpb_money" property="money" jdbcType="DECIMAL"/>
    <result column="rpb_create_time" property="createTime" jdbcType="TIMESTAMP"/>
    <result column="rpb_update_time" property="updateTime" jdbcType="TIMESTAMP"/>
  </resultMap>
  
  <resultMap id="VOResultMap" type="com.yeshi.fanli.vo.redpack.RedPackBalanceVO">
    <id column="rpb_uid" property="id" jdbcType="BIGINT"/>
    <result column="rpb_money" property="money" jdbcType="DECIMAL"/>
    <result column="rpb_create_time" property="createTime" jdbcType="TIMESTAMP"/>
    <result column="rpb_update_time" property="updateTime" jdbcType="TIMESTAMP"/>
    
    <result column="giveMoney" property="giveMoney" jdbcType="DECIMAL"/>
    <result column="useMoney" property="useMoney" jdbcType="DECIMAL"/>
    <result column="exchangeMoney" property="exchangeMoney" jdbcType="DECIMAL"/>
    <result column="totalWin" property="totalWin" jdbcType="DECIMAL"/>
  </resultMap>
  
  <sql id="Base_Column_List">rpb_uid,rpb_money,rpb_create_time,rpb_update_time</sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
    <include refid="Base_Column_List"/>from yeshi_ec_red_pack_balance where rpb_uid = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_red_pack_balance where rpb_uid = #{id,jdbcType=BIGINT}</delete>
  <insert id="insert" parameterType="com.yeshi.fanli.entity.redpack.RedPackBalance" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_red_pack_balance (rpb_uid,rpb_money,rpb_create_time,rpb_update_time) values (#{id,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})</insert>
  <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.redpack.RedPackBalance" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_red_pack_balance
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">rpb_uid,</if>
      <if test="money != null">rpb_money,</if>
      <if test="createTime != null">rpb_create_time,</if>
      <if test="updateTime != null">rpb_update_time,</if>
    </trim>values
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">#{id,jdbcType=BIGINT},</if>
      <if test="money != null">#{money,jdbcType=DECIMAL},</if>
      <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
      <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
    </trim>
  </insert>
  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.redpack.RedPackBalance">update yeshi_ec_red_pack_balance set rpb_money = #{money,jdbcType=DECIMAL},rpb_create_time = #{createTime,jdbcType=TIMESTAMP},rpb_update_time = #{updateTime,jdbcType=TIMESTAMP} where rpb_uid = #{id,jdbcType=BIGINT}</update>
  <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.redpack.RedPackBalance">update yeshi_ec_red_pack_balance
    <set>
      <if test="money != null">rpb_money=#{money,jdbcType=DECIMAL},</if>
      <if test="createTime != null">rpb_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
      <if test="updateTime != null">rpb_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
    </set> where rpb_uid = #{id,jdbcType=BIGINT}
  </update>
  
   <update id="subRedPack">
      update yeshi_ec_red_pack_balance SET rpb_money = rpb_money - #{money,jdbcType=DECIMAL},rpb_update_time = NOW()
      WHERE rpb_uid = #{id,jdbcType=BIGINT}
  </update>
    
  <update id="addRedPack">
      UPDATE yeshi_ec_red_pack_balance SET rpb_money = rpb_money + #{money,jdbcType=DECIMAL},rpb_update_time = NOW()
      WHERE rpb_uid = #{id,jdbcType=BIGINT}
  </update>
    
  <update id="resetRedPack">
      UPDATE yeshi_ec_red_pack_balance SET rpb_money = 0,rpb_update_time = NOW()
      WHERE rpb_uid = #{id,jdbcType=BIGINT}
  </update>
  
  <select id="selectForUpdate" resultMap="BaseResultMap" parameterType="java.lang.Long">
       SELECT <include refid="Base_Column_List"/> FROM yeshi_ec_red_pack_balance 
       WHERE rpb_uid = #{id,jdbcType=BIGINT} FOR UPDATE
  </select>
  
  
  <select id="query" resultMap="VOResultMap">
    SELECT b.*,IFNULL(dd.giveMoney,0)AS giveMoney,IFNULL(dd2.useMoney,0)AS useMoney ,IFNULL(dd3.exchangeMoney,0)AS exchangeMoney ,IFNULL(dd4.totalWin,0)AS totalWin  FROM `yeshi_ec_red_pack_balance` b
    LEFT JOIN (SELECT ABS(SUM(d.`rpd_money`)) AS giveMoney,d.`rpd_uid` FROM `yeshi_ec_red_pack_detail` d
            WHERE d.`rpd_type` = 'giveOthersSucceed' AND d.`rpd_uid` LIKE '${key}%'
            GROUP BY d.`rpd_uid` )dd ON dd.rpd_uid = b.`rpb_uid`
    LEFT JOIN (SELECT ABS(SUM(d.`rpd_money`)) AS useMoney,d.`rpd_uid` FROM `yeshi_ec_red_pack_detail` d
            WHERE d.`rpd_type` = 'useByShopOrder' AND d.`rpd_uid` LIKE '${key}%'
            GROUP BY d.`rpd_uid` )dd2 ON dd2.rpd_uid = b.`rpb_uid`
    LEFT JOIN (SELECT ABS(SUM(d.`rpd_money`)) AS exchangeMoney,d.`rpd_uid` FROM `yeshi_ec_red_pack_detail` d
            WHERE d.`rpd_type` = 'redExchangePass' AND d.`rpd_uid` LIKE '${key}%'
            GROUP BY d.`rpd_uid` )dd3 ON dd3.rpd_uid = b.`rpb_uid`
    LEFT JOIN (SELECT ABS(SUM(d.`rpd_money`)) AS totalWin,d.`rpd_uid` FROM `yeshi_ec_red_pack_detail` d
            WHERE d.`rpd_type` IN('newUserReward','invite','increaseReward','seriesReward','giveOthersReceive') AND d.`rpd_uid` LIKE '${key}%'
            GROUP BY d.`rpd_uid` )dd4 ON dd4.rpd_uid = b.`rpb_uid`
    WHERE b.`rpb_uid` LIKE '${key}%' 
    <if test="state != null">
        AND b.rpb_state = #{state}
    </if>
    <if test="order == 0">
        ORDER BY b.rpb_money DESC
    </if>
    <if test="order == 1">
        ORDER BY dd.giveMoney DESC
    </if>
    <if test="order == 2">
        ORDER BY dd2.useMoney DESC
    </if>
    <if test="order == 3">
        ORDER BY dd3.exchangeMoney DESC
    </if>
    <if test="order == 4">
        ORDER BY dd4.totalWin DESC
    </if>
    <if test="order == 5">
        ORDER BY b.rpb_create_time
    </if>
    <if test="order == 6">
        ORDER BY b.rpb_create_time DESC
    </if>
    LIMIT #{start},#{count}
  </select>
  
  <select id="count" resultType="Long">
      SELECT IFNULL(COUNT(rpb_uid),0) FROM yeshi_ec_red_pack_balance 
    WHERE rpb_uid LIKE '${key}%'
      <if test="state != null">
        AND rpb_state = #{state}
     </if>
  </select>
  
</mapper>