<?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="cn.iocoder.yudao.module.server.dal.mysql.workorderInfos.WorkorderInfosMapper">

    <!--
        一般情况下，尽可能使用 Mapper 进行 CRUD 增删改查即可。
        无法满足的场景，例如说多表关联查询，才使用 XML 编写 SQL。
        代码生成器暂时只生成 Mapper XML 文件本身，更多推荐 MybatisX 快速开发插件来生成查询。
        文档可见：https://www.iocoder.cn/MyBatis/x-plugins/
     -->
    <select id="selectWorkorders" resultType="cn.iocoder.yudao.module.server.dal.dataobject.workorderInfos.WorkorderInfosDO">
        SELECT *
        FROM workorder_infos
        <where>
            <choose>
                <!-- 当 idList 有值时，使用 OR 组合条件 -->
                <when test="idList != null and idList.size() > 0">
                    (
                    id IN
                    <foreach collection="idList" item="id" open="(" separator="," close=")">
                        #{id}
                    </foreach>
                    OR
                    (
                    <trim prefixOverrides="AND">
                        <if test="reqVO.categoryId != null">
                            AND category_id = #{reqVO.categoryId}
                        </if>
                        <if test="reqVO.techOperatorId != null">
                            AND tech_operator_id = #{reqVO.techOperatorId}
                        </if>
                        <if test="reqVO.userId != null">
                            AND user_id = #{reqVO.userId}
                        </if>
                        <if test="reqVO.requirement != null and reqVO.requirement != ''">
                            AND requirement LIKE CONCAT('%', #{reqVO.requirement}, '%')
                        </if>
                        <if test="reqVO.orderTime != null and reqVO.orderTime.length == 2">
                            AND order_time BETWEEN #{reqVO.orderTime[0]} AND #{reqVO.orderTime[1]}
                        </if>
                        <if test="reqVO.expectedCompletionDate != null and reqVO.expectedCompletionDate.length == 2">
                            AND expected_completion_date BETWEEN #{reqVO.expectedCompletionDate[0]} AND #{reqVO.expectedCompletionDate[1]}
                        </if>
                        <if test="reqVO.status != null">
                            AND status = #{reqVO.status}
                        </if>
                    </trim>
                    )
                    )
                </when>
                <!-- 当 idList 为空时，只使用其他条件 -->
                <otherwise>
                    <trim prefixOverrides="AND">
                        <if test="reqVO.categoryId != null">
                            AND category_id = #{reqVO.categoryId}
                        </if>
                        <if test="reqVO.techOperatorId != null">
                            AND tech_operator_id = #{reqVO.techOperatorId}
                        </if>
                        <if test="reqVO.userId != null">
                            AND user_id = #{reqVO.userId}
                        </if>
                        <if test="reqVO.requirement != null and reqVO.requirement != ''">
                            AND requirement LIKE CONCAT('%', #{reqVO.requirement}, '%')
                        </if>
                        <if test="reqVO.orderTime != null and reqVO.orderTime.length == 2">
                            AND order_time BETWEEN #{reqVO.orderTime[0]} AND #{reqVO.orderTime[1]}
                        </if>
                        <if test="reqVO.expectedCompletionDate != null and reqVO.expectedCompletionDate.length == 2">
                            AND expected_completion_date BETWEEN #{reqVO.expectedCompletionDate[0]} AND #{reqVO.expectedCompletionDate[1]}
                        </if>
                        <if test="reqVO.status != null">
                            AND status = #{reqVO.status}
                        </if>
                    </trim>
                </otherwise>
            </choose>
        </where>
        ORDER BY order_time DESC
    </select>
</mapper>