<?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.lease.mapper.LeaseApplyInfoMapper">
    <resultMap type="com.bonus.common.biz.domain.lease.LeaseApplyInfo" id="LeaseApplyInfoResult">
        <result property="id"    column="id"    />
        <result property="code"    column="code"    />
        <result property="taskId"    column="task_id"    />
        <result property="leasePerson"    column="lease_person"    />
        <result property="phone"    column="phone"    />
        <result property="type"    column="type"    />
        <result property="companyAuditBy"    column="company_audit_by"    />
        <result property="companyAuditTime"    column="company_audit_time"    />
        <result property="companyAuditRemark"    column="company_audit_remark"    />
        <result property="deptAuditBy"    column="dept_audit_by"    />
        <result property="deptAuditTime"    column="dept_audit_time"    />
        <result property="deptAuditRemark"    column="dept_audit_remark"    />
        <result property="directAuditBy"    column="direct_audit_by"    />
        <result property="directAuditTime"    column="direct_audit_time"    />
        <result property="directAuditRemark"    column="direct_audit_remark"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="remark"    column="remark"    />
        <result property="companyId"    column="company_id"    />
        <result property="directId"    column="direct_id"    />
        <result property="leaseType"    column="lease_type"    />
        <result property="estimateLeaseTime"    column="estimate_lease_time"    />
        <result property="costBearingParty"    column="cost_bearing_party"    />
        <result property="leaseProject" column="pro_name" />
        <result property="leaseProjectId" column="project_id" />
        <result property="leaseUnit" column="unit_name" />
        <result property="leaseUnitId" column="unit_id" />
        <result property="agreementCode" column="agreement_code" />
    </resultMap>

    <sql id="selectLeaseApplyInfoVo">
        select
            lai.id, lai.code, lai.task_id, lai.lease_person, lai.phone, lai.type, lai.company_audit_by,
            lai.company_audit_time, lai.company_audit_remark, lai.dept_audit_by, lai.dept_audit_time,
            lai.dept_audit_remark, lai.direct_audit_by, lai.direct_audit_time, lai.direct_audit_remark,
            lai.create_by, lai.create_time, lai.update_by, lai.update_time, lai.remark, lai.company_id,
            lai.direct_id, lai.lease_type, lai.estimate_lease_time, lai.cost_bearing_party,
            bai.unit_id,bai.project_id,bu.unit_name, bp.pro_name, bai.agreement_code, tt.task_status as taskStatus,
            IFNULL(sum(lad.pre_num),0) as preCountNum,
            IFNULL(sum(lad.al_num),0) as alNum
        from
            lease_apply_info lai
        left join tm_task tt on lai.task_id = tt.task_id
        left join lease_apply_details lad on lai.id = lad.parent_id
        left join tm_task_agreement tta on lai.task_id = tta.task_id
        left join bm_agreement_info bai on tta.agreement_id = bai.agreement_id
        left join bm_unit bu on bu.unit_id = bai.unit_id
        left join bm_project bp on bp.pro_id = bai.project_id
    </sql>

    <select id="selectLeaseApplyInfoList" parameterType="com.bonus.common.biz.domain.lease.LeaseApplyInfo" resultMap="LeaseApplyInfoResult">
        <include refid="selectLeaseApplyInfoVo"/>
        <where>  
            <if test="code != null  and code != ''"> and lai.code = #{code}</if>
            <if test="taskId != null "> and lai.task_id = #{taskId}</if>
            <if test="leasePerson != null  and leasePerson != ''"> and lai.lease_person = #{leasePerson}</if>
            <if test="phone != null  and phone != ''"> and lai.phone = #{phone}</if>
            <if test="type != null  and type != ''"> and lai.type = #{type}</if>
            <if test="companyAuditBy != null "> and lai.company_audit_by = #{companyAuditBy}</if>
            <if test="companyAuditTime != null "> and lai.company_audit_time = #{companyAuditTime}</if>
            <if test="companyAuditRemark != null  and companyAuditRemark != ''"> and lai.company_audit_remark = #{companyAuditRemark}</if>
            <if test="deptAuditBy != null "> and lai.dept_audit_by = #{deptAuditBy}</if>
            <if test="deptAuditTime != null "> and lai.dept_audit_time = #{deptAuditTime}</if>
            <if test="deptAuditRemark != null  and deptAuditRemark != ''"> and lai.dept_audit_remark = #{deptAuditRemark}</if>
            <if test="directAuditBy != null "> and lai.direct_audit_by = #{directAuditBy}</if>
            <if test="directAuditTime != null "> and lai.direct_audit_time = #{directAuditTime}</if>
            <if test="directAuditRemark != null  and directAuditRemark != ''"> and lai.direct_audit_remark = #{directAuditRemark}</if>
            <if test="companyId != null "> and lai.company_id = #{companyId}</if>
            <if test="statusList != null  and statusList.size() > 0">
                and tt.task_status in
                <foreach item="item" collection="statusList" open="(" separator="," close=")">
                    #{item}
                </foreach>
             </if>
            <if test="keyWord != null  and keyWord != ''">
                and (bu.unit_name like concat('%', #{keyWord}, '%') or
                bp.pro_name like concat('%', #{keyWord}, '%') or
                lai.code like concat('%', #{keyWord}, '%') or
                lai.create_by like concat('%', #{keyWord}, '%') or
                lai.lease_person like concat('%', #{keyWord}, '%') or
                lai.phone like concat('%', #{keyWord}, '%'))
            </if>
            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
                <![CDATA[ AND DATE_FORMAT( lai.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime} ]]>
            </if>
            <if test="directId != null "> and lai.direct_id = #{directId}</if>
            <if test="leaseType != null  and leaseType != ''"> and lai.lease_type = #{leaseType}</if>
            <if test="estimateLeaseTime != null "> and lai.estimate_lease_time = #{estimateLeaseTime}</if>
            <if test="costBearingParty != null  and costBearingParty != ''"> and lai.cost_bearing_party = #{costBearingParty}</if>
        </where>
        GROUP BY lai.id
        ORDER BY tt.task_status,tt.create_time desc
    </select>
    
    <select id="selectLeaseApplyInfoById" parameterType="Long" resultMap="LeaseApplyInfoResult">
        <include refid="selectLeaseApplyInfoVo"/>
        where lai.id = #{id}
    </select>
        
    <insert id="insertLeaseApplyInfo" parameterType="com.bonus.common.biz.domain.lease.LeaseApplyInfo" useGeneratedKeys="true" keyProperty="id">
        insert into lease_apply_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="code != null">code,</if>
            <if test="taskId != null">task_id,</if>
            <if test="leasePerson != null">lease_person,</if>
            <if test="phone != null">phone,</if>
            <if test="type != null">type,</if>
            <if test="companyAuditBy != null">company_audit_by,</if>
            <if test="companyAuditTime != null">company_audit_time,</if>
            <if test="companyAuditRemark != null">company_audit_remark,</if>
            <if test="deptAuditBy != null">dept_audit_by,</if>
            <if test="deptAuditTime != null">dept_audit_time,</if>
            <if test="deptAuditRemark != null">dept_audit_remark,</if>
            <if test="directAuditBy != null">direct_audit_by,</if>
            <if test="directAuditTime != null">direct_audit_time,</if>
            <if test="directAuditRemark != null">direct_audit_remark,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remark != null">remark,</if>
            <if test="companyId != null">company_id,</if>
            <if test="directId != null">direct_id,</if>
            <if test="leaseType != null">lease_type,</if>
            <if test="estimateLeaseTime != null">estimate_lease_time,</if>
            <if test="costBearingParty != null">cost_bearing_party,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="code != null">#{code},</if>
            <if test="taskId != null">#{taskId},</if>
            <if test="leasePerson != null">#{leasePerson},</if>
            <if test="phone != null">#{phone},</if>
            <if test="type != null">#{type},</if>
            <if test="companyAuditBy != null">#{companyAuditBy},</if>
            <if test="companyAuditTime != null">#{companyAuditTime},</if>
            <if test="companyAuditRemark != null">#{companyAuditRemark},</if>
            <if test="deptAuditBy != null">#{deptAuditBy},</if>
            <if test="deptAuditTime != null">#{deptAuditTime},</if>
            <if test="deptAuditRemark != null">#{deptAuditRemark},</if>
            <if test="directAuditBy != null">#{directAuditBy},</if>
            <if test="directAuditTime != null">#{directAuditTime},</if>
            <if test="directAuditRemark != null">#{directAuditRemark},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remark != null">#{remark},</if>
            <if test="companyId != null">#{companyId},</if>
            <if test="directId != null">#{directId},</if>
            <if test="leaseType != null">#{leaseType},</if>
            <if test="estimateLeaseTime != null">#{estimateLeaseTime},</if>
            <if test="costBearingParty != null">#{costBearingParty},</if>
         </trim>
    </insert>

    <update id="updateLeaseApplyInfo" parameterType="com.bonus.common.biz.domain.lease.LeaseApplyInfo">
        update lease_apply_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="code != null">code = #{code},</if>
            <if test="taskId != null">task_id = #{taskId},</if>
            <if test="leasePerson != null">lease_person = #{leasePerson},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="type != null">`type` = #{type},</if>
            <if test="companyAuditBy != null">company_audit_by = #{companyAuditBy},</if>
            <if test="companyAuditTime != null">company_audit_time = #{companyAuditTime},</if>
            <if test="companyAuditRemark != null">company_audit_remark = #{companyAuditRemark},</if>
            <if test="deptAuditBy != null">dept_audit_by = #{deptAuditBy},</if>
            <if test="deptAuditTime != null">dept_audit_time = #{deptAuditTime},</if>
            <if test="deptAuditRemark != null">dept_audit_remark = #{deptAuditRemark},</if>
            <if test="directAuditBy != null">direct_audit_by = #{directAuditBy},</if>
            <if test="directAuditTime != null">direct_audit_time = #{directAuditTime},</if>
            <if test="directAuditRemark != null">direct_audit_remark = #{directAuditRemark},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            update_time = now(),
            <if test="remark != null">remark = #{remark},</if>
            <if test="companyId != null">company_id = #{companyId},</if>
            <if test="directId != null">direct_id = #{directId},</if>
            <if test="leaseType != null">lease_type = #{leaseType},</if>
            <if test="estimateLeaseTime != null">estimate_lease_time = #{estimateLeaseTime},</if>
            <if test="costBearingParty != null">cost_bearing_party = #{costBearingParty},</if>
        </trim>
        where id = #{id}
    </update>

    <delete id="deleteLeaseApplyInfoById" parameterType="Long">
        delete from lease_apply_info where id = #{id}
    </delete>

    <delete id="deleteLeaseApplyInfoByIds" parameterType="String">
        delete from lease_apply_info where id in 
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

    <select id="getTaskId" resultType="java.lang.String">
        select task_id
        from lease_apply_info
        where id = #{parentId}
    </select>
</mapper>