Crunchy
2025-06-14 b2f31607cbe26d721cd7514b619162b3e355b1aa
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
<?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.wms_admin.server.mapper.ProductMapper">
    <resultMap id="SelectHistoryResultMap" type="com.wms_admin.server.entity.Product">
        <result property="id" column="id"/>
        <result property="unit" column="unit"/>
        <result property="incomingQuantity" column="incoming_quantity"/>
        <result property="addPerson" column="add_person"/>
        <result property="createTime" column="create_time"/>
        <!--自定义参数-->
        <result property="productName" jdbcType="VARCHAR" column="productName"/>
        <result property="productCode" column="productCode"/>
        <result property="productModel" jdbcType="VARCHAR" column="productModel"/>
    </resultMap>
 
    <!--多表多条件拼接查询-->
    <select id="SelectHistory" resultMap="SelectHistoryResultMap">
        SELECT s1.`id`,s1.`unit`,s1.`incoming_quantity`,s1.`add_person`,s1.`create_time`,
               s2.`product_name` productName,s3.`product_model` productModel, s3.`product_code` productCode
        FROM product s1, product_name s2, product_model s3
        WHERE s1.`product_name_id` = s2.`id`
        AND s1.`product_model_id` = s3.`id`
        <if test="startTime != null">
            AND s1.create_time >= #{startTime}
        </if>
        <if test="endTime != null">
            -- 在mybatis中小于号不能使用,需要使用方法转义:<![CDATA[<=]]>
            AND s1.create_time <![CDATA[<=]]> #{endTime}
        </if>
        <if test="productModel != null">
            AND s1.`product_model_id` = (SELECT p.`id` FROM product_model p WHERE p.`product_model` = #{productModel})
        </if>
        ORDER BY s1.create_time DESC
    </select>
 
 
    <select id="ExceedThirtyDay" resultType="map">
        SELECT p.id, n.`product_name`, p.`unit`, m.`product_model`, m.`product_code`, DATEDIFF(CURDATE(), DATE_ADD(p.create_time, INTERVAL 30 DAY)) RemainingDays
        FROM product p, product_name n, product_model m
        WHERE NOW() > DATE_ADD(p.create_time, INTERVAL 25 DAY)
        AND p.`product_name_id` = n.`id`
        AND p.`product_model_id` = m.`id`
    </select>
    
    <select id="SelectWeekNumData" resultType="map">
        SELECT d.date, IFNULL(r.num,0) AS product_num, IFNULL(o.num,0) AS out_product_num
        FROM (
                 SELECT CURDATE() AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY) AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 2 DAY) AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 3 DAY) AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 4 DAY) AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY) AS DATE
                 UNION ALL
                 SELECT DATE_SUB(CURDATE(), INTERVAL 6 DAY) AS DATE
             ) d
        LEFT JOIN (
            SELECT DATE(create_time) AS createTime, COUNT(1) AS num
            FROM product
            GROUP BY createTime
            ) r
        ON r.createTime = d.date
        LEFT JOIN (
            SELECT DATE(create_time) AS createTime, COUNT(1) AS num
            FROM out_product
            GROUP BY createTime
            ) o
        ON o.createTime = d.date
    </select>
 
    <select id="TimerCountWeekDayData" resultType="int">
        SELECT COUNT(1) FROM product
    </select>
 
    <select id="SelectNameData" resultType="map">
        SELECT p.`id`, p.`incoming_quantity`, p.`unit`, p.`create_time`, n.`product_name`, m.`product_code`, m.`product_model`
        FROM product p, product_name n, product_model m
        WHERE p.`product_name_id` = n.`id`
        AND p.`product_model_id` = m.`id`
        AND n.`product_name` LIKE CONCAT('%', #{#productName}, '%');
    </select>
 
    <select id="PieData" resultType="map">
        SELECT t1.datetime, IFNULL(t2.num, 0) AS addNum,IFNULL(t3.num, 0) AS outNum
        FROM (
                 SELECT DATE_FORMAT((CURDATE()), '%Y-%m') AS DATETIME
                 UNION
                 SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), '%Y-%m') AS DATETIME
                 UNION
                 SELECT DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), '%Y-%m') AS DATETIME
                 UNION
                 SELECT DATE_FORMAT((CURDATE() - INTERVAL 3 MONTH), '%Y-%m') AS DATETIME
             ) AS t1
            -- 当月入库数据量
            LEFT JOIN (
                SELECT LEFT(p.`create_time`, 7) AS DATETIME, SUM(p.`incoming_quantity`) + SUM(o.num) AS num
                FROM product p, (
                    SELECT LEFT(o.`add_Time`, 7) AS DATETIME, SUM(o.`outbound_quantity`) AS num
                    FROM out_product o
                    GROUP BY LEFT(o.`add_Time`, 7)
                    ORDER BY DATETIME DESC LIMIT 4
                ) AS o
                WHERE o.DATETIME = LEFT(p.`create_time`, 7)
                GROUP BY LEFT(p.`create_time`, 7)
                ORDER BY DATETIME DESC LIMIT 4
            ) t2 ON t1.datetime = t2.datetime
            -- 当月出库数据量
            LEFT JOIN (
                SELECT LEFT(o.`create_time`, 7) AS DATETIME, SUM(o.`outbound_quantity`) AS num
                FROM out_product o
                GROUP BY LEFT(o.`create_time`, 7)
                ORDER BY DATETIME DESC LIMIT 4
            ) t3 ON t1.datetime = t3.datetime
        ORDER BY t1.datetime ASC
    </select>
 
    <select id="SelectIdProduct" resultMap="SelectHistoryResultMap">
        SELECT s1.`id`,s1.`unit`,s1.`incoming_quantity`,s1.`add_person`,s1.`create_time`,
               s2.`product_name` productName,s3.`product_model` productModel, s3.`product_code` productCode
        FROM product s1, product_name s2, product_model s3
        WHERE s1.`product_name_id` = s2.`id`
        AND s1.`product_model_id` = s3.`id`
        AND s1.`id` = #{code}
    </select>
</mapper>