<?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.sckw.contract.dao.KwcContractTradeMapper">

    <select id="queryList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
        select a.amount,
               a.trading,
               a.name contractName,
               a.contract_no,
               c.create_by initiateBy,
               c.create_time initiateTime,
               a.create_time,
               a.start_time,
               a.end_time,
               a.id,
               a.remark,
               a.signing_way,
               d.create_time signTime,
               a.status,
               b.unit_type,
               b.ent_id,
               b.firm_name entName,
               e.ent_id targetEntId,
               e.firm_name targetEntName,
               a.contract_pid contractPid,
               a.performed_amount performedAmount,
               f.name contractPname,
               f.unload_way   unloadWay
          from kwc_contract_trade a
          left join kwc_contract_trade_unit b
            on a.id = b.contract_id
           and b.unit_type = #{entType}
           and case when a.status != 3 then b.ent_id in
                <foreach collection="allEnt" separator="," open="(" close=")" item="item">
                    #{item}
                </foreach>
               else 1=1
                end
           and b.del_flag = 0
          left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
          left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
          left join kwc_contract_trade_unit e on a.id = e.contract_id and e.unit_type != #{entType} and e.del_flag = 0
          left join kwc_contract_trade f on f.id = a.contract_pid
         where a.del_flag = 0
           and case when a.status = 3 then a.ent_id = #{entId} and #{entType} = 1
                else (b.ent_id in
                        <foreach collection="allEnt" separator="," open="(" close=")" item="item">
                            #{item}
                        </foreach>
                        and b.id is not null)
                end
        <if test="startTime != null">
            and a.create_time >= #{startTime}
        </if>
        <if test="endTime != null">
            and a.create_time &lt;= #{endTime}
        </if>
        <if test="status != null">
            and a.status = #{status}
        </if>
        <if test="keywords != null and keywords != ''">
            and (b.firm_name like concat('%', #{keywords}, '%') or
                 e.firm_name like concat('%', #{keywords}, '%') or
                 b.phone like concat('%', #{keywords}, '%') or
                 b.sign_phone like concat('%', #{keywords}, '%') or
                 a.contract_no like concat('%', #{keywords}, '%') or
                 a.name like concat('%', #{keywords}, '%')
                 <if test="initiateList != null and initiateList.size() > 0">
                     or a.create_by in
                     <foreach collection="initiateList" item="item" open="(" close=")" separator=",">
                         #{item}
                     </foreach>
                 </if> )
        </if>
        <if test="idList != null and idList.size() > 0">
            and a.id in
            <foreach collection="idList" open="(" close=")" separator="," item="item">
                #{item}
            </foreach>
        </if>
        <if test="trading != null">
            and a.trading = #{trading}
        </if>
        <if test="signingWay != null">
            and a.signing_way = #{signingWay}
        </if>
        <if test="targetEntId != null">
            and e.ent_id = #{targetEntId}
        </if>
        <if test="contractCode != null  and '' != contractCode">
            and f.contract_no like concat('%',#{contractCode},'%')
        </if>
        <if test="contractName != null  and '' != contractName">
            and f.name  like concat('%',#{contractName},'%')
        </if>
        <if test="supplementCode != null  and '' != supplementCode">
            and f.contract_pid != null
            and f.contract_no  like concat('%',#{supplementCode},'%')
        </if>
        <if test="purchaseEntId != null  and '' != purchaseEntId">
            and e.unit_type = 2
            and e.id  = #{purchaseEntId}
        </if>
        <if test="supplyEntId != null  and '' != supplyEntId">
            and e.unit_type = 1
            and e.id = #{supplyEntId}
        </if>
        order by a.create_time desc
    </select>

    <select id="queryContractValidCount" resultType="com.sckw.contract.model.dto.res.QueryContractValidCountResDto">
        SELECT b.unit_type,
               count(1) cnt
          FROM kwc_contract_trade a
          left join kwc_contract_trade_unit b on a.id = b.contract_id
         where a.`status` != 3
           <if test="list != null and list.size() > 0">
               and b.ent_id in
               <foreach collection="list" separator="," open="(" close=")" item="item">
                   #{item}
               </foreach>
           </if>
         GROUP BY b.unit_type
         union all
        SELECT b.unit_type,
               count(1)
          FROM kwc_contract_logistics a
          left join kwc_contract_logistics_unit b on a.id = b.contract_id
         where a.`status` != 3
        <if test="list != null and list.size() > 0">
            and b.ent_id in
            <foreach collection="list" separator="," open="(" close=")" item="item">
                #{item}
            </foreach>
        </if>
         GROUP BY b.unit_type
    </select>

    <select id="queryTradeList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
         select a.amount,
                a.trading,
                a.name contractName,
                a.contract_no,
                c.create_by initiateBy,
                c.create_time initiateTime,
                a.create_time,
                a.start_time,
                a.end_time,
                a.id,
                a.remark,
                a.signing_way,
                d.create_time signTime,
                a.status,
                b.ent_id provideEntId,
                b.firm_name provideEntName,
                e.ent_id purchaseEntId,
                e.firm_name purchaseEntName,
                a.contract_pid contractPid,
                a.performed_amount performedAmount,
                f.name contractPname
        from kwc_contract_trade a
        left join kwc_contract_trade_unit b on a.id = b.contract_id and b.del_flag = 0 and b.unit_type = 1
        left join kwc_contract_trade_unit e on a.id = e.contract_id and e.del_flag = 0 and e.unit_type = 2
        left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
        left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
        left join kwc_contract_trade f on a.contract_pid = f.id
        where a.del_flag = 0
          and a.status != 3
        <if test="authEntIdList != null and authEntIdList.size() != 0">
            and a.ent_id in
            <foreach collection="authEntIdList" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="reqVo.startTime != null">
            and a.create_time >= #{reqVo.startTime}
        </if>
        <if test="reqVo.endTime != null">
            and a.create_time &lt;= #{reqVo.endTime}
        </if>
        <if test="reqVo.status != null">
            and a.status = #{reqVo.status}
        </if>
        <if test="reqVo.keywords != null and reqVo.keywords != ''">
            and (b.firm_name like concat('%', #{reqVo.keywords}, '%') or
                 e.firm_name like concat('%', #{reqVo.keywords}, '%') or
                 b.contacts like concat('%', #{reqVo.keywords}, '%') or
                 e.contacts like concat('%', #{reqVo.keywords}, '%') or
                 a.contract_no like concat('%', #{reqVo.keywords}, '%') or
                 a.name like concat('%', #{reqVo.keywords}, '%'))
        </if>
        <if test="reqVo.idList != null and reqVo.idList.size() > 0">
            and a.id in
            <foreach collection="reqVo.idList" open="(" close=")" separator="," item="item">
                #{item}
            </foreach>
        </if>
        <if test="reqVo.trading != null">
            and a.trading = #{reqVo.trading}
        </if>
        <if test="reqVo.signingWay != null">
            and a.signing_way = #{reqVo.signingWay}
        </if>
        order by a.create_time desc
    </select>

</mapper>
