wlzboy
4 天以前 06a17c236d4cb9b8da75fce43af938cb7ea510bf
ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
@@ -14,7 +14,6 @@
        <result property="vehicleModel"   column="vehicle_model"   />
        <result property="status"         column="status"          />
        <result property="platformCode"   column="platform_code"   />
        <result property="deptId"         column="dept_id"         />
        <result property="deptName"       column="dept_name"       />
        <result property="createBy"       column="create_by"       />
        <result property="createTime"     column="create_time"     />
@@ -22,39 +21,138 @@
        <result property="updateTime"     column="update_time"     />
        <result property="remark"         column="remark"          />
    </resultMap>
    <!-- 包含多分公司关联的完整结果映射(仅在需要时使用) -->
    <resultMap type="com.ruoyi.system.domain.VehicleInfo" id="VehicleInfoWithDeptsResult" extends="VehicleInfoResult">
        <!-- 多个分公司关联(立即加载,避免延迟加载导致的序列化问题) -->
        <collection property="deptIds" ofType="Long"
                    select="selectVehicleDeptIds"
                    column="vehicle_id"
                    fetchType="eager"/>
        <collection property="deptNames" ofType="String"
                    select="selectVehicleDeptNames"
                    column="vehicle_id"
                    fetchType="eager"/>
    </resultMap>
    <sql id="selectVehicleInfoVo">
        select v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand, v.vehicle_model, v.status, v.platform_code, v.dept_id, d.dept_name, v.create_by, v.create_time, v.update_by, v.update_time, v.remark
        select v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand, v.vehicle_model, v.status, v.platform_code, v.create_by, v.create_time, v.update_by, v.update_time, v.remark
        from tb_vehicle_info v
        left join sys_dept d on v.dept_id = d.dept_id
    </sql>
    <!-- 查询车辆关联的所有分公司ID -->
    <select id="selectVehicleDeptIds" resultType="Long">
        SELECT dept_id FROM tb_vehicle_dept WHERE vehicle_id = #{vehicle_id}
    </select>
    <!-- 查询车辆关联的所有分公司名称 -->
    <select id="selectVehicleDeptNames" resultType="String">
        SELECT d.dept_name
        FROM tb_vehicle_dept vd
        LEFT JOIN sys_dept d ON vd.dept_id = d.dept_id
        WHERE vd.vehicle_id = #{vehicle_id}
    </select>
    <select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult">
        <include refid="selectVehicleInfoVo"/>
    <select id="selectVehicleInfoListWithDepts" parameterType="VehicleInfo" resultMap="VehicleInfoWithDeptsResult">
        select v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand,
               v.vehicle_model, v.status, v.platform_code, v.create_by, v.create_time,
               v.update_by, v.update_time, v.remark
        from tb_vehicle_info v
        <where>  
            <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no = #{vehicleNo}</if>
            <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no LIKE concat('%', #{vehicleNo}, '%')</if>
            <if test="deviceId != null  and deviceId != ''"> and v.device_id = #{deviceId}</if>
            <if test="vehicleType != null  and vehicleType != ''"> and v.vehicle_type = #{vehicleType}</if>
            <if test="vehicleBrand != null  and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if>
            <if test="vehicleModel != null  and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if>
            <if test="status != null  and status != ''"> and v.status = #{status}</if>
            <if test="platformCode != null  and platformCode != ''"> and v.platform_code = #{platformCode}</if>
            <if test="deptId != null"> and v.dept_id = #{deptId}</if>
            <!-- 任务车辆选择必须过滤:只显示car_id和dept_id都不为空的车辆 -->
            and v.car_id is not null and v.car_id != ''
            and v.dept_id is not null
            <!-- 部门过滤:根据分公司ID查询车辆(通过关联表) -->
            <if test="deptId != null">
                and EXISTS (
                    SELECT 1 FROM tb_vehicle_dept vd2
                    WHERE vd2.vehicle_id = v.vehicle_id
                    AND vd2.dept_id = #{deptId}
                )
            </if>
            and v.status=0
        </where>
        group by v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand,
                 v.vehicle_model, v.status, v.platform_code, v.create_by, v.create_time,
                 v.update_by, v.update_time, v.remark
        order by v.create_time desc
    </select>
    
    <select id="selectVehicleInfoById" parameterType="Long" resultMap="VehicleInfoResult">
    <select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult">
        select v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand,
               v.vehicle_model, v.status, v.platform_code, v.create_by, v.create_time,
               v.update_by, v.update_time, v.remark,
               GROUP_CONCAT(DISTINCT d.dept_name ORDER BY d.dept_name SEPARATOR ',') as dept_name
        from tb_vehicle_info v
        left join tb_vehicle_dept vd on v.vehicle_id = vd.vehicle_id
        left join sys_dept d on vd.dept_id = d.dept_id
        <where>
            <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no LIKE concat('%', #{vehicleNo}, '%')</if>
            <if test="deviceId != null  and deviceId != ''"> and v.device_id = #{deviceId}</if>
            <if test="vehicleType != null  and vehicleType != ''"> and v.vehicle_type = #{vehicleType}</if>
            <if test="vehicleBrand != null  and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if>
            <if test="vehicleModel != null  and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if>
            <if test="status != null  and status != ''"> and v.status = #{status}</if>
            <if test="platformCode != null  and platformCode != ''"> and v.platform_code = #{platformCode}</if>
            <!-- 部门过滤:根据分公司ID查询车辆(通过关联表) -->
            <if test="deptId != null">
                and EXISTS (
                    SELECT 1 FROM tb_vehicle_dept vd2
                    WHERE vd2.vehicle_id = v.vehicle_id
                    AND vd2.dept_id = #{deptId}
                )
            </if>
            <!-- 任务车辆选择必须过滤:只显示car_id不为空且已关联分公司的车辆 -->
<!--            and v.car_id is not null and v.car_id != ''-->
<!--            and EXISTS (SELECT 1 FROM tb_vehicle_dept vd WHERE vd.vehicle_id = v.vehicle_id)-->
            and v.status=0
        </where>
        group by v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand,
                 v.vehicle_model, v.status, v.platform_code, v.create_by, v.create_time,
                 v.update_by, v.update_time, v.remark
    </select>
    <select id="selectVehicleInfoById" parameterType="Long" resultMap="VehicleInfoWithDeptsResult">
        <include refid="selectVehicleInfoVo"/>
        where v.vehicle_id = #{vehicleId}
    </select>
    <!-- 查询车辆信息(包含多分公司关联) -->
    <select id="selectVehicleInfoWithDeptsById" parameterType="Long" resultMap="VehicleInfoWithDeptsResult">
        <include refid="selectVehicleInfoVo"/>
        where v.vehicle_id = #{vehicleId}
    </select>
    <select id="selectVehicleInfoByPlateNumber" parameterType="String" resultMap="VehicleInfoResult">
        <include refid="selectVehicleInfoVo"/>
        where v.vehicle_no = #{plateNumber}
        where v.vehicle_no LIKE concat('%', #{plateNumber}, '%')
        limit 1
    </select>
    <select id="selectVehicleInfoByVehicleNo" parameterType="String" resultMap="VehicleInfoResult">
        <include refid="selectVehicleInfoVo"/>
        where v.vehicle_no LIKE concat('%', #{vehicleNo}, '%')
    </select>
    <!-- 根据旧系统车辆ID(CarID)查询车辆信息 -->
    <select id="selectVehicleInfoByCarId" parameterType="Integer" resultMap="VehicleInfoResult">
        <include refid="selectVehicleInfoVo"/>
        where v.car_id = #{carId}
    </select>
    <!-- 根据旧系统车辆ID查询车辆信息 -->
    <select id="selectVehicleInfoByCarID" resultType="java.util.HashMap">
        SELECT
            vehicle_id,
            car_id,
            vehicle_no
        FROM tb_vehicle_info
        WHERE car_id = #{carID}
    </select>
        
    <insert id="insertVehicleInfo" parameterType="VehicleInfo" useGeneratedKeys="true" keyProperty="vehicleId">
@@ -68,7 +166,6 @@
            <if test="vehicleModel != null">vehicle_model,</if>
            <if test="status != null">status,</if>
            <if test="platformCode != null">platform_code,</if>
            <if test="deptId != null">dept_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
@@ -84,7 +181,6 @@
            <if test="vehicleModel != null">#{vehicleModel},</if>
            <if test="status != null">#{status},</if>
            <if test="platformCode != null">#{platformCode},</if>
            <if test="deptId != null">#{deptId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
@@ -104,7 +200,6 @@
            <if test="vehicleModel != null">vehicle_model = #{vehicleModel},</if>
            <if test="status != null">status = #{status},</if>
            <if test="platformCode != null">platform_code = #{platformCode},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remark != null">remark = #{remark},</if>
@@ -152,4 +247,22 @@
        ORDER BY uv.bind_time DESC
        LIMIT 1
    </select>
    <!-- 批量插入车辆-分公司关联 -->
    <insert id="batchInsertVehicleDept">
        INSERT INTO tb_vehicle_dept (vehicle_id, dept_id, order_class, create_by, create_time)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.vehicleId}, #{item.deptId}, #{item.orderClass}, #{item.createBy}, NOW())
        </foreach>
        ON DUPLICATE KEY UPDATE
        order_class = VALUES(order_class),
        update_by = VALUES(create_by),
        update_time = NOW()
    </insert>
    <!-- 删除车辆的所有分公司关联 -->
    <delete id="deleteVehicleDeptByVehicleId">
        DELETE FROM tb_vehicle_dept WHERE vehicle_id = #{vehicleId}
    </delete>
</mapper>