Newer
Older
casic-metering-eqpt-xichang / casic-metering-dao / src / main / resources / mapper / plan / PlanEquipmentRelationMapper.xml
zhangyingjie on 19 Jan 2024 6 KB 20240119 修改联调问题
<?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.casic.missiles.mapper.plan.PlanEquipmentRelationMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.casic.missiles.model.plan.PlanEquipmentRelation">
        <id column="id" property="id" />
        <result column="plan_id" property="planId" />
        <result column="equipment_id" property="equipmentId" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, plan_id, equipment_id, create_time, update_time
    </sql>

    <select id="getPlanEquipmentAggr" resultType="com.casic.missiles.dto.plan.PlanEquipmentAggr">
        SELECT
            e.equipment_name,
            count( e.id ) as `count`,
            sum( case when check_completion = '1' or check_completion is null then 1 else 0 end ) AS uncheck,
            sum( case when check_completion = '2' then 1 else 0 end ) AS incheck,
            sum( case when check_completion = '3' then 1 else 0 end) AS checked
        FROM
            `eqpt_plan_equipment_relation` r
        LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id
        where r.plan_id = #{planId}
        GROUP BY e.equipment_name
    </select>

    <sql id="commonSelect">
        r1.id AS id,
        r1.plan_id AS planId,
        e.id AS equipmentId,
        e.equipment_no AS equipmentNo,
        e.equipment_name AS equipmentName,
        e.model AS model,
        e.company_id AS companyId,
        e.use_position AS usePosition,
        e.check_organization AS checkOrganization,
        e.certificate_valid AS certificateValid,
        e.director_name AS director_name,
        e.dept_id AS deptId,
        e.usage_status AS usageStatus,
        e.manufacture_no AS manufactureNo,
        e.manufacturer as manufacturer,
        e.meter_identify as meterIdentify,
        r1.plan_deliver_time AS planDeliverTime,
        r1.real_deliver_time AS realDeliverTime,
        r1.plan_measure_company AS planMeasureCompany,
        r1.real_measure_company AS realMeasureCompany,
        r1.check_completion AS checkCompletion,
        r1.check_finish_time AS checkFinishTime,
        r1.create_time AS createTime,
        r1.update_time AS updateTime
    </sql>

    <select id="listByPlanAndName" resultType="com.casic.missiles.model.plan.PlanEquipmentRelation">
        SELECT
            <include refid="commonSelect"/>
        FROM
            eqpt_equipment_info_view e,
            eqpt_plan_equipment_relation r1
        WHERE
            e.id = r1.equipment_id
        <if test="planId != null and planId !=''">
            AND r1.plan_id = #{planId}
        </if>
        <if test="equipmentName != null and equipmentName != ''">
            AND e.equipment_name = #{equipmentName}
        </if>
    </select>

    <select id="listByPlansAndName" resultType="com.casic.missiles.model.plan.PlanEquipmentRelation">
        SELECT
            <include refid="commonSelect"/>
        FROM
            eqpt_equipment_info_view e,
            eqpt_plan_equipment_relation r1
        WHERE
            e.id = r1.equipment_id
        <if test="planIds != null">
            AND r1.plan_id in
            <foreach collection="planIds" item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="equipmentName != null and equipmentName != ''">
            AND e.equipment_name = #{equipmentName}
        </if>
    </select>

    <select id="getPlanEquipmentStatus" resultType="com.casic.missiles.dto.plan.PlanEquipmentStatus">
        WITH R1 AS (
            SELECT
                i.measure_company AS measureCompany,
                r.real_deliver_time AS realDeliverTime,
                r.sample_status AS sampleStatus,
                r.measure_complete_time AS measureCompleteTime,
                i.update_time AS updateTime
            FROM `biz_business_order_info` i
                     INNER JOIN biz_business_order_sample_relation r ON r.order_id = i.id
            WHERE
            YEAR ( i.update_time ) = YEAR (NOW())
            AND YEAR ( r.update_time ) = YEAR (NOW())
            AND r.sample_id = #{equipmentId}
            ),
            R2 AS (
        SELECT
            ( SELECT company_name FROM eqpt_subcontractor WHERE id = i.subcontractor_id ) AS measureCompany,
            i.update_time AS realDeliverTime,
            '6' AS sampleStatus,
            i.update_time AS measureCompleteTime,
            i.update_time AS updateTime
        FROM
            `eqpt_subcontract_order` i
            INNER JOIN eqpt_subcontract_order_relation r ON r.order_id = i.id
        WHERE
            i.approval_status = '4'
          AND YEAR ( i.update_time ) = YEAR (NOW())
          AND YEAR ( r.update_time ) = YEAR (NOW())
          AND r.equipment_id = #{equipmentId}
            ),
            R AS ( SELECT * FROM R1 UNION ALL SELECT * FROM R2 )

        SELECT
            measureCompany,
            realDeliverTime,
            sampleStatus,
            measureCompleteTime
        FROM R
        ORDER BY updateTime DESC
            LIMIT 1
    </select>

    <select id="planFinishStatistics" resultType="com.casic.missiles.dto.board.PlanFinishDTO">
        select
            e.dept_id as deptId,
            sum(if(r.check_completion = #{checkedStatus},1,0)) as finished,
            count(r.id) as total
        from eqpt_plan_equipment_relation r
        left join eqpt_equipment_info e on r.equipment_id = e.id
        where e.is_del = '0'
        AND YEAR ( r.update_time ) = YEAR (NOW())
        group by e.dept_id
        <if test="deptIds != null">
            having e.dept_id in
            <foreach collection="deptIds" item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
    </select>

    <update id="inspectionStatusUpdate">
        update
            eqpt_plan_equipment_relation r1,
            eqpt_plan p,
            eqpt_inspection_equipment_relation r2
        set r1.execute_status = #{executeStatus},
            r1.execute_time = r2.inspection_time
        where r1.plan_id = p.id
          and p.year = YEAR(NOW())
          and r1.execute_status = '0'
          and r1.equipment_id = r2.equipment_id
          and r2.inspection_id = #{inspectionId}
    </update>

</mapper>