qushaowei
2025-06-13 4b27dd367eae2f24958c6bb857fb6959dcdb7a4a
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/FaultIntervalTimeMapper.xml
@@ -9,37 +9,80 @@
            t1.name,
            t1.model,
            t1.specification,
            t2.depart_name as departName
            t2.name as departName
        FROM
            mom_eam_equipment t1
                LEFT JOIN sys_depart t2 ON t1.use_id = t2.id
        LEFT JOIN mom_base_area t2 ON t1.work_center_id = t2.id
        WHERE
            t1.del_flag = '0'
            <if test="params.useDepartName != null and params.useDepartName != ''">
                and t2.depart_name like concat('%',#{params.useDepartName},'%')
            </if>
            <if test="params.useDepartName == ''">
                and t2.depart_name = '-1'
            </if>
        <if test="params.useDepartName != null and params.useDepartName != ''">
            and t2.name =#{params.useDepartName}
        </if>
        <if test="params.useDepartName == '' ">
            and t1.work_center_id is not null
        </if>
        <if test="params.abc != null and params.abc != ''">
            and t1.equipment_importance_id =#{params.abc}
        </if>
        <if test="params.specificEquipment != null and params.specificEquipment != ''">
            and t1.specific_equipment =#{params.specificEquipment}
        </if>
        <if test="params.equipmentNum != null and params.equipmentNum != ''">
            and t1.num =#{params.equipmentNum}
        </if>
<!--        <if test="params.workCenterIds != null">-->
<!--            and t1.work_center_id in-->
<!--            <foreach collection="params.workCenterIds" open="(" separator="," close=")" item="workCenterId">-->
<!--                #{workCenterId}-->
<!--            </foreach>-->
<!--        </if>-->
        ORDER BY t2.name DESC
    </select>
    <select id="getWorkCenterList"  parameterType="Map" resultType="Map">
        SELECT COUNT
            ( t1.work_center_id ),
            t1.work_center_id as workCenterId,
            t2.name as workCenterName
        FROM
            mom_eam_equipment t1
        LEFT JOIN mom_base_area t2 ON t1.work_center_id = t2.id
        WHERE t2.type = '1' and t1.work_center_id IS NOT NULL
        <if test="params.useDepartName != null and params.useDepartName != ''">
            and t2.name =#{params.useDepartName}
        </if>
        GROUP BY t1.work_center_id,t2.name
    </select>
<!--    <if test="params.abc != null and params.abc != ''">-->
<!--        and t1.equipment_importance_id =#{params.abc}-->
<!--    </if>-->
<!--    <if test="params.specificEquipment != null and params.specificEquipment != ''">-->
<!--        and t1.specific_equipment =#{params.specificEquipment}-->
<!--    </if>-->
    <!--            <if test="params.useDepartName == ''">-->
    <!--                and t2.depart_name = '-1'-->
    <!--            </if>-->
    <select id="getEquipmentMTBF"  parameterType="Map" resultType="Map">
        SELECT
            tt.equipmentId,
            COUNT(tt.equipmentId) AS faultNumber,
            tt.totalAvailableTime,
            SUM(tt.faultTime) AS faultTime,
            SUM(tt.repairTime) AS repairTime,
            SUM(tt.noFaultTime) AS noFaultTime,
            SUM(tt.repairTime) /COUNT(tt.equipmentId) AS averageRepairTime,
            SUM(tt.noFaultTime) /COUNT(tt.equipmentId) AS averageFaultIntervalTime
            STR(SUM(tt.faultTime), 10, 2) AS faultTime,
            STR(SUM(tt.repairTime), 10, 2) AS repairTime,
            STR(tt.totalAvailableTime - SUM(tt.faultTime), 10, 2) AS noFaultTime,
            STR(case when COUNT(tt.equipmentId) = 0 THEN '0' WHEN  COUNT(tt.equipmentId) > 0 THEN (tt.totalAvailableTime - SUM(tt.faultTime))/COUNT(tt.equipmentId) end, 10, 2) as mtbf,
            STR(case when COUNT(tt.equipmentId) = 0 THEN '0' WHEN  COUNT(tt.equipmentId) > 0 THEN SUM(tt.repairTime)/COUNT(tt.equipmentId) end, 10, 2) as mttr,
            STR((tt.totalAvailableTime - SUM(tt.faultTime))/tt.totalAvailableTime*100, 10, 2) as serviceabilityRate,
            STR(SUM(tt.faultTime)/tt.totalAvailableTime*100, 10, 2) as startRate
        FROM(
                SELECT
                    t1.equipment_id AS equipmentId,
                    datediff( HOUR, #{params.startTime}, #{params.endTime} ) + 24 AS totalAvailableTime,
                    datediff( HOUR, isnull( t1.fault_time, GETDATE( ) ), isnull( t1.accept_time, GETDATE( ) ) ) AS faultTime,
                    datediff( HOUR, isnull( t2.actual_start_time, GETDATE( ) ), isnull( t2.actual_end_time, GETDATE( ) ) ) AS repairTime,
                    (datediff( HOUR, #{params.startTime}, #{params.endTime}) + 24) - datediff( HOUR, isnull( t1.fault_time, GETDATE( ) ), isnull( t1.accept_time, GETDATE( ) ) ) AS noFaultTime
                    CAST( DATEDIFF_BIG ( MILLISECOND, isnull( t1.fault_time, GETDATE( ) ), isnull( t2.actual_end_time, (SELECT #{params.endTime}+' '+FORMAT(GETDATE(), 'HH:mm:ss') ) ) ) AS FLOAT ) / 3600000 AS faultTime,
                    case when t2.create_time is null THEN '0' WHEN t2.create_time is not null THEN CAST( DATEDIFF_BIG ( MILLISECOND, t2.create_time, isnull( t2.actual_end_time, (SELECT #{params.endTime}+' '+FORMAT(GETDATE(), 'HH:mm:ss') ) ) ) AS FLOAT ) / 3600000  end AS repairTime
                FROM
                    mom_eam_equipment_report_repair t1
                LEFT JOIN mom_eam_repair_order t2 ON t2.report_repair_id = t1.id
@@ -51,8 +94,60 @@
        GROUP BY
            tt.equipmentId,tt.totalAvailableTime
    </select>
<!--    datediff( HOUR, isnull( t1.fault_time, GETDATE( ) ), isnull( t2.actual_end_time, GETDATE( ) ) ) AS faultTime,-->
<!--    SUM(tt.repairTime) /COUNT(tt.equipmentId) AS averageRepairTime,-->
<!--    SUM(tt.noFaultTime) /(COUNT(tt.equipmentId) + 1) AS averageFaultIntervalTime,-->
<!--    (sum(tt.totalDay) - sum(tt.repairDay))/sum(tt.totalDay) as serviceabilityRate,-->
<!--    (tt.totalAvailableTime - SUM(tt.repairTime))/tt.totalAvailableTime as startRate-->
    <select id="getMTBFTotalAvailableTime"  parameterType="Map" resultType="Map">
        select  datediff( HOUR, #{params.startTime}, #{params.endTime} ) + 24 AS totalAvailableTime
    </select>
    <select id="getCenterEquipmentMTBF"  parameterType="Map" resultType="Map">
        SELECT
            COUNT(tt.equipmentNum) AS equipmentNumer,
            sum(tt.equipmentNum) as faultNumber,
            tt.totalAvailableTime * COUNT(tt.equipmentNum) as totalAvailableTime,
            SUM(tt.faultTime) AS faultTime,
            SUM(tt.repairTime) AS repairTime,
            tt.totalAvailableTime * COUNT(tt.equipmentNum) - SUM(tt.faultTime) AS noFaultTime,
            tt.totalDay,
            tt.repairDay
        FROM(
                select COUNT(ss.equipmentNum) as equipmentNum,ss.totalAvailableTime,ss.faultTime,ss.repairTime,ss.noFaultTime,ss.totalDay,ss.repairDay from (
                    SELECT
                        t3.num as equipmentNum,
                        datediff( HOUR, #{params.startTime}, #{params.endTime} ) + 24 AS totalAvailableTime,
                        datediff( HOUR, isnull( t1.fault_time, GETDATE( ) ), isnull( t1.accept_time, GETDATE( ) ) ) AS faultTime,
                        datediff( HOUR, isnull( t2.actual_start_time, GETDATE( ) ), isnull( t2.actual_end_time, GETDATE( ) ) ) AS repairTime,
                        (datediff( HOUR, #{params.startTime}, #{params.endTime}) + 24) - datediff( HOUR, isnull( t1.fault_time, GETDATE( ) ), isnull( t1.accept_time, GETDATE( ) ) ) AS noFaultTime,
                        datediff( DAY, #{params.startTime}, #{params.endTime} )+1 AS totalDay,
                        datediff( DAY, isnull( t1.fault_time, GETDATE( ) ), isnull( t2.actual_end_time, GETDATE( ) ) ) AS repairDay
                    FROM
                        mom_eam_equipment_report_repair t1
                    LEFT JOIN mom_eam_repair_order t2 ON t2.report_repair_id = t1.id
                    left join mom_eam_equipment t3 on t1.equipment_id = t3.id
                    WHERE 1=1
                      AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t1.fault_time, 120 ), 1, 10 ) &gt;= #{params.startTime}
                      AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t1.fault_time, 120 ), 1, 10 ) &lt;= #{params.endTime}
                      AND t3.work_center_id  = #{params.workCenterId}
                      <if test="params.abc != null and params.abc != ''">
                         and t3.equipment_importance_id =#{params.abc}
                      </if>
                      <if test="params.specificEquipment != null and params.specificEquipment != ''">
                         and t3.specific_equipment =#{params.specificEquipment}
                      </if>
                ) ss group by ss.totalAvailableTime,ss.faultTime,ss.repairTime,ss.noFaultTime,ss.totalDay,ss.repairDay
            ) AS tt
        GROUP BY
            tt.equipmentNum,tt.totalAvailableTime,tt.totalDay,tt.repairDay
    </select>
<!--    SUM(tt.repairTime) /sum(tt.equipmentNum) AS averageRepairTime,-->
<!--    (tt.totalAvailableTime * COUNT(tt.equipmentNum) - SUM(tt.faultTime))/sum(tt.equipmentNum) AS averageFaultIntervalTime,-->
<!--    (tt.totalDay * COUNT(tt.equipmentNum) -tt.repairDay)/ (tt.totalDay * COUNT(tt.equipmentNum)) as serviceabilityRate,-->
<!--    (tt.totalAvailableTime * COUNT(tt.equipmentNum) - SUM(tt.repairTime))/(tt.totalAvailableTime * COUNT(tt.equipmentNum)) as startRate-->
    <select id="getCenterMTBFTotalAvailableTime"  parameterType="Map" resultType="Map">
        select  datediff( HOUR, #{params.startTime}, #{params.endTime} ) + 24 AS totalAvailableTime
    </select>
</mapper>