peng
2025-10-16 8bdb26708241c70a9998b1729a2c9881422f2d5d
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?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="cn.lili.modules.lmk.mapper.LmkOrderSelectMapper">
    <resultMap id="OrderCountByDayMap" type="java.util.Map">
        <result column="day" property="day" />
        <result column="count" property="count"/>
    </resultMap>
 
    <resultMap id="orderTimePeriod" type="java.util.Map">
        <result column="day" property="day" />
        <result column="hour" property="hour"/>
        <result column="count" property="count"/>
    </resultMap>
 
    <resultMap id="productRepurchase" type="java.util.Map">
        <result column="goods_name" property="goodsName"/>
        <result column="repurchase_rate_percent" property="repurchaseRate"/>
    </resultMap>
 
    <resultMap id="viewDataCount" type="java.util.Map">
        <result column="day" property="day" />
        <result column="hour" property="hour"/>
        <result column="count" property="count"/>
    </resultMap>
    <resultMap id="pvUvCount" type="java.util.Map">
        <result column="day" property="day"/>
        <result column="pvData" property="pvData"/>
        <result column="uvData" property="uvData"/>
    </resultMap>
    <select id="selectOrderCountByDay"  resultMap="OrderCountByDayMap">
        SELECT
            DATE(create_time) AS day,
            COUNT(*) AS count
            FROM
            li_order o
            WHERE
            o.create_time BETWEEN #{startTime} AND #{endTime}
            <if test="storeId != null and storeId != ''">
                AND o.store_id = #{storeId}
            </if>
            GROUP BY
            day
            ORDER BY
            day ASC
    </select>
 
    <select id="selectOrderTimePeriod" resultMap="orderTimePeriod">
        SELECT
            DATE(create_time) AS day,
            HOUR(create_time) AS hour,
            COUNT(*) AS count
            FROM
            li_order o
            WHERE
            o.create_time BETWEEN #{startTime} AND #{endTime}
            <if test="storeId != null and storeId != ''">
                AND o.store_id = #{storeId}
            </if>
            GROUP BY
            day
            ORDER BY
            day , hour ASC
    </select>
    <select id="selectViewDataCount" resultMap="viewDataCount">
        SELECT
            DATE(LAR.create_time) AS day,
            HOUR(LAR.create_time) AS hour,
            COUNT(LAR.id) AS count
        FROM lmk_action_record LAR
        where LAR.delete_flag = 0
            AND LAR.page_status = 'JOIN'
            AND LAR.create_time BETWEEN #{startTime} AND #{endTime}
            <if test="storeId != null and storeId !=''">
                AND page_code = 'GOODS_DETAILS'
                AND JSON_EXTRACT(LAR.page_params, '$.goodsId') IN
                <foreach collection="goodsIds" item="id" open="(" separator="," close=")">
                    #{id}
                </foreach>
            </if>
        GROUP BY day, hour
        ORDER BY day, hour;
    </select>
<!--buyer_count购买人数  buy_times总购买次数  repurchase_buyer_count 复购人数-->
    <select id="selectProductRepurchase"  resultMap="productRepurchase">
        SELECT
            t.goods_name,
            t.total_users AS buyer_count,
            t.total_buy_times AS buy_times,
            t.repurchase_users AS repurchase_buyer_count,
            ROUND(
                IFNULL(t.repurchase_users / t.total_users, 0) * 100,
                2
            ) AS repurchase_rate_percent
        FROM (
                 SELECT
                     goods_id,
                     goods_name,
                     COUNT(DISTINCT member_id) AS total_users,
                     SUM(user_buy_counts.buy_count) AS total_buy_times,
                     SUM(CASE WHEN buy_count >= 2 THEN 1 ELSE 0 END) AS repurchase_users
                 FROM (
                          SELECT
                              i.goods_id,
                              i.goods_name,
                              o.member_id,
                              COUNT(DISTINCT o.sn) AS buy_count
                          FROM li_order_item i
                              INNER JOIN li_order o ON i.order_sn = o.sn
                          WHERE
                              o.order_status = 'COMPLETED'
                            AND o.delete_flag = 0
                            AND i.delete_flag = 0
                            AND o.member_id IS NOT NULL
                            AND o.create_time >= #{startTime}
                            AND o.create_time &lt;= #{endTime}
                            <if test="storeId != null and storeId != ''">
                                AND o.store_id = #{storeId}
                            </if>
                          GROUP BY i.goods_id, i.goods_name, o.member_id
                      ) AS user_buy_counts
                 GROUP BY goods_id, goods_name
             ) AS t
        ORDER BY repurchase_rate_percent DESC
        LIMIT #{currentLimit};
    </select>
 
    <select id="selectPvUv" resultMap="pvUvCount">
        SELECT
            DATE(LAR.create_time) AS day,
            COUNT(*) AS pvData,
            COUNT(DISTINCT LAR.user_id) AS uvData
        FROM
            lmk_action_record LAR
        WHERE
            LAR.delete_flag = 0
            AND LAR.page_status = 'JOIN'
            AND LAR.create_time BETWEEN #{startTime} AND #{endTime}
        <if test="storeId != null and storeId !=''">
            AND page_code = 'GOODS_DETAILS'
            AND JSON_EXTRACT(LAR.page_params, '$.goodsId') IN
            <foreach collection="goodsIds" item="id" open="(" separator="," close=")">
                #{id}
            </foreach>
        </if>
        GROUP BY
            DATE(LAR.create_time);
    </select>
 
 
</mapper>