mitao
3 天以前 56efd0aa54e2c5cea81ff9b28855bca520dee475
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
<?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.ruoyi.system.mapper.ProjectInventoryMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.ProjectInventory">
        <id column="id" property="id" />
        <result column="investment_task" property="investmentTask" />
        <result column="investment_task_finish" property="investmentTaskFinish" />
        <result column="investment_task_rating" property="investmentTaskRating" />
        <result column="create_time" property="createTime" />
        <result column="create_by" property="createBy" />
        <result column="update_time" property="updateTime" />
        <result column="update_by" property="updateBy" />
        <result column="disabled" property="disabled" />
        <result column="storage_task" property="storageTask" />
        <result column="storage_task_finish" property="storageTaskFinish" />
        <result column="storage_task_rating" property="storageTaskRating" />
    </resultMap>
 
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, investment_task, investment_task_finish, investment_task_rating, create_time, create_by, update_time, update_by, disabled, storage_task, storage_task_finish, storage_task_rating
    </sql>
 
    <!-- 存量项目情况分页列表(按年度分组) -->
<!--    <select id="selectStoragePageList" resultType="com.ruoyi.system.vo.InventoryStorageListVO">-->
<!--        SELECT -->
<!--            YEAR(ps.in_time) AS year,-->
<!--            COUNT(ps.id) AS storageCount,-->
<!--            COALESCE(SUM(ps.total_amount), 0) AS totalAmount,-->
<!--            COALESCE(SUM(ps.total_amount) - COALESCE(SUM(all_items.amount), 0), SUM(ps.total_amount)) AS remainingAmount,-->
<!--            COALESCE(SUM(year_items.amount), 0) AS yearAmount,-->
<!--            COALESCE(SUM(all_items.amount), 0) AS allAmount-->
<!--        FROM project_storage ps-->
<!--        LEFT JOIN (-->
<!--            SELECT -->
<!--                project_storage_id,-->
<!--                SUM(amount) AS amount-->
<!--            FROM project_storage_item -->
<!--            WHERE disabled = 0-->
<!--            GROUP BY project_storage_id-->
<!--        ) all_items ON ps.id = all_items.project_storage_id-->
<!--        LEFT JOIN (-->
<!--            SELECT -->
<!--                project_storage_id,-->
<!--                SUM(amount) AS amount-->
<!--            FROM project_storage_item -->
<!--            WHERE disabled = 0 -->
<!--                AND YEAR(STR_TO_DATE(CONCAT(month, '-01'), '%Y-%m-%d')) = YEAR(CURDATE())-->
<!--            GROUP BY project_storage_id-->
<!--        ) year_items ON ps.id = year_items.project_storage_id-->
<!--        WHERE ps.disabled = 0 -->
<!--            AND ps.status = 1-->
<!--            AND ps.in_time IS NOT NULL-->
<!--        GROUP BY YEAR(ps.in_time)-->
<!--        ORDER BY YEAR(ps.in_time) DESC-->
<!--    </select>-->
    <select id="selectStoragePageList" resultType="com.ruoyi.system.vo.InventoryStorageListVO">
        SELECT
            ps_year.year,
            COUNT(ps_year.id) AS storageCount,
            COALESCE(SUM(ps_year.total_amount), 0) AS totalAmount,
            COALESCE(SUM(ps_year.total_amount) - COALESCE(SUM(all_items.amount), 0), SUM(ps_year.total_amount)) AS remainingAmount,
            COALESCE(SUM(year_items.year_amount), 0) AS yearAmount,
            COALESCE(SUM(all_items.amount), 0) AS allAmount
        FROM (
                 SELECT
                     id,
                     total_amount,
                     YEAR(in_time) as year
                 FROM project_storage
                 WHERE disabled = 0
                   AND status = 1
                   AND in_time IS NOT NULL
             ) ps_year
                 LEFT JOIN (
            SELECT
                project_storage_id,
                SUM(amount) AS amount
            FROM project_storage_item
            WHERE disabled = 0
            GROUP BY project_storage_id
        ) all_items ON ps_year.id = all_items.project_storage_id
                 LEFT JOIN (
            SELECT
                psi.project_storage_id,
                YEAR(STR_TO_DATE(CONCAT(psi.month, '-01'), '%Y-%m-%d')) as item_year,
                SUM(psi.amount) AS year_amount
            FROM project_storage_item psi
            WHERE psi.disabled = 0
            GROUP BY psi.project_storage_id, YEAR(STR_TO_DATE(CONCAT(psi.month, '-01'), '%Y-%m-%d'))
        ) year_items ON ps_year.id = year_items.project_storage_id AND ps_year.year = year_items.item_year
        GROUP BY ps_year.year
        ORDER BY ps_year.year DESC
    </select>
    <select id="inStoragePageList" resultType="com.ruoyi.system.vo.InStorageListVO">
        SELECT
            DATE_FORMAT(ps.in_time, '%Y-%m') AS year,
        COUNT(ps.id) AS storageCount,
        COALESCE(SUM(ps.total_amount), 0) AS totalAmount
        FROM project_storage ps
        WHERE ps.disabled = 0
          AND ps.status = 1
          AND ps.in_time IS NOT NULL
        GROUP BY DATE_FORMAT(ps.in_time, '%Y-%m')
        ORDER BY DATE_FORMAT(ps.in_time, '%Y-%m') DESC
    </select>
    <select id="outStoragePageList" resultType="com.ruoyi.system.vo.OutStorageListVO">
        SELECT
            DATE_FORMAT(ps.in_time, '%Y-%m') AS year,
        COUNT(ps.id) AS storageCount,
        COALESCE(SUM(ps.total_amount), 0) AS totalAmount
        FROM project_storage ps
        WHERE ps.disabled = 0
          AND ps.status = 2
          AND ps.in_time IS NOT NULL
        GROUP BY DATE_FORMAT(ps.in_time, '%Y-%m')
        ORDER BY DATE_FORMAT(ps.in_time, '%Y-%m') DESC
    </select>
    <select id="monthStoragePageList" resultType="com.ruoyi.system.vo.MonthStorageListVO">
        SELECT
            DATE_FORMAT(ps.in_time, '%Y-%m') AS year,
        COUNT(ps.id) AS storageCount,
        COALESCE(SUM(ps.total_amount), 0) AS totalAmount,
        COALESCE(SUM(ps.total_amount) - COALESCE(SUM(all_items.amount), 0), SUM(ps.total_amount)) AS remainingAmount,
        COALESCE(SUM(year_items.year_amount), 0) AS yearAmount,
        COALESCE(SUM(month_items.month_amount), 0) AS monthAmount,
        COALESCE(SUM(all_items.amount), 0) AS allAmount
        FROM project_storage ps
            LEFT JOIN (
            SELECT
            project_storage_id,
            SUM(amount) AS amount
            FROM project_storage_item
            WHERE disabled = 0
            GROUP BY project_storage_id
            ) all_items ON ps.id = all_items.project_storage_id
            LEFT JOIN (
            SELECT
            psi.project_storage_id,
            YEAR(STR_TO_DATE(CONCAT(psi.month, '-01'), '%Y-%m-%d')) as item_year,
            SUM(psi.amount) AS year_amount
            FROM project_storage_item psi
            WHERE psi.disabled = 0
            GROUP BY psi.project_storage_id, YEAR(STR_TO_DATE(CONCAT(psi.month, '-01'), '%Y-%m-%d'))
            ) year_items ON ps.id = year_items.project_storage_id
            AND YEAR(ps.in_time) = year_items.item_year
            LEFT JOIN (
            SELECT
            psi.project_storage_id,
            psi.month,
            SUM(psi.amount) AS month_amount
            FROM project_storage_item psi
            WHERE psi.disabled = 0
            GROUP BY psi.project_storage_id, psi.month
            ) month_items ON ps.id = month_items.project_storage_id
            AND DATE_FORMAT(ps.in_time, '%Y-%m') = month_items.month
        WHERE ps.disabled = 0
          AND ps.status = 1
          AND ps.in_time IS NOT NULL
        GROUP BY DATE_FORMAT(ps.in_time, '%Y-%m')
        ORDER BY DATE_FORMAT(ps.in_time, '%Y-%m') DESC
    </select>
</mapper>