|  |  | 
 |  |  |     where id = #{id,jdbcType=BIGINT} | 
 |  |  |   </update> | 
 |  |  |  | 
 |  |  |   <!--发布指定的灌溉计划--> | 
 |  |  |   <update id="publishIrrigatePlan"> | 
 |  |  |     UPDATE ir_irrigate_plan SET plan_state = 2 WHERE id = #{planId} | 
 |  |  |   </update> | 
 |  |  |  | 
 |  |  |   <!--根据指定的条件获取计划数量--> | 
 |  |  |   <select id="getIrrigatePlanCount" resultType="java.lang.Long"> | 
 |  |  |     SELECT COUNT(*) | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |     INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     <where> | 
 |  |  |       AND plan.deleted = 0 | 
 |  |  |       AND pro.deleted = 0 | 
 |  |  |       <if test="projectName != null and projectName != ''"> | 
 |  |  |         AND pro.project_name LIKE CONCAT('%', #{projectName}, '%') | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="planName != null and planName != ''"> | 
 |  |  |         AND plan.plan_name LIKE CONCAT('%', #{planName}, '%') | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="startupMode != null"> | 
 |  |  |         AND plan.startup_mode = #{startupMode} | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="planState != null"> | 
 |  |  |         AND plan.plan_state = #{planState} | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="executingState != null"> | 
 |  |  |         AND plan.executing_state = #{executingState} | 
 |  |  |       </if> | 
 |  |  |     </where> | 
 |  |  |   <!--根据指定的计划ID获取启动模式--> | 
 |  |  |   <select id="getStartupMode" resultType="java.lang.Byte"> | 
 |  |  |     SELECT | 
 |  |  |     startup_mode AS startupMode | 
 |  |  |     FROM ir_irrigate_plan | 
 |  |  |     WHERE id = #{planId} | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据指定的条件获取计划列表--> | 
 |  |  |   <select id="getIrrigatePlans" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigatePlan"> | 
 |  |  |     SELECT | 
 |  |  |     plan.id AS planId, | 
 |  |  |     pro.project_name AS projectName, | 
 |  |  |     plan.plan_name AS planName, | 
 |  |  |     CASE plan.startup_mode | 
 |  |  |     WHEN 1 THEN '手动启动' | 
 |  |  |     WHEN 2 THEN '自动启动' | 
 |  |  |     END AS startupMode, | 
 |  |  |     plan.plan_start_time AS startTime, | 
 |  |  |     plan.plan_stop_time AS stopTime, | 
 |  |  |     CASE plan.plan_state | 
 |  |  |     WHEN 1 THEN '草稿' | 
 |  |  |     WHEN 2 THEN '已发布' | 
 |  |  |     END AS planState, | 
 |  |  |   <!--根据指定的条件获取计划数量--> | 
 |  |  |   <!--  <select id="getIrrigatePlanCount" resultType="java.lang.Long">--> | 
 |  |  |   <!--    SELECT COUNT(*)--> | 
 |  |  |   <!--    FROM ir_irrigate_plan plan--> | 
 |  |  |   <!--    INNER JOIN ir_project pro ON pro.id = plan.project_id--> | 
 |  |  |   <!--    <where>--> | 
 |  |  |   <!--      AND plan.deleted = 0--> | 
 |  |  |   <!--      AND pro.deleted = 0--> | 
 |  |  |   <!--      <if test="projectName != null and projectName != ''">--> | 
 |  |  |   <!--        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |     CASE plan.executing_state | 
 |  |  |     WHEN 1 THEN | 
 |  |  |     '未执行' | 
 |  |  |     WHEN 2 THEN | 
 |  |  |     '执行中' | 
 |  |  |     WHEN 3 THEN | 
 |  |  |     '已暂停' | 
 |  |  |     WHEN 4 THEN | 
 |  |  |     '已终止' | 
 |  |  |     END AS executingState | 
 |  |  |   <!--      <if test="planName != null and planName != ''">--> | 
 |  |  |   <!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="startupMode != null">--> | 
 |  |  |   <!--        AND plan.startup_mode = #{startupMode}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="planState != null">--> | 
 |  |  |   <!--        AND plan.plan_state = #{planState}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="executingState != null">--> | 
 |  |  |   <!--        AND plan.executing_state = #{executingState}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |   <!--    </where>--> | 
 |  |  |   <!--  </select>--> | 
 |  |  |  | 
 |  |  |   <!--根据指定的条件获取计划列表--> | 
 |  |  |   <!--  <select id="getIrrigatePlans" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigatePlan">--> | 
 |  |  |   <!--    SELECT--> | 
 |  |  |   <!--        plan.id AS planId,--> | 
 |  |  |   <!--        pro.project_name AS projectName,--> | 
 |  |  |   <!--        plan.plan_name AS planName,--> | 
 |  |  |   <!--        CASE plan.startup_mode--> | 
 |  |  |   <!--            WHEN 1 THEN '手动启动'--> | 
 |  |  |   <!--            WHEN 2 THEN '自动启动'--> | 
 |  |  |   <!--        END AS startupMode,--> | 
 |  |  |   <!--        plan.plan_start_time AS startTime,--> | 
 |  |  |   <!--        plan.plan_stop_time AS stopTime,--> | 
 |  |  |   <!--        plan.duration AS duration,--> | 
 |  |  |   <!--        CASE plan.plan_state--> | 
 |  |  |   <!--            WHEN 1 THEN '草稿'--> | 
 |  |  |   <!--            WHEN 2 THEN '已发布'--> | 
 |  |  |   <!--        END AS planState,--> | 
 |  |  |  | 
 |  |  |   <!--        CASE plan.executing_state--> | 
 |  |  |   <!--            WHEN 1 THEN--> | 
 |  |  |   <!--            '未执行'--> | 
 |  |  |   <!--            WHEN 2 THEN--> | 
 |  |  |   <!--            '执行中'--> | 
 |  |  |   <!--            WHEN 3 THEN--> | 
 |  |  |   <!--            '已暂停'--> | 
 |  |  |   <!--            WHEN 4 THEN--> | 
 |  |  |   <!--            '已终止'--> | 
 |  |  |   <!--        END AS executingState--> | 
 |  |  |   <!--    FROM ir_irrigate_plan plan--> | 
 |  |  |   <!--    INNER JOIN ir_project pro ON pro.id = plan.project_id--> | 
 |  |  |   <!--    <where>--> | 
 |  |  |   <!--      AND plan.deleted = 0--> | 
 |  |  |   <!--      AND pro.deleted = 0--> | 
 |  |  |   <!--      <if test="projectName != null and projectName != ''">--> | 
 |  |  |   <!--        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="planName != null and planName != ''">--> | 
 |  |  |   <!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="startupMode != null">--> | 
 |  |  |   <!--        AND plan.startup_mode = #{startupMode}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="planState != null">--> | 
 |  |  |   <!--        AND plan.plan_state = #{planState}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |  | 
 |  |  |   <!--      <if test="executingState != null">--> | 
 |  |  |   <!--        AND plan.executing_state = #{executingState}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |   <!--    </where>--> | 
 |  |  |   <!--    ORDER BY plan.plan_state DESC, plan.plan_start_time--> | 
 |  |  |   <!--    <trim prefix="limit ">--> | 
 |  |  |   <!--      <if test="start != null and count != null">--> | 
 |  |  |   <!--        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}--> | 
 |  |  |   <!--      </if>--> | 
 |  |  |   <!--    </trim>--> | 
 |  |  |   <!--  </select>--> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取计划简单信息--> | 
 |  |  |   <select id="getPlanSimple" resultType="com.dy.pipIrrGlobal.voIr.VoPlanSimple"> | 
 |  |  |     SELECT | 
 |  |  |     plan.startup_mode AS startupMode, | 
 |  |  |     plan.plan_start_time AS planStartTime, | 
 |  |  |     plan.duration AS duration | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |     INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     WHERE plan.id = #{planId} | 
 |  |  |     AND plan.deleted = 0 AND plan_state = 1 | 
 |  |  |     LIMIT 1 | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID更新计划信息(起止时间、计划状态)--> | 
 |  |  |   <update id="updatePlanTimes"> | 
 |  |  |     UPDATE ir_irrigate_plan | 
 |  |  |     SET plan_start_time = #{planStartTime}, plan_stop_time = #{planStopTime}, plan_state = 2 | 
 |  |  |     WHERE id = #{planId} | 
 |  |  |   </update> | 
 |  |  |  | 
 |  |  |   <!--获取未完成的计划列表,小程序计划列表页使用--> | 
 |  |  |   <select id="getNotCompletePlans" resultType="com.dy.pipIrrGlobal.voIr.VoPlans"> | 
 |  |  |     SELECT | 
 |  |  |       pro.project_name AS projectName, | 
 |  |  |       plan.id AS planId, | 
 |  |  |       plan.plan_name AS planName, | 
 |  |  |       plan.startup_mode AS startupMode, | 
 |  |  |       plan.plan_start_time AS planStartTime, | 
 |  |  |       plan.plan_stop_time AS planStopTime, | 
 |  |  |       plan.duration, | 
 |  |  |       IF(plan.plan_state = 1, 1, | 
 |  |  |          IF(NOW() < plan.plan_start_time, 2, | 
 |  |  |             IF(NOW() >= plan.plan_start_time AND NOW() < plan.plan_stop_time, 3, 4) | 
 |  |  |            ) | 
 |  |  |         ) AS planState | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |         INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     <where> | 
 |  |  |       AND plan.deleted = 0 | 
 |  |  |       AND pro.deleted = 0 | 
 |  |  |       <if test="projectName != null and projectName != ''"> | 
 |  |  |         AND pro.project_name LIKE CONCAT('%', #{projectName}, '%') | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="planName != null and planName != ''"> | 
 |  |  |         AND plan.plan_name LIKE CONCAT('%', #{planName}, '%') | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="startupMode != null"> | 
 |  |  |         AND plan.startup_mode = #{startupMode} | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="planState != null"> | 
 |  |  |         AND plan.plan_state = #{planState} | 
 |  |  |       </if> | 
 |  |  |  | 
 |  |  |       <if test="executingState != null"> | 
 |  |  |         AND plan.executing_state = #{executingState} | 
 |  |  |       </if> | 
 |  |  |       AND (plan.plan_state = 1 OR NOW() < plan.plan_stop_time) | 
 |  |  |       AND plan.executing_state != 3 | 
 |  |  |     </where> | 
 |  |  |     ORDER BY plan.plan_state DESC, plan.plan_start_time | 
 |  |  |     ORDER BY plan.plan_state DESC | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--获取已完成的计划数量--> | 
 |  |  |   <select id="getCompletedPlansCount" resultType="java.lang.Long"> | 
 |  |  |     SELECT | 
 |  |  |         COUNT(*) AS recordCount | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |     INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     WHERE plan.deleted = 0 AND ((plan.plan_state = 2 AND NOW() >= plan.plan_stop_time) OR (plan.executing_state = 3)) | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--获取已完成的计划列表,小程序计划列表页使用--> | 
 |  |  |   <select id="getCompletedPlans" resultType="com.dy.pipIrrGlobal.voIr.VoPlans"> | 
 |  |  |     SELECT | 
 |  |  |       pro.project_name AS projectName, | 
 |  |  |       plan.id AS planId, | 
 |  |  |       plan.plan_name AS planName, | 
 |  |  |       plan.startup_mode AS startupMode, | 
 |  |  |       plan.plan_start_time AS planStartTime, | 
 |  |  |       plan.plan_stop_time AS planStopTime, | 
 |  |  |       plan.duration, | 
 |  |  |       IF(plan.executing_state = 3, 5, 4) AS planState | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |         INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |         INNER JOIN ir_plan_operate po ON po.plan_id = plan.id | 
 |  |  |     WHERE plan.deleted = 0 AND ((plan.plan_state = 2 AND NOW() >= plan.plan_stop_time) OR (plan.executing_state = 3)) AND po.operate_type = 1 | 
 |  |  |     ORDER BY po.operate_time DESC | 
 |  |  |     <trim prefix="limit "> | 
 |  |  |       <if test="start != null and count != null"> | 
 |  |  |         #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} | 
 |  |  |       </if> | 
 |  |  |     </trim> | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间--> | 
 |  |  |   <select id="getToTerminatePlan" resultType="java.util.Date"> | 
 |  |  |     SELECT | 
 |  |  |       plan_start_time AS planStartTime | 
 |  |  |     FROM ir_irrigate_plan | 
 |  |  |     <where> | 
 |  |  |       AND deleted = 0 | 
 |  |  |       AND executing_state != 3 | 
 |  |  |       AND plan_state = 2 | 
 |  |  |       AND NOW() < plan_stop_time | 
 |  |  |       <if test = "planId != null"> | 
 |  |  |         AND id = #{planId} | 
 |  |  |       </if> | 
 |  |  |     </where> | 
 |  |  |  | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取计划详情,包括计划名称,项目名,计划开始时间,计划结束时间,计划详情页使用--> | 
 |  |  |   <select id="getPlanDetails" resultType="com.dy.pipIrrGlobal.voIr.VoPlanDetails"> | 
 |  |  |     SELECT | 
 |  |  |       plan.plan_name AS planName, | 
 |  |  |       pro.project_name AS projectName, | 
 |  |  |       IF(plan.executing_state = 3, '5', | 
 |  |  |          IF(NOW() < plan.plan_start_time,'2', | 
 |  |  |             IF(NOW() < plan.plan_stop_time, '3', '4'))) AS state, | 
 |  |  |       plan.plan_start_time AS planStartTime, | 
 |  |  |       plan.plan_stop_time AS planStopTime, | 
 |  |  |       NULL AS groupDetails, | 
 |  |  |       NULL AS failureCount | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |         INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     WHERE plan.id = #{planId} | 
 |  |  |     AND plan.deleted = 0 | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取已终止计划的详情,结束时间为实际终止时间--> | 
 |  |  |   <select id="getPlanDetails_terminate" resultType="com.dy.pipIrrGlobal.voIr.VoPlanDetails"> | 
 |  |  |     SELECT | 
 |  |  |         plan.plan_name AS planName, | 
 |  |  |         pro.project_name AS projectName, | 
 |  |  | <!--        IF(#{terminateTime} < plan.plan_start_time, 6,--> | 
 |  |  | <!--          IF(#{terminateTime} < plan.plan_stop_time, 5, 4)) AS state,--> | 
 |  |  |         IF(plan.executing_state = 3, 5, | 
 |  |  |             IF(NOW() < plan_start_time, 2, | 
 |  |  |                 IF(NOW() < plan_stop_time, 3, 4) | 
 |  |  |             ) | 
 |  |  |         ) AS state, | 
 |  |  |         plan.plan_start_time AS planStartTime, | 
 |  |  |         plan.plan_stop_time AS planStopTime, | 
 |  |  |         #{terminateTime} AS realStopTime, | 
 |  |  |         NULL AS groupDetails, | 
 |  |  |         NULL AS failureCount | 
 |  |  |     FROM ir_irrigate_plan plan | 
 |  |  |       INNER JOIN ir_project pro ON pro.id = plan.project_id | 
 |  |  |     WHERE plan.id = #{planId} | 
 |  |  |     AND plan.deleted = 0 | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取计划状态,用于判断是否可以删除计划--> | 
 |  |  |   <select id="getPlanState" resultType="java.lang.Integer"> | 
 |  |  |     SELECT | 
 |  |  |       plan_state | 
 |  |  |     FROM ir_irrigate_plan | 
 |  |  |     WHERE id = #{planId} | 
 |  |  |     AND deleted = 0 | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--判断当前项目是否存在已发布、未终止、未删除、未完成的计划,发布计划前判断使用--> | 
 |  |  |   <select id="hasPlan_CurrentProject" resultType="java.lang.Integer"> | 
 |  |  |     SELECT | 
 |  |  |       COUNT(*) AS recordCount | 
 |  |  |     FROM ir_irrigate_plan | 
 |  |  |     WHERE project_id = (SELECT project_id FROM ir_irrigate_plan WHERE id = #{planId}) | 
 |  |  |       AND id != #{planId} | 
 |  |  |       AND plan_state = 2 | 
 |  |  |       AND executing_state != 3 | 
 |  |  |       AND deleted = 0 | 
 |  |  |       AND NOW() < plan_stop_time | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--判断当前计划包含的轮灌组是否与其他项目下计划包含的轮灌组有交集,且其他项目的计划状态为已发布、未终止、未删除、未完成,发布计划前判断使用--> | 
 |  |  |   <select id="hasPlan_OtherProject" resultType="java.lang.Integer"> | 
 |  |  |     SELECT EXISTS( | 
 |  |  |         SELECT sche.group_id | 
 |  |  |         FROM ir_irrigate_plan plan | 
 |  |  |             INNER JOIN ir_plan_schedule ps ON ps.plan_id = plan.id | 
 |  |  |             INNER JOIN ir_irrigate_schedule sche ON sche.id = ps.schedule_id | 
 |  |  |         WHERE plan.project_id != (SELECT project_id FROM ir_irrigate_plan WHERE id = #{planId}) | 
 |  |  |             AND plan_state = 2 | 
 |  |  |             AND executing_state != 3 | 
 |  |  |             AND deleted = 0 | 
 |  |  |             AND NOW() < plan_stop_time | 
 |  |  |  | 
 |  |  |         INTERSECT | 
 |  |  |  | 
 |  |  |         SELECT sche.group_id | 
 |  |  |         FROM ir_irrigate_schedule sche | 
 |  |  |             INNER JOIN ir_plan_schedule ps ON schedule_id = sche.id | 
 |  |  |         WHERE ps.plan_id = #{planId} | 
 |  |  | <!--        LIMIT 1--> | 
 |  |  |     ) AS has_intersection | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--判断当前计划与最近终止的计划的轮灌组是否有重叠 --> | 
 |  |  |   <select id="hasPlanOverlapWithTerminated" resultType="java.lang.Integer"> | 
 |  |  |     SELECT COUNT(1)  | 
 |  |  |     FROM ( | 
 |  |  |         SELECT sche1.group_id | 
 |  |  |         FROM ir_plan_schedule ps1 | 
 |  |  |         INNER JOIN ir_irrigate_schedule sche1 ON ps1.schedule_id = sche1.id | 
 |  |  |         WHERE ps1.plan_id = #{planId} | 
 |  |  |     ) AS current_groups | 
 |  |  |     INNER JOIN ( | 
 |  |  |         SELECT sche2.group_id | 
 |  |  |         FROM ir_plan_schedule ps2 | 
 |  |  |         INNER JOIN ir_irrigate_schedule sche2 ON ps2.schedule_id = sche2.id | 
 |  |  |         WHERE ps2.plan_id = #{terminatedPlanId} | 
 |  |  |     ) AS terminated_groups | 
 |  |  |     ON current_groups.group_id = terminated_groups.group_id | 
 |  |  |     LIMIT 1 | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <!--根据计划ID获取计划最新状态--> | 
 |  |  |   <select id="getPlanLatestState" resultType="java.lang.Integer"> | 
 |  |  |     SELECT | 
 |  |  |         IF(plan_state = 1, 1, | 
 |  |  |             IF(executing_state = 3, 5, | 
 |  |  |                 IF(NOW() < plan_start_time, 2, | 
 |  |  |                   IF(NOW() < plan_stop_time, 3, 4) | 
 |  |  |                 ) | 
 |  |  |             ) | 
 |  |  |     ) AS planState | 
 |  |  |     FROM ir_irrigate_plan | 
 |  |  |     WHERE deleted = 0 AND id = #{planId} | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  | </mapper> |