<?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.bonus.material.clz.mapper.MaterialMachineMapper">
    <select id="getMachineInfo" resultType="com.bonus.material.ma.domain.Machine">
        SELECT
        mt3.type_name AS materialName,
        mt2.type_name AS typeName,
        mt1.type_name AS typeCode,
        mt.type_name AS maModel,
        mm.ma_code AS maCode,
        mm.qr_code AS qrCode,
        mm.ma_status AS maStatus,
        mm.this_check_time AS thisCheckTime,
        mm.next_check_time AS nextCheckTime,
        mm.inspect_man AS checkMan,
        mm.out_fac_time AS outFacTime,
        mm.create_time AS inputTime,
        mm.ma_id AS maId,
        bp.imp_unit AS impUnit,
        bu.bzz_idcard AS idCard,
        bp.external_id as externalId
        FROM
        slt_agreement_info sai
        left join ma_machine mm ON sai.type_id = mm.type_id and mm.ma_id = sai.ma_id
        left join ma_type mt ON mt.type_id = mm.type_id and mt.del_flag = 0
        left join ma_type mt1 ON mt.parent_id = mt1.type_id and mt1.del_flag = 0
        left join ma_type mt2 ON mt1.parent_id = mt2.type_id and mt2.del_flag = 0
        left join ma_type mt3 ON mt3.type_id = mt2.parent_id and mt3.del_flag = 0
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        WHERE sai.`status` = '0'  and mm.ma_code is not NULL
        <if test="typeCode != null and typeCode != ''">
            and mt1.type_name like concat('%', #{typeCode}, '%')
        </if>
        <if test="maModel != null and maModel != ''">
            and mt.type_name like concat('%', #{maModel}, '%')
        </if>
        <if test="impUnit != null and impUnit != ''">
            and bp.imp_unit = #{impUnit}
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and bp.external_id in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        mm.ma_id
    </select>

    <select id="getRetainedEquipmentList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        mt.type_id                          AS typeId,
        mt4.type_name                       AS constructionType,
        mt4.type_id                         AS firstTypeId,
        mt3.type_name                       AS materialType,
        mt3.type_id                         AS secondTypeId,
        mt2.type_name                       AS typeName,
        mt2.type_id                         AS thirdTypeId,
        mt.type_name                        AS typeModelName,
        mt.unit_name                        AS unit,
        IFNULL(mt.lease_price, 0)            AS buyPrice,
        subquery1.proId                      AS proId,
        subquery1.proName                   AS proName,
        subquery1.externalId                AS externalId,
        subquery1.impUnit                   AS impUnit,
        subquery1.idCard                    AS idCard,
        IFNULL(subquery1.usNum, 0) - IFNULL(subquery3.usNum, 0)    AS storeNum,
        IFNULL(subquery3.usNum, 0)          AS usNum,
        IFNULL(subquery1.usNum, 0)          AS allNum,
        CASE mt.manage_type
        WHEN 0 THEN
        '编码'
        ELSE
        '数量'
        END                                manageType,
        subquery1.proCenter      AS proCenter
        FROM ma_type mt
        LEFT JOIN (
        SELECT
        mt.type_id,
        mt4.type_name AS constructionType,
        mt4.type_id AS firstTypeId,
        mt3.type_name AS materialType,
        mt3.type_id AS secondTypeId,
        mt2.type_name AS typeName,
        mt2.type_id AS thirdTypeId,
        mt.type_name AS typeModelName,
        SUM(IFNULL( sai.num, 0 )) AS usNum,
        bp.pro_name as proName,
        bp.pro_id as proId,
        bp.external_id as externalId,
        bp.imp_unit AS impUnit,
        bu.bzz_idcard AS idCard,
        bp.pro_center AS proCenter
        FROM
        slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        AND bu.del_flag = '0'
        WHERE
        sai.`status` = '0'
        AND sai.is_slt = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        GROUP BY mt.type_id, bp.pro_id
        ) AS subquery1
        ON mt.type_id = subquery1.type_id
        LEFT JOIN (
        SELECT
        mt.type_id,
        mt4.type_name AS constructionType,
        mt4.type_id AS firstTypeId,
        mt3.type_name AS materialType,
        mt3.type_id AS secondTypeId,
        mt2.type_name AS typeName,
        mt2.type_id AS thirdTypeId,
        mt.type_name AS typeModelName,
        SUM(IFNULL( sai.num, 0 )) AS usNum,
        bp.pro_name as proName,
        bp.pro_id as proId,
        bp.external_id as externalId,
        bp.imp_unit AS impUnit,
        bu.bzz_idcard AS idCard,
        bp.pro_center AS proCenter
        FROM
        clz_slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        AND bu.del_flag = '0'
        WHERE
        sai.`status` = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        GROUP BY mt.type_id, bp.pro_id
        ) AS subquery3
        ON mt.type_id = subquery3.type_id
        AND subquery1.proId = subquery3.proId
        LEFT JOIN ma_type mt2 on mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        WHERE mt.`level` = 4 and mt.del_flag = '0'
        <if test="typeId != null">
            <if test="level == 3">
                and mt.parent_id = #{typeId}
            </if>
            <if test="level == 2">
                and mt2.parent_id = #{typeId}
            </if>
        </if>
        <if test="proId != null">
            and subquery1.proId = #{proId}
        </if>
        <if test="proCenter != null and proCenter != ''">
            and subquery1.proCenter like concat('%',#{proCenter},'%')
        </if>
        <if test="keyWord != null and keyWord != ''">
            and (
            mt4.type_name like concat('%',#{keyWord},'%') or
            mt3.type_name like concat('%',#{keyWord},'%') or
            mt2.type_name like concat('%',#{keyWord},'%') or
            mt.type_name like concat('%',#{keyWord},'%') or
            subquery1.proName like concat('%',#{keyWord},'%')
            )
        </if>
        <if test="typeName != null and typeName != ''">
            and mt2.type_name like concat('%',#{typeName},'%')
        </if>
        <if test="typeModelName != null and typeModelName != ''">
            and mt.type_name like concat('%',#{typeModelName},'%')
        </if>
        <if test="impUnit != null and impUnit != ''">
            and subquery1.impUnit = #{impUnit}
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and subquery1.externalId in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        mt.type_id,
        subquery1.proId,
        subquery1.proCenter
    </select>

    <select id="getMaCodeList"
            resultType="com.bonus.material.clz.domain.machine.MaterialStorageInfo">
        SELECT
        mt2.type_name AS typeName,
        mt.type_name AS typeModelName,
        mt.lease_price AS buyPrice,
        sai.num AS storeNum,
        mm.ma_code AS maCode,
        bt.unit_name AS teamName,
        sai.lease_id AS leaseId,
        sai.type_id AS typeId,
        lai.code AS code,
        sai.ma_id AS maId
        FROM
        slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        LEFT JOIN bm_agreement_info bai ON bai.agreement_id = sai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN lease_apply_info lai ON lai.id = sai.lease_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        WHERE
        sai.status = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="typeId != null">
            AND sai.type_id = #{typeId}
        </if>
        <if test="proId != null and proId != ''">
            AND bp.pro_id = #{proId}
        </if>
    </select>

    <select id="selectInFo" resultType="com.bonus.material.clz.domain.machine.MaterialStorageInfo">
        SELECT
            lod.create_time as inputTime,
            GROUP_CONCAT( DISTINCT su.nick_name ) AS inputUser
        FROM
            lease_out_details lod
        LEFT JOIN sys_user su on su.user_id = lod.create_by
        WHERE lod.parent_id = #{leaseId}
        GROUP BY lod.parent_id
            LIMIT 1
    </select>

    <select id="getTeamUseNumList"
            resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        bt.unit_name AS teamName,
        mt.type_name AS typeModelName,
        mt2.type_name AS typeName,
        SUM(IFNULL(sai.num, 0)) AS usNum,
        mt2.type_id AS typeId,
        bp.imp_unit AS impUnit,
        bt.bzz_idcard AS idCard,
        bp.external_id as externalId
        FROM
        clz_slt_agreement_info sai
        LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
        WHERE
        sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="teamId != null and teamId != ''">
            AND bt.unit_id = #{teamId}
        </if>
        <if test="teamName != null and teamName != ''">
            AND bt.unit_name LIKE concat('%',#{teamName},'%')
        </if>
        <if test="keyWord != null and keyWord != ''">
            AND (
            mt2.type_name LIKE concat('%',#{keyWord},'%')
            OR mt.type_name LIKE concat('%',#{keyWord},'%')
            OR bt.unit_name LIKE concat('%',#{keyWord},'%')
            )
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and bp.external_id in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        bt.unit_name,
        mt2.type_name;
    </select>

    <select id="getTeamUseNumDetailsList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        bt.unit_name AS teamName,
        mt.type_name AS typeModelName,
        mt2.type_name AS typeName,
        SUM(IFNULL(sai.num, 0)) AS usNum,
        mm.ma_code AS maCode,
        mm.this_check_time AS thisCheckTime,
        mm.next_check_time AS nextCheckTime,
        mt.manage_type AS manageType,
        bp.imp_unit AS impUnit,
        bt.bzz_idcard AS idCard,
        bp.pro_name AS proName,
        CASE
        WHEN mm.next_check_time &lt; CURDATE() THEN 3  -- 已超过当前时间
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 30 THEN 2  -- 相差不足1个月
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 90 THEN 1  -- 相差不足3个月
        ELSE 0  -- 相差3个月以上
        END AS status
        FROM
        clz_slt_agreement_info sai
        LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        WHERE
        sai.status = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="typeId != null">
            and mt2.type_id = #{typeId}
        </if>
        <if test="maId != null">
            and sai.ma_id = #{maId}
        </if>
        <if test="teamId != null and teamId != ''">
            AND bt.unit_id = #{teamId}
        </if>
        <if test="teamName != null and teamName != ''">
            AND bt.unit_name LIKE concat('%',#{teamName},'%')
        </if>
        <if test="keyWord != null and keyWord != ''">
            AND (
            mt2.type_name LIKE concat('%',#{keyWord},'%')
            OR mt.type_name LIKE concat('%',#{keyWord},'%')
            OR bt.unit_name LIKE concat('%',#{keyWord},'%')
            OR mm.ma_code LIKE concat('%',#{keyWord},'%')
            )
        </if>
        <if test="jiJuType != null and jiJuType != 0">
             and mt.jiju_type = #{jiJuType}
        </if>
        GROUP BY
        mt.type_name,
        mt2.type_name,
        mm.ma_id
    </select>

    <select id="getTeamData" resultType="com.bonus.material.clz.domain.BmTeam">
        SELECT
            unit_id as id,
            unit_name as teamName
        FROM
            bm_unit
        WHERE bzz_idcard = #{username}
    </select>

    <select id="getToolsLedgerList"
            resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        mt.type_id                          AS typeId,
        mt4.type_name                       AS constructionType,
        mt4.type_id                         AS firstTypeId,
        mt3.type_name                       AS materialType,
        mt3.type_id                         AS secondTypeId,
        mt2.type_name                       AS typeName,
        mt2.type_id                         AS thirdTypeId,
        mt.type_name                        AS typeModelName,
        mt.unit_name                        AS unit,
        IFNULL(mt.lease_price, 0)            AS buyPrice,
        subquery1.externalId                AS externalId,
        subquery1.impUnit                   AS impUnit,
        subquery1.idCard                    AS idCard,
        IFNULL(subquery1.usNum, 0) - IFNULL(subquery3.usNum, 0)    AS storeNum,
        IFNULL(subquery3.usNum, 0)          AS usNum,
        IFNULL(subquery1.usNum, 0)          AS allNum,
        CASE mt.manage_type
        WHEN 0 THEN
        '编码'
        ELSE
        '数量'
        END                                manageType
        FROM ma_type mt
        LEFT JOIN (
        SELECT
        mt.type_id,
        mt4.type_name AS constructionType,
        mt4.type_id AS firstTypeId,
        mt3.type_name AS materialType,
        mt3.type_id AS secondTypeId,
        mt2.type_name AS typeName,
        mt2.type_id AS thirdTypeId,
        mt.type_name AS typeModelName,
        SUM(IFNULL( sai.num, 0 )) AS usNum,
        bp.external_id as externalId,
        bp.imp_unit AS impUnit,
        bu.bzz_idcard AS idCard
        FROM
        slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        AND bu.del_flag = '0'
        WHERE
        sai.`status` = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        GROUP BY mt.type_id
        ) AS subquery1
        ON mt.type_id = subquery1.type_id
        LEFT JOIN (
        SELECT
        mt.type_id,
        mt4.type_name AS constructionType,
        mt4.type_id AS firstTypeId,
        mt3.type_name AS materialType,
        mt3.type_id AS secondTypeId,
        mt2.type_name AS typeName,
        mt2.type_id AS thirdTypeId,
        mt.type_name AS typeModelName,
        SUM(IFNULL( sai.num, 0 )) AS usNum,
        bp.external_id as externalId,
        bp.imp_unit AS impUnit,
        bu.bzz_idcard AS idCard
        FROM
        clz_slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        AND bu.del_flag = '0'
        WHERE
        sai.`status` = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        GROUP BY mt.type_id
        ) AS subquery3
        ON mt.type_id = subquery3.type_id
        LEFT JOIN ma_type mt2 on mt2.type_id = mt.parent_id
        LEFT JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
        LEFT JOIN ma_type mt4 ON mt4.type_id = mt3.parent_id
        WHERE mt.`level` = 4 and mt.del_flag = '0'
        <if test="keyWord != null and keyWord != ''">
            and (mt2.type_name like concat('%',#{keyWord},'%')
            OR mt.type_name like concat('%',#{keyWord},'%') )
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and subquery1.externalId in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        mt.type_id
    </select>

    <select id="getToolsLedgerDetailsList"
            resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        bt.unit_name AS teamName,
        mt.type_name AS typeModelName,
        mt1.type_name AS typeName,
        mm.ma_code AS maCode,
        mm.this_check_time AS thisCheckTime,
        mm.next_check_time AS nextCheckTime,
        mt.manage_type AS manageType,
        bp.external_id as externalId,
        bp.imp_unit AS impUnit,
        bt.bzz_idcard AS idCard,
        CASE
        WHEN mm.next_check_time &lt; CURDATE() THEN 3  -- 已超过当前时间
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 30 THEN 2  -- 相差不足1个月
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 90 THEN 1  -- 相差不足3个月
        ELSE 0  -- 相差3个月以上
        END AS status
        FROM
        slt_agreement_info sai
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt1 ON mt1.parent_id = mt1.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        WHERE
        sai.status = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="typeId != null">
            and mt.type_id = #{typeId}
        </if>
        <if test="maCode != null and maCode != ''">
            AND mm.ma_code like concat('%',#{maCode},'%')
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and bp.external_id in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
        mt.type_name,
        mt1.type_name,
        mm.ma_id
    </select>

    <select id="getToolsDetailsListByTeam"
            resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT aa.typeName,
               aa.typeModelName,
               mm.ma_code          as maCode,
               mm.this_check_time as thisCheckTime,
               mm.next_check_time as nextCheckTime
        FROM (SELECT t1.maId,
                     t1.typeName,
                     t1.typeModelName,
                     t1.typeId,
                     t1.thirdTypeId,
                     t1.manageType
              FROM (SELECT lod.ma_id       as maId,
                           mt2.type_name   as typeName,
                           mt1.type_name   as typeModelName,
                           lod.type_id     as typeId,
                           mt2.type_id     as thirdTypeId,
                           mt1.manage_type as manageType,
                           mt1.buy_price   as buyPrice,
                           mt1.unit_name   as unit,
                           COUNT(*) as count
                    FROM
                        clz_lease_out_details lod
                        LEFT JOIN clz_lease_apply_info lai
                    on lai.id=lod.parent_id
                        LEFT JOIN ma_type mt1 on mt1.type_id=lod.type_id
                        LEFT JOIN ma_type mt2 on mt2.type_id=mt1.parent_id
                    WHERE
                        lai.team_id = #{teamId}
                      and lod.is_finished='1'
                      and lod.type_id = #{typeId}
                    GROUP BY lod.ma_id, lod.type_id) t1
                       LEFT JOIN (SELECT bcd.ma_id as maId,
                                         COUNT(*) as count
                                  FROM
                                      clz_back_check_details bcd
                                      LEFT JOIN clz_back_apply_info bai
                                  on bai.id=bcd.parent_id
                                      LEFT JOIN tm_task tt on tt.task_id = bai.task_id
                                      LEFT JOIN tm_task_agreement tta on tta.task_id = tt.task_id
                                      LEFT JOIN clz_bm_agreement_info bagi on bagi.agreement_id = tta.agreement_id
                                  WHERE
                                      bagi.unit_id = #{teamId}
                                    and bcd.is_finished='1'
                                    and bcd.type_id = #{typeId}
                                  GROUP BY bcd.ma_id) t2 ON t1.maId = t2.maId
              WHERE t1.count > IFNULL(t2.count, 0)) aa
                 LEFT JOIN ma_machine mm
                           on aa.maId = mm.ma_id
    </select>

    <select id="getToolsDetailsList"
            resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
        bt.unit_name AS teamName,
        mt.type_name AS typeModelName,
        mt1.type_name AS typeName,
        mm.ma_code AS maCode,
        mm.this_check_time AS thisCheckTime,
        mm.next_check_time AS nextCheckTime,
        mt.manage_type AS manageType,
        CASE
        WHEN mm.next_check_time &lt; CURDATE() THEN 3  -- 已超过当前时间
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 30 THEN 2  -- 相差不足1个月
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 90 THEN 1  -- 相差不足3个月
        ELSE 0  -- 相差3个月以上
        END AS status
        FROM
        slt_agreement_info sai
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt1 ON mt.parent_id = mt1.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        WHERE
        sai.status = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="typeId != null">
            and mt.type_id = #{typeId}
        </if>
        <if test="keyWord != null and keyWord != ''">
            AND (mm.ma_code like concat('%',#{keyWord},'%')
            OR mt1.type_name like concat('%',#{keyWord},'%')
            OR mt.type_name like concat('%',#{keyWord},'%'))
        </if>
        GROUP BY
        mt.type_name,
        mt1.type_name,
        mm.ma_id
    </select>

    <select id="selectStatusById" resultType="com.bonus.material.clz.domain.vo.MaterialSltAgreementInfo">
        SELECT
               type_id as typeId,
               ma_id as maId,
               status as  status
        FROM clz_slt_agreement_info
        WHERE status = '0' and ma_id = #{maId}
    </select>

    <select id="getSltAgreementInfo" resultType="com.bonus.material.ma.domain.Machine">
        SELECT
            mt3.type_name AS materialName,
            mt2.type_name AS typeName,
            mt1.type_name AS typeCode,
            mt.type_name AS maModel,
            mm.ma_code AS maCode,
            mm.qr_code AS qrCode,
            mm.ma_status AS maStatus,
            mm.this_check_time AS thisCheckTime,
            mm.next_check_time AS nextCheckTime,
            mm.inspect_man AS checkMan,
            mm.out_fac_time AS outFacTime,
            mm.create_time AS inputTime,
            mm.ma_id AS maId,
            bp.imp_unit AS impUnit,
            bu.bzz_idcard AS idCard,
            bp.external_id as externalId
        FROM
            clz_slt_agreement_info sai
                left join ma_machine mm ON sai.type_id = mm.type_id and mm.ma_id = sai.ma_id
                left join ma_type mt ON mt.type_id = mm.type_id and mt.del_flag = 0
                left join ma_type mt1 ON mt.parent_id = mt1.type_id and mt1.del_flag = 0
                left join ma_type mt2 ON mt1.parent_id = mt2.type_id and mt2.del_flag = 0
                left join ma_type mt3 ON mt3.type_id = mt2.parent_id and mt3.del_flag = 0
                LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
                LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
                LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id
        WHERE  mm.ma_code is not NULL
        <if test="typeCode != null and typeCode != ''">
            and mt1.type_name like concat('%', #{typeCode}, '%')
        </if>
        <if test="maModel != null and maModel != ''">
            and mt.type_name like concat('%', #{maModel}, '%')
        </if>
        <if test="projectIdList != null  and projectIdList.size() > 0">
            and bp.external_id in
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        GROUP BY
            mm.ma_id
    </select>

    <select id="getUserRecords" resultType="com.bonus.material.clz.domain.machine.MaterialUseStorageInfo">
        SELECT
        mt2.type_name AS typeName,
        mt.type_name AS typeModelName,
        mt.lease_price AS buyPrice,
        sai.num AS usNum,
        mm.ma_code AS maCode,
        bt.unit_name AS teamName,
        sai.lease_id AS leaseId,
        sai.type_id AS typeId,
        lai.code AS code,
        sai.ma_id AS maId,
        bp.pro_name AS proName
        FROM
        clz_slt_agreement_info sai
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        LEFT JOIN clz_bm_agreement_info bai ON bai.agreement_id = sai.agreement_id
        LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
        LEFT JOIN clz_lease_apply_info lai ON lai.id = sai.lease_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        WHERE
        sai.status = '0'
        AND sai.end_time IS NULL
        AND sai.back_id IS NULL
        <if test="typeId != null">
            AND sai.type_id = #{typeId}
        </if>
        <if test="proId != null and proId != ''">
            AND bp.pro_id = #{proId}
        </if>
    </select>

    <select id="selectUseInFo" resultType="com.bonus.material.clz.domain.machine.MaterialUseStorageInfo">
        SELECT
            cld.create_time as outTime,
            GROUP_CONCAT( DISTINCT su.nick_name ) AS creator
        FROM
            clz_lease_out_details cld
        left join sys_user su ON su.user_id = cld.create_by
        WHERE parent_id = #{leaseId}
        GROUP BY parent_id
            LIMIT 1
    </select>

    <select id="getTotalList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT * FROM (
        -- 原查询（包含status计算）
        SELECT
        mt2.type_name AS typeName,
        mt.type_name AS typeModelName,
        sai.ma_id AS maId,
        mm.ma_code AS maCode,
        mm.this_check_time AS thisCheckTime,
        mm.next_check_time AS nextCheckTime,
        bp.imp_unit AS impUnit,
        mt.manage_type AS manageType,
        -- 计算status的CASE表达式
        CASE
        WHEN mm.next_check_time &lt; CURDATE() THEN 3  -- 已超过当前时间
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 30 THEN 2  -- 相差不足1个月
        WHEN DATEDIFF(mm.next_check_time, CURDATE()) &lt;= 90 THEN 1  -- 相差不足3个月
        ELSE 0  -- 相差3个月以上
        END AS status,
        bp.pro_name AS proName,
        bu.unit_name AS teamName
        FROM
        slt_agreement_info sai
        LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
        LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
        LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
        LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        LEFT JOIN clz_slt_agreement_info csi ON mm.ma_id = csi.ma_id
        LEFT JOIN clz_bm_agreement_info cba ON csi.agreement_id = cba.agreement_id
        LEFT JOIN bm_unit bu ON cba.unit_id = bu.unit_id
        WHERE
        sai.`status` = '0'
        AND mt.jiju_type = 2
        AND sai.ma_id IS NOT NULL
        <if test="agreementIdList != null and agreementIdList.size >0">
            AND sai.agreement_id IN
            <foreach item="item" collection="agreementIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="deptId != null">
            AND bp.imp_unit = #{deptId}
        </if>
        <if test="keyWord != null and keyWord != ''">
            and (
            bu.unit_name like concat('%',#{keyWord},'%') or
            bp.pro_name like concat('%',#{keyWord},'%') or
            mt2.type_name like concat('%',#{keyWord},'%') or
            mt.type_name like concat('%',#{keyWord},'%') or
            mm.ma_code like concat('%',#{keyWord},'%')
            )
        </if>
        ) AS temp  -- 子查询别名
        -- 对计算出的status进行筛选
        <if test="status != null and status != ''">
            WHERE temp.status = #{status}
        </if>
        -- 排序：proName和teamName都不为空的排在最前面
        ORDER BY
        -- 核心排序逻辑：两个字段都不为空的记录优先级最高
        CASE
        WHEN temp.proName IS NOT NULL AND temp.proName != ''
        AND temp.teamName IS NOT NULL AND temp.teamName != '' THEN 0  -- 优先排在前面
        ELSE 1  -- 其他情况排在后面
        END ASC,
        -- 可根据需要添加其他排序字段（如原顺序或时间）
        temp.maId ASC  -- 示例：按maId升序排列（可选）
    </select>

    <select id="getTeamNumList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedTeamTotalVo">
        SELECT
            bu.unit_id as teamId,
            bu.unit_name as teamName,
            bu.link_man as teamLeaderIdCard,
            SUM( sai.num ) as usNum,
            bu.bzz_idcard as idCard,
            bp.imp_unit as impUnit
        FROM
            bm_unit bu
                LEFT JOIN clz_bm_agreement_info bai ON bu.unit_id = bai.unit_id
                LEFT JOIN clz_slt_agreement_info sai ON bai.agreement_id = sai.agreement_id
                LEFT JOIN bm_project bp ON bp.pro_id = bai.project_id
        WHERE
            sai.`status` = 0 and bu.type_id = 1731
        <if test="keyWord != null and keyWord != ''">
            and (
            bu.unit_name like concat('%',#{keyWord},'%') or
            bu.link_man like concat('%',#{keyWord},'%')
            )
        </if>
        GROUP BY
            bu.unit_id
    </select>

    <select id="getTeamNumSecondList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedTeamVo">
        SELECT
            mt2.type_name AS typeName,
            mt.type_name AS typeModelName,
            SUM(sai.num) AS usNum,
            bt.unit_name AS teamName,
            sai.lease_id AS leaseId,
            sai.type_id AS typeId,
            lai.code AS code,
            lai.lease_person AS leasePerson,
            mt.manage_type AS manageType,
            sai.agreement_id AS agreementId,
            mt.unit_name as unitName
        FROM
            clz_slt_agreement_info sai
                LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
                LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
                LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
                LEFT JOIN clz_bm_agreement_info bai ON bai.agreement_id = sai.agreement_id
                LEFT JOIN bm_unit bt ON bai.unit_id = bt.unit_id
                LEFT JOIN clz_lease_apply_info lai ON lai.id = sai.lease_id
                LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
        WHERE
            sai.status = '0'
          AND bt.unit_id = #{teamId}
        <if test="keyWord != null and keyWord != ''">
            and (
            mt2.type_name like concat('%',#{keyWord},'%') or
            mt.type_name like concat('%',#{keyWord},'%') or
            bt.unit_name like concat('%',#{keyWord},'%') or
            lai.code like concat('%',#{keyWord},'%') or
            lai.lease_person like concat('%',#{keyWord},'%')
            )
        </if>
        GROUP BY sai.type_id
    </select>

    <select id="getTeamNumThirdList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
            mt2.type_name AS typeName,
            mt.type_name AS typeModelName,
            sai.type_id AS typeId,
            sai.ma_id AS maId,
            mm.ma_code AS maCode
        FROM
            clz_slt_agreement_info sai
                LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
                LEFT JOIN ma_type mt2 ON mt.parent_id = mt2.type_id
                LEFT JOIN ma_machine mm ON mm.ma_id = sai.ma_id
        WHERE
            sai.STATUS = '0'
          AND sai.agreement_id = #{agreementId}
          AND sai.type_id = #{typeId}
        <if test="keyWord != null and keyWord != ''">
            and (
            mt2.type_name like concat('%',#{keyWord},'%') or
            mt.type_name like concat('%',#{keyWord},'%') or
            mm.ma_code like concat('%',#{keyWord},'%')
            )
        </if>
        GROUP BY
            sai.ma_id
    </select>

    <select id="getTotalInfoList" resultType="com.bonus.material.clz.domain.vo.MaterialRetainedEquipmentInfo">
        SELECT
            subquery1.externalId                AS externalId,
            subquery1.impUnit                   AS impUnit,
            subquery1.idCard                    AS idCard,
            IFNULL(subquery1.usNum, 0) - IFNULL(subquery3.usNum, 0) AS storeNum,
            IFNULL(subquery3.usNum, 0)          AS usNum,
            IFNULL(subquery1.usNum, 0)          AS allNum,
            CASE mt.manage_type WHEN 0 THEN '编码' ELSE '数量' END AS manageType,
            subquery1.proId                     AS proId,
            subquery1.proName                   AS proName,
            subquery1.proCenter                 AS proCenter
        FROM ma_type mt
                 LEFT JOIN (
            SELECT
                mt.type_id,
                SUM(IFNULL(sai.num, 0)) AS usNum,
                bp.pro_name AS proName,
                bp.pro_id AS proId,
                bp.external_id AS externalId,
                bp.imp_unit AS impUnit,
                bu.bzz_idcard AS idCard,
                bp.pro_center AS proCenter
            FROM slt_agreement_info sai
                     LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
                     LEFT JOIN bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
                     LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
                     LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id AND bu.del_flag = '0'
            WHERE
                sai.`status` = '0'
              AND sai.is_slt = '0'
              AND sai.end_time IS NULL
              AND sai.back_id IS NULL
        <if test="proId != null">
            AND bp.pro_id = #{proId}
        </if>
        <if test="projectIdList != null and projectIdList.size() > 0">
            AND bp.external_id IN
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
            GROUP BY mt.type_id, bp.pro_id, bp.pro_name, bp.external_id, bp.imp_unit, bu.bzz_idcard, bp.pro_center
        ) AS subquery1 ON mt.type_id = subquery1.type_id
                 LEFT JOIN (
            SELECT
                mt.type_id,
                SUM(IFNULL(sai.num, 0)) AS usNum,
                bp.pro_id AS proId
            FROM clz_slt_agreement_info sai
                     LEFT JOIN ma_type mt ON mt.type_id = sai.type_id
                     LEFT JOIN clz_bm_agreement_info bai ON sai.agreement_id = bai.agreement_id
                     LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id
                     LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id AND bu.del_flag = '0'
            WHERE
                sai.`status` = '0'
              AND sai.end_time IS NULL
              AND sai.back_id IS NULL
        <if test="proId != null">
            AND bp.pro_id = #{proId}
        </if>
        <if test="projectIdList != null and projectIdList.size() > 0">
            AND bp.external_id IN
            <foreach item="item" collection="projectIdList" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
            GROUP BY mt.type_id, bp.pro_id
        ) AS subquery3
        ON mt.type_id = subquery3.type_id
        AND subquery1.proId IS NOT NULL
        AND subquery1.proId = subquery3.proId
        WHERE
            mt.`level` = 4
          AND mt.del_flag = '0'
          AND subquery1.usNum > 0
        <if test="impUnit != null and impUnit != ''">
            AND subquery1.impUnit = #{impUnit}
        </if>
    </select>

</mapper>