UserTaskEfficiencyMapper.xml 3.67 KB
<?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.zteits.urbanops.module.garden.dal.mysql.UserTaskEfficiencyMapper">

    <select id="selectByUserIdAndPeriod" resultType="com.zteits.urbanops.module.garden.dal.dataobject.UserTaskEfficiencyDO">
        SELECT * FROM garden_user_task_efficiency
        WHERE user_id = #{userId}
          AND stat_period = #{statPeriod}
          AND deleted = 0
    </select>

    <select id="selectLatestPeriod" resultType="java.lang.String">
        SELECT stat_period FROM garden_user_task_efficiency
        WHERE user_id = #{userId}
          AND deleted = 0
        ORDER BY stat_period DESC
        LIMIT 1
    </select>

    <delete id="deleteByPeriod">
        DELETE FROM garden_user_task_efficiency
        WHERE stat_period = #{statPeriod}
    </delete>

    <!-- 巡查计划效率统计 -->
    <select id="statInspectionEfficiency" resultType="java.util.Map">
        SELECT c.user_id, u.dept_id, 'inspection' AS task_category,
               p.plan_type_id AS task_type, COUNT(*) AS cnt,
               SUM(TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time)) AS total_min,
               AVG(TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time)) AS avg_min
        FROM garden_inspection_plan_commit c
        INNER JOIN garden_inspection_plan_detail d ON c.batch_no = d.batch_no AND c.user_id = d.user_id
        INNER JOIN garden_inspection_plan p ON c.batch_no = p.batch_no
        INNER JOIN system_users u ON c.user_id = u.id
        WHERE c.finish_time >= #{beginTime}
          AND c.finish_time IS NOT NULL
          AND d.begin_time IS NOT NULL
          AND TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time) BETWEEN 1 AND 1440
        GROUP BY c.user_id, u.dept_id, p.plan_type_id
    </select>

    <!-- 养护计划效率统计 -->
    <select id="statMaintainEfficiency" resultType="java.util.Map">
        SELECT c.user_id, u.dept_id, 'maintain' AS task_category,
               p.plan_type_id AS task_type, COUNT(*) AS cnt,
               SUM(TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time)) AS total_min,
               AVG(TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time)) AS avg_min
        FROM garden_maintain_plan_commit c
        INNER JOIN garden_maintain_plan_detail d ON c.batch_no = d.batch_no AND c.user_id = d.user_id
        INNER JOIN garden_maintain_plan p ON c.batch_no = p.batch_no
        INNER JOIN system_users u ON c.user_id = u.id
        WHERE c.finish_time >= #{beginTime}
          AND c.finish_time IS NOT NULL
          AND d.begin_time IS NOT NULL
          AND TIMESTAMPDIFF(MINUTE, d.begin_time, c.finish_time) BETWEEN 1 AND 1440
        GROUP BY c.user_id, u.dept_id, p.plan_type_id
    </select>

    <!-- 工单效率统计 -->
    <select id="statWorkOrderEfficiency" resultType="java.util.Map">
        SELECT t.ASSIGNEE_ AS user_id, u.dept_id, 'workorder' AS task_category,
               m.order_type AS task_type, COUNT(*) AS cnt,
               SUM(TIMESTAMPDIFF(MINUTE, t.START_TIME_, t.END_TIME_)) AS total_min,
               AVG(TIMESTAMPDIFF(MINUTE, t.START_TIME_, t.END_TIME_)) AS avg_min
        FROM act_hi_taskinst t
        LEFT JOIN workorder_main_info m ON t.PROC_INST_ID_ = m.process_instance_id AND m.deleted = 0
        INNER JOIN system_users u ON t.ASSIGNEE_ = u.id
        WHERE t.END_TIME_ >= #{beginTime}
          AND t.state_ = 'completed'
          AND t.START_TIME_ IS NOT NULL AND t.END_TIME_ IS NOT NULL
          AND m.order_name IS NOT NULL
          AND TIMESTAMPDIFF(MINUTE, t.START_TIME_, t.END_TIME_) BETWEEN 1 AND 1440
        GROUP BY t.ASSIGNEE_, u.dept_id, m.order_type
    </select>

</mapper>