chengf
2025-08-05 c4a333b83ba54bcadf2a6a2b34fe66ab88a6ba9d
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
<?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="carInoutV1ServiceDaoImpl">
 
 
    <!-- 保存车辆进出场信息 add by wuxw 2018-07-03 -->
    <insert id="saveCarInoutInfo" parameterType="Map">
        insert into car_inout(
        in_time,inout_id,pa_id,car_num,state,community_id,out_time
        ) values (
        #{inTime},#{inoutId},#{paId},#{carNum},#{state},#{communityId},#{outTime}
        )
    </insert>
 
 
    <!-- 查询车辆进出场信息 add by wuxw 2018-07-03 -->
    <select id="getCarInoutInfo" parameterType="Map" resultType="Map">
        SELECT
        -- 出场记录字段
        out_rec.in_time outInTime,
        out_rec.inout_id outInoutId,
        out_rec.pa_id paId,
        out_rec.car_num carNum,
        out_rec.vehicle_type vehicleType,
        out_rec.payment_amount paymentAmount,
        out_rec.merchant_id merchantId,
        out_rec.direction,
        out_rec.status_cd statusCd,
        out_rec.state outState,
        out_rec.community_id communityId,
        out_rec.out_time outTime,
        -- 关联的进场记录字段
        in_rec.in_time inTime,
        in_rec.inout_id inInoutId,
        in_rec.state inState,
        -- 其他关联信息
        td_out.`name` outStateName,
        td_in.`name` inStateName,
        pa.num areaNum,
        tcfc.fee_name feeName,
        tcfc.config_id configId,
        MAX(cid_out.car_type) carType,
        MAX(cid_out.car_type_name) carTypeName,
        -- 停车时长
        TIMESTAMPDIFF(MINUTE, in_rec.in_time, out_rec.out_time) parkMinutes
        FROM car_inout out_rec
        -- 关联最新的进场记录
        LEFT JOIN (
        SELECT
        car_num, in_time, inout_id, state, pa_id, community_id,
        ROW_NUMBER() OVER (PARTITION BY car_num ORDER BY in_time DESC) rn
        FROM car_inout
        WHERE state = '100300'  -- 进场状态
        AND status_cd = '0'
        ) in_rec ON out_rec.car_num = in_rec.car_num
        AND out_rec.in_time > in_rec.in_time
        AND in_rec.rn = 1
        AND out_rec.pa_id = in_rec.pa_id
 
        -- 原有关联表(调整为关联出场记录)
        LEFT JOIN car_inout_detail cid_out ON out_rec.inout_id = cid_out.inout_id
        AND cid_out.status_cd = '0'
        AND cid_out.state IN ('100300','100400','100600')
        LEFT JOIN t_dict td_out ON out_rec.state = td_out.status_cd
        AND td_out.table_columns = 'state'
        AND td_out.table_name = 'car_inout'
        LEFT JOIN t_dict td_in ON in_rec.state = td_in.status_cd
        AND td_in.table_columns = 'state'
        AND td_in.table_name = 'car_inout'
        LEFT JOIN parking_area pa ON out_rec.pa_id = pa.pa_id
        AND pa.status_cd = '0'
        LEFT JOIN temp_car_fee_config tcfc ON pa.pa_id = tcfc.pa_id
        AND tcfc.status_cd = '0'
 
        WHERE 1 = 1
        -- 主表筛选离场记录
        AND out_rec.state = '100500'  -- 离场状态
        AND out_rec.status_cd = '0'
 
        -- 保留原始所有查询条件(调整别名适配新结构)
        <if test="inTime != null and inTime != ''">
            AND in_rec.in_time = #{inTime}
        </if>
        <if test="inoutId != null and inoutId != ''">
            AND out_rec.inout_id = #{inoutId}
        </if>
        <if test="paId != null and paId != ''">
            AND out_rec.pa_id = #{paId}
        </if>
        <if test="paIds != null">
            AND out_rec.pa_id IN
            <foreach collection="paIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="carNum != null and carNum != ''">
            AND out_rec.car_num LIKE CONCAT('%', #{carNum}, '%')
        </if>
        <if test="carType != null and carType != ''">
            AND cid_out.car_type = #{carType}
        </if>
        <if test="statusCd != null and statusCd != ''">
            AND out_rec.status_cd = #{statusCd}
        </if>
        <if test="state != null and state != ''">
            AND out_rec.state = #{state}
        </if>
        <if test="states != null">
            AND out_rec.state IN
            <foreach collection="states" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="communityId != null and communityId != ''">
            AND out_rec.community_id = #{communityId}
        </if>
        <if test="outTime != null and outTime != ''">
            AND out_rec.out_time = #{outTime}
        </if>
        <if test="startTime != null and startTime != ''">
            AND in_rec.in_time &gt; #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND in_rec.in_time &lt; #{endTime}
        </if>
 
        GROUP BY
        out_rec.in_time, out_rec.inout_id, out_rec.pa_id, out_rec.car_num,
        out_rec.status_cd, out_rec.state, out_rec.community_id, out_rec.out_time,
        in_rec.in_time, in_rec.inout_id, in_rec.state,
        td_out.`name`, td_in.`name`, pa.num, tcfc.fee_name, tcfc.config_id
 
        ORDER BY out_rec.create_time DESC
 
        <if test="page != -1 and page != null ">
            limit #{page}, #{row}
        </if>
 
    </select>
 
 
    <!-- 修改车辆进出场信息 add by wuxw 2018-07-03 -->
    <update id="updateCarInoutInfo" parameterType="Map">
        update car_inout t set t.status_cd = #{statusCd}
        <if test="newBId != null and newBId != ''">
            ,t.b_id = #{newBId}
        </if>
        <if test="inTime !=null and inTime != ''">
            , t.in_time= #{inTime}
        </if>
        <if test="carNum !=null and carNum != ''">
            , t.car_num= #{carNum}
        </if>
        <if test="state !=null and state != ''">
            , t.state= #{state}
        </if>
        <if test="outTime !=null and outTime != ''">
            , t.out_time= #{outTime}
        </if>
        where 1=1
        <if test="inoutId !=null and inoutId != ''">
            and t.inout_id= #{inoutId}
        </if>
        <if test="paId !=null and paId != ''">
            and t.pa_id= #{paId}
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
 
    </update>
 
    <!-- 查询车辆进出场数量 add by wuxw 2018-07-03 -->
    <select id="queryCarInoutsCount" parameterType="Map" resultType="Map">
        select count(1) count
        from car_inout t
        where 1 =1
        <if test="inTime !=null and inTime != ''">
            and t.in_time= #{inTime}
        </if>
        <if test="paId !=null and paId != ''">
            and t.pa_id= #{paId}
        </if>
        <if test="paIds !=null">
            and t.pa_id in
            <foreach collection="paIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="carNum !=null and carNum != ''">
            and t.car_num like concat('%',#{carNum},'%')
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
        </if>
        <if test="state !=null and state != ''">
            and t.state= #{state}
        </if>
        <if test="states !=null">
            and t.state in
            <foreach collection="states" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="communityId !=null and communityId != ''">
            and t.community_id= #{communityId}
        </if>
        <if test="outTime !=null and outTime != ''">
            and t.out_time= #{outTime}
        </if>
        <if test="startTime !=null and startTime != ''">
            and t.in_time &gt; #{startTime}
        </if>
        <if test="endTime !=null and endTime != ''">
            and t.in_time &lt; #{endTime}
        </if>
 
 
    </select>
 
</mapper>