chengf
2026-03-11 b88a288f4f787b509463678e3cd9ccfa3f37014b
java110-db/src/main/resources/mapper/common/CarInoutV1ServiceDaoImplMapper.xml
@@ -17,59 +17,127 @@
    <!-- 查询车辆进出场信息 add by wuxw 2018-07-03 -->
    <select id="getCarInoutInfo" parameterType="Map" resultType="Map">
        select t.in_time,t.in_time inTime,t.inout_id,t.inout_id inoutId,t.pa_id,t.pa_id paId,t.car_num,t.car_num
        carNum,t.status_cd,t.status_cd statusCd,t.state,t.community_id,t.community_id communityId,t.out_time,t.out_time
        outTime,td.`name` stateName,pa.num areaNum,tcfc.fee_name feeName,tcfc.config_id configId,max(cid.car_type) carType
        from car_inout t
        LEFT JOIN car_inout_detail cid on t.inout_id = cid.inout_id and cid.status_cd = '0' and cid.state in ('100300','100400','100600')
        left join t_dict td on t.state = td.status_cd and td.table_columns='state' and td.table_name = 'car_inout'
        left join parking_area pa on t.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
        <if test="inTime !=null and inTime != ''">
            and t.in_time= #{inTime}
        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 t.inout_id= #{inoutId}
        <if test="inoutId != null and inoutId != ''">
            AND out_rec.inout_id = #{inoutId}
        </if>
        <if test="paId !=null and paId != ''">
            and t.pa_id= #{paId}
        <if test="paId != null and paId != ''">
            AND out_rec.pa_id = #{paId}
        </if>
        <if test="paIds !=null">
            and t.pa_id in
        <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 t.car_num= #{carNum}
        <if test="carNum != null and carNum != ''">
            AND out_rec.car_num LIKE CONCAT('%', #{carNum}, '%')
        </if>
        <if test="carType !=null and carType != ''">
            and cid.car_type= #{carType}
        <if test="carType != null and carType != ''">
            AND cid_out.car_type = #{carType}
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
        <if test="statusCd != null and statusCd != ''">
            AND out_rec.status_cd = #{statusCd}
        </if>
        <if test="state !=null and state != ''">
            and t.state= #{state}
        <if test="state != null and state != ''">
            AND out_rec.state = #{state}
        </if>
        <if test="states !=null">
            and t.state in
        <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 t.community_id= #{communityId}
        <if test="communityId != null and communityId != ''">
            AND out_rec.community_id = #{communityId}
        </if>
        <if test="outTime !=null and outTime != ''">
            and t.out_time= #{outTime}
        <if test="outTime != null and outTime != ''">
            AND out_rec.out_time = #{outTime}
        </if>
        group by t.in_time,t.inout_id,t.pa_id,t.car_num,t.status_cd,t.state,t.community_id,t.out_time,td.`name`,pa.num,tcfc.fee_name,tcfc.config_id
        order by t.create_time desc
        <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>
@@ -112,9 +180,6 @@
        <if test="inTime !=null and inTime != ''">
            and t.in_time= #{inTime}
        </if>
        <if test="inoutId !=null and inoutId != ''">
            and t.inout_id= #{inoutId}
        </if>
        <if test="paId !=null and paId != ''">
            and t.pa_id= #{paId}
        </if>
@@ -125,7 +190,7 @@
            </foreach>
        </if>
        <if test="carNum !=null and carNum != ''">
            and t.car_num= #{carNum}
            and t.car_num like concat('%',#{carNum},'%')
        </if>
        <if test="statusCd !=null and statusCd != ''">
            and t.status_cd= #{statusCd}
@@ -145,6 +210,15 @@
        <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>
        <if test="merchantId !=null and merchantId != ''">
            and t.merchant_id &lt; #{merchantId}
        </if>
    </select>