admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
<?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.order.CommonOrderCountMapper">
    <resultMap id="ChartMap" type="com.yeshi.fanli.dto.ChartTDO">
        <result column="showDate" property="showDate" jdbcType="VARCHAR" />
        <result column="showValue" property="showValue" jdbcType="VARCHAR" />
    </resultMap>
 
     <resultMap id="CountOrderMap" type="com.yeshi.fanli.dto.order.CountOrderDTO">
        <result column="uid" property="uid" jdbcType="BIGINT" />
        <result column="totalOrder" property="totalOrder" jdbcType="INTEGER" />
        <result column="commission" property="commission" jdbcType="DECIMAL" />
    </resultMap>
    
    <sql id="Column_DateType">
        <if test="dateType == 1">
            DATE_FORMAT(t.`co_third_create_time`,'%Y-%m-%d') AS 'showDate'
        </if>
        <if test="dateType == 2">
            DATE_FORMAT(t.`co_third_create_time`,'%m') AS 'showDate'
        </if>
        <if test="dateType == 3">
            DATE_FORMAT(t.`co_third_create_time`,'%Y') AS 'showDate'
        </if>
    </sql>
 
    <sql id="Count_Select_DateType">
        <if test="startTime != null and startTime != '' ">
            AND DATE_FORMAT(t.`co_third_create_time`,'%Y-%m-%d')<![CDATA[ >= ]]>'${startTime}'
        </if>
        <if test="endTime != null and endTime != '' ">
            AND DATE_FORMAT(t.`co_third_create_time`,'%Y-%m-%d') <![CDATA[ <= ]]>'${endTime}'
        </if>
        <if test="year != null and year != '' ">
            AND DATE_FORMAT(t.`co_third_create_time`,'%Y') = '${year}'
        </if>
    </sql>
 
    <sql id="Count_Group_DateType">
        <if test="dateType == 1">
            GROUP BY DATE_FORMAT(t.`co_third_create_time`,'%Y-%m-%d')
        </if>
        <if test="dateType == 2">
            GROUP BY DATE_FORMAT(t.`co_third_create_time`,'%Y-%m')
        </if>
        <if test="dateType == 3">
            GROUP BY DATE_FORMAT(t.`co_third_create_time`,'%Y')
        </if>
    </sql>
 
    <select id="countByState" resultType="java.lang.Long">
        SELECT IFNULL(COUNT(t.`co_id`),0) FROM  `yeshi_ec_common_order` t 
        WHERE 1=1 
            <if test="type != null"> 
                AND t.`co_state` = #{state}
            </if>
    </select>
    
    <select id="countOrderBySourceTypeAndDay" resultType="java.lang.Long">
        SELECT COUNT(t.`co_id`) FROM `yeshi_ec_common_order` t 
        WHERE t.co_source_type=#{sourceType} AND DATE_FORMAT(t.`co_third_create_time`,'%Y-%m-%d') = #{preDay}
    </select>
    
    <select id="countOrderNumber" resultMap="ChartMap">
        SELECT IFNULL(COUNT(t.`co_id`),0) AS showValue,<include refid="Column_DateType"/>
        FROM `yeshi_ec_common_order` t 
        WHERE t.co_source_type=#{sourceType} and t.`co_third_create_time` IS NOT NULL <include refid="Count_Select_DateType"/> 
        <include refid="Count_Group_DateType"/>
        ORDER BY t.`co_third_create_time`
    </select>
    
    
    <select id="countOrderNumberBySettleTime" resultType="java.util.HashMap">
        <!-- 统计历史订单数量  根据结算时间 -->
        SELECT SUM(A.self)AS totalSelf,SUM(A.shared)AS totalShared,SUM(A.invite)AS totalInvite
        FROM ( 
            <!-- 返利订单 -->
            SELECT IFNULL(COUNT(ho_id),0) AS self,0 AS shared,0 AS invite
            FROM  (SELECT ho.`ho_id` FROM yeshi_ec_hongbao_order ho 
                LEFT JOIN ( 
                    SELECT * FROM yeshi_ec_hongbao_v2 v2 
                    WHERE v2.`hb_uid`= ${uid} and v2.hb_state!=4 AND (v2.`hb_type` = 1 OR v2.`hb_type` = 2)
                    ) hb  ON hb.hb_id=ho.`ho_hongbao_id` <!-- 自购订单 -->
            LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id`
            WHERE hb.hb_id IS NOT NULL 
                 <if test="state != null"> 
                    AND co.`co_state` = ${state} 
                </if>
                
                <if test="day != null and day == 1"> <!-- 今天 -->
                    AND TO_DAYS(co.`co_settle_time`) = TO_DAYS(NOW())
                </if>
                <if test="day != null and day == 2">  <!-- 昨天 -->
                    AND TO_DAYS(NOW()) - TO_DAYS(co.co_settle_time) = 1
                </if>
                <if test="day != null and day == 3">  <!-- 本月 -->
                    AND DATE_FORMAT(co.`co_settle_time`,'%Y%m') =
                    DATE_FORMAT(CURDATE(),'%Y%m')
                </if>
                <if test="day != null and day == 4">  <!-- 上月 -->
                    AND PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'),
                    DATE_FORMAT(co.`co_settle_time`, '%Y%m')) = 1
                </if>
            GROUP BY co.`co_order_no`, co.`co_source_type`)YX
            
            UNION ALL
            <!-- 分享订单 -->
            SELECT 0 AS self,IFNULL(COUNT(ho_id),0) AS shared,0 AS invite
            FROM  (SELECT ho.`ho_id` FROM yeshi_ec_hongbao_order ho 
                    LEFT JOIN ( 
                        SELECT * FROM yeshi_ec_hongbao_v2 v2 
                        WHERE v2.`hb_uid`= ${uid} AND v2.`hb_type` = 20 and v2.hb_state!=4
                    ) hb  ON hb.hb_id=ho.`ho_hongbao_id`  <!-- 分享订单 -->
    
                LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id`
                WHERE hb.hb_id IS NOT NULL and hb.hb_state!=4
                    <if test="state != null"> 
                        AND co.`co_state` = ${state} 
                    </if>
                    
                    <if test="day != null and day == 1"> <!-- 今天 -->
                        AND TO_DAYS(co.`co_settle_time`) = TO_DAYS(NOW())
                    </if>
                    <if test="day != null and day == 2">  <!-- 昨天 -->
                        AND TO_DAYS(NOW()) - TO_DAYS(co.`co_settle_time`) = 1
                    </if>
                    <if test="day != null and day == 3">  <!-- 本月 -->
                        AND DATE_FORMAT(co.`co_settle_time`,'%Y%m') =
                        DATE_FORMAT(CURDATE(),'%Y%m')
                    </if>
                    <if test="day != null and day == 4">  <!-- 上月 -->
                        AND PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'),
                        DATE_FORMAT(co.`co_settle_time`, '%Y%m')) = 1
                    </if>
                GROUP BY co.`co_order_no`, co.`co_source_type`)WQ
                
            UNION ALL
            <!-- 邀请订单 -->
            SELECT 0 AS self,0 AS shared,IFNULL(COUNT(ho_id),0) AS invite 
            FROM  (SELECT ho.`ho_id` FROM yeshi_ec_hongbao_order ho     
                LEFT JOIN ( 
                    SELECT * FROM yeshi_ec_hongbao_v2 v2 
                    WHERE v2.`hb_uid`= ${uid}
                         AND (v2.`hb_type` = 5 OR v2.`hb_type` = 6 OR v2.`hb_type` = 7
                               OR v2.`hb_type` = 21 OR v2.`hb_type` = 22 ) and v2.hb_state!=4
                    ) hbp  ON hbp.hb_pid=ho.`ho_hongbao_id`
                LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id`
                WHERE  hbp.hb_id IS NOT NULL and hbp.hb_state!=4
                    <if test="state != null"> 
                        AND co.`co_state` = ${state} 
                    </if>
                    <if test="day != null and day == 1"> <!-- 今天 -->
                        AND TO_DAYS(co.`co_settle_time`) = TO_DAYS(NOW())
                    </if>
                    <if test="day != null and day == 2">  <!-- 昨天 -->
                        AND TO_DAYS(NOW()) - TO_DAYS(co.`co_settle_time`) = 1
                    </if>
                    <if test="day != null and day == 3">  <!-- 本月 -->
                        AND DATE_FORMAT(co.`co_settle_time`,'%Y%m') =
                        DATE_FORMAT(CURDATE(),'%Y%m')
                    </if>
                    <if test="day != null and day == 4">  <!-- 上月 -->
                        AND PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'),
                        DATE_FORMAT(co.`co_settle_time`, '%Y%m')) = 1
                    </if>
                GROUP BY co.`co_order_no`, co.`co_source_type`)SX
        )A
    </select>
    
    <select id="countValidOrder" resultType="java.lang.Long">
        SELECT IFNULL(COUNT(co.`co_id`),0) FROM yeshi_ec_hongbao_order ho 
        LEFT JOIN (SELECT * FROM yeshi_ec_hongbao_v2 v2 
            WHERE v2.`hb_uid`= #{uid}  AND v2.`hb_type` IN(1,20))hb 
            ON IF(hb.hb_pid IS NULL,hb.hb_id,hb.hb_pid)=ho.`ho_hongbao_id`
        LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id`
        WHERE hb.hb_id IS NOT NULL AND <![CDATA[co.`co_state` <> 4]]>
    </select>
    
    <select id="getMoneyByOrderNo" resultType="java.math.BigDecimal">
        SELECT SUM(v2.`hb_money`) FROM yeshi_ec_common_order co 
        LEFT JOIN  yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id`
        LEFT JOIN yeshi_ec_hongbao_v2 v2 ON  v2.hb_id=ho.`ho_hongbao_id` 
        WHERE co.`co_order_no` = #{orderNo}
    </select>
    
    <select id="countValidOrderByDate" resultType="Long">
        SELECT IFNULL(COUNT(co_order_no),0) FROM
            (SELECT DISTINCT co.co_order_no FROM yeshi_ec_common_order co 
             LEFT JOIN  yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id`
             LEFT JOIN yeshi_ec_hongbao_v2 v2 ON  v2.hb_id=ho.`ho_hongbao_id` 
             WHERE co.`co_uid` = #{uid} AND v2.`hb_type` = 1 
                   AND v2.`hb_state` = 3 AND  AND co.`co_third_create_time` <![CDATA[>]]> #{dateTime})A
    </select>
    
    <select id="countSameShopOrderByUidAndHongBaoType" resultType="Long">
        SELECT COUNT(*) FROM
        (
            SELECT a.*,COUNT(*) AS num FROM 
            (
                SELECT co.*,COUNT(*) AS c,g.`cog_shop_id` AS shopId FROM yeshi_ec_common_order co 
                LEFT JOIN yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id` 
                LEFT JOIN yeshi_ec_hongbao_v2 v ON v.`hb_id`=ho.`ho_hongbao_id` 
                LEFT JOIN yeshi_ec_common_order_goods g  ON co.`co_order_goods_id`=g.`cog_id` 
                WHERE  co.`co_uid`=#{uid}  AND g.`cog_shop_id` <![CDATA[<>]]> 725677994  <!-- 天猫超市 -->
                <if test="typeList!=null">
                    <foreach collection="typeList" item="type" open=" and (" separator=" or " close=")">
                        v.`hb_type`=#{type}
                    </foreach>
                </if>
                AND v.`hb_id` IS NOT NULL 
                AND (co.`co_state`=1 OR  co.`co_state`=2 OR co.`co_state`=3)  
                AND g.`cog_shop_id`>0 GROUP BY co.`co_order_no`,co.`co_source_type`
            ) a GROUP BY a.shopId
        ) b WHERE b.num>=#{minSameShopGoodsCount};
    </select>
    
    
    <select id="countSameGoodsOrderByUidAndHongBaoType" resultType="Long">
        SELECT COUNT(*) FROM
        (
            SELECT a.goodsId,COUNT(*) AS c FROM
            (
                SELECT co.`co_order_goods_id` AS goodsId,co.`co_order_no` FROM yeshi_ec_common_order co 
                LEFT JOIN yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id` 
                LEFT JOIN yeshi_ec_hongbao_v2 v ON v.`hb_id`=ho.`ho_hongbao_id` 
                LEFT JOIN yeshi_ec_common_order_goods g  ON co.`co_order_goods_id`=g.`cog_id`  
                WHERE co.`co_uid`=#{uid} AND g.`cog_shop_id` <![CDATA[<>]]> 725677994  <!-- 天猫超市 -->
                <if test="typeList!=null">
                    <foreach collection="typeList" item="type" open=" and (" separator=" or " close=")">
                        v.`hb_type`=#{type}
                    </foreach>
                </if>
                AND v.`hb_id` IS NOT NULL
                AND (co.`co_state`=1 OR  co.`co_state`=2 OR co.`co_state`=3) 
                GROUP BY co.`co_order_no`,co.`co_order_goods_id`
            ) a GROUP BY goodsId 
        ) b WHERE b.c>=#{minSameGoodsOrderCount}
    </select>
    
    
    
    <select id="getSameShopOrderByUidAndHongBaoType" resultType="Long">
        SELECT b.shopId FROM
        (
            SELECT a.*,COUNT(*) AS num FROM 
            (
                SELECT co.*,COUNT(*) AS c,g.`cog_shop_id` AS shopId FROM yeshi_ec_common_order co 
                LEFT JOIN yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id` 
                LEFT JOIN yeshi_ec_hongbao_v2 v ON v.`hb_id`=ho.`ho_hongbao_id` 
                LEFT JOIN yeshi_ec_common_order_goods g  ON co.`co_order_goods_id`=g.`cog_id` 
                WHERE  co.`co_uid`=#{uid} AND g.`cog_shop_id` <![CDATA[<>]]> 725677994  <!-- 天猫超市 -->
                <if test="typeList!=null">
                    <foreach collection="typeList" item="type" open=" and (" separator=" or " close=")">
                        v.`hb_type`=#{type}
                    </foreach>
                </if>
                AND v.`hb_id` IS NOT NULL 
                AND (co.`co_state`=1 OR  co.`co_state`=2 OR co.`co_state`=3)  
                AND g.`cog_shop_id`>0 GROUP BY co.`co_order_no`,co.`co_source_type`
            ) a GROUP BY a.shopId
        ) b WHERE b.num>=#{minSameShopGoodsCount};
    </select>
    
    
    <select id="getSameGoodsOrderByUidAndHongBaoType" resultType="Long">
        SELECT b.goodsId FROM
        (
            SELECT a.goodsId,COUNT(*) AS c FROM
            (
                SELECT co.`co_order_goods_id` AS goodsId,co.`co_order_no` FROM yeshi_ec_common_order co 
                LEFT JOIN yeshi_ec_hongbao_order ho ON co.`co_id`=ho.`ho_order_id` 
                LEFT JOIN yeshi_ec_hongbao_v2 v ON v.`hb_id`=ho.`ho_hongbao_id` 
                LEFT JOIN yeshi_ec_common_order_goods g  ON co.`co_order_goods_id`=g.`cog_id`  
                WHERE co.`co_uid`=#{uid} AND g.`cog_shop_id` <![CDATA[<>]]> 725677994  <!-- 天猫超市 -->
                <if test="typeList!=null">
                    <foreach collection="typeList" item="type" open=" and (" separator=" or " close=")">
                        v.`hb_type`=#{type}
                    </foreach>
                </if>
                AND v.`hb_id` IS NOT NULL
                AND (co.`co_state`=1 OR  co.`co_state`=2 OR co.`co_state`=3) 
                GROUP BY co.`co_order_no`,co.`co_order_goods_id`
            ) a GROUP BY goodsId 
        ) b WHERE b.c>=#{minSameGoodsOrderCount}
    </select>
    
    <select id="countOderByUidAndDate" resultType="Integer">
        SELECT COUNT(1) FROM (SELECT d.`co_id` FROM `yeshi_ec_common_order` d
        WHERE d.`co_third_create_time`<![CDATA[<=]]> #{preDay} AND d.`co_uid` = #{uid} 
              AND (d.`co_state`=1 OR d.`co_state`=2) 
        GROUP BY d.`co_order_no`,d.`co_source_type`)A
    </select>
    
    <select id="countValidOrderByDay" resultMap="CountOrderMap">
        SELECT co_uid AS uid ,totalOrder FROM (
            SELECT COUNT(d.`co_id`) AS totalOrder,d.`co_uid` FROM `yeshi_ec_common_order` d
            WHERE DATE_FORMAT(d.`co_third_create_time`,'%Y-%m-%d') = #{preDay} 
                  AND (d.`co_state`=1 OR d.`co_state`=2)  
            GROUP BY d.`co_order_no`,d.`co_source_type`)A
        GROUP BY co_uid
    </select>
    
    
    <select id="getUidByValidOrderByDay"  resultType="Long">
        SELECT DISTINCT d.`co_uid` FROM `yeshi_ec_common_order` d
        WHERE TO_DAYS(co_third_create_time) = TO_DAYS(#{preDay}) AND (d.`co_state`=1 OR d.`co_state`=2)  
        GROUP BY d.`co_order_no`,d.`co_source_type`
    </select>
    
    
    <select id="countDownOrderUserByUidAndDate" resultType="Integer">
        SELECT COUNT(DISTINCT d.`co_uid`) FROM `yeshi_ec_common_order` d
        WHERE  d.`co_third_create_time`<![CDATA[<=]]> #{preDay} AND (d.`co_state`=1 OR d.`co_state`=2)  
        <foreach collection="list" item="uid" open="AND (" separator="OR" close=")" >
            d.`co_uid` = #{uid} 
        </foreach>
    </select>
    
    <select id="getDownOrderUserByListUidAndDate" resultType="Long">
        SELECT  d.`co_uid` FROM `yeshi_ec_common_order` d
        WHERE  d.`co_third_create_time`<![CDATA[<=]]> #{preDay} AND (d.`co_state`=1 OR d.`co_state`=2)  
        <foreach collection="list" item="uid" open="AND (" separator="OR" close=")" >
            d.`co_uid` = #{uid} 
        </foreach>
        GROUP BY d.`co_order_no`,d.`co_source_type`
    </select>
    
    <select id="countCommissionByDay" resultMap="CountOrderMap">
        SELECT  SUM(IF(d.`co_eIncome` >0,d.`co_eIncome`,d.`co_estimate`)) AS commission,d.co_uid as uid FROM `yeshi_ec_common_order` d 
        WHERE TO_DAYS(d.`co_third_create_time`)= TO_DAYS(#{preDay}) AND (d.`co_state`=1 OR d.`co_state`=2)
        GROUP BY d.co_uid
    </select>
    
    <select id="countOderByDate" resultType="Integer">
        SELECT COUNT(co_id) FROM (SELECT d.`co_id` FROM `yeshi_ec_common_order` d
        WHERE TO_DAYS(d.`co_third_create_time`)= TO_DAYS(#{preDay}) AND (d.`co_state`=1 OR d.`co_state`=2) 
        GROUP BY d.`co_order_no`,d.`co_source_type`)A
    </select>
    
    
    <select id="countCommissionByDate" resultType="BigDecimal">
        SELECT SUM(IF(d.`co_eIncome` >0,d.`co_eIncome`,d.`co_estimate`)) FROM `yeshi_ec_common_order` d
        WHERE TO_DAYS(d.`co_third_create_time`)= TO_DAYS(#{preDay}) AND (d.`co_state`=1 OR d.`co_state`=2)  
    </select>
    
    <select id="countOderByUidAndLess10" resultType="Integer">
        SELECT count(1) from (SELECT SUM(d.co_payment) as payment FROM `yeshi_ec_common_order` d
        where d.co_uid = #{uid} and d.co_source_type = 1  and d.co_state <![CDATA[<>]]> 4
        GROUP BY d.`co_order_no`
        ORDER BY d.co_third_create_time desc
        limit 100)A where A.payment<![CDATA[<]]> 10
    </select>
    
    
    <select id="countOrderBySourceAndNearDay" resultType="Long">
        SELECT COUNT(co_id) FROM (SELECT d.`co_id` FROM `yeshi_ec_common_order` d
            WHERE d.co_uid = #{uid} AND d.`co_source_type` = #{source} AND (d.`co_state`=1 OR d.`co_state`=2) 
                AND DATE_SUB(CURDATE(), INTERVAL #{day} DAY) <![CDATA[<=]]> DATE(d.`co_third_create_time`) 
        GROUP BY d.`co_order_no`,d.`co_source_type`)A
    </select>
    
    
    
</mapper>