liurunyu
2025-03-28 93860049875e89890c32d22732329a6985dad898
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
14个文件已修改
2个文件已添加
721 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlans.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectDetail.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml 241 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/PipIrrIrrigateApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/dto/IrrigateProject.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/PipIrrRemoteApplication.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -12,8 +12,8 @@
/**
 * @author ZhuBaoMin
 * @date 2025-02-25 14:59
 * @LastEditTime 2025-02-25 14:59
 * @date 2025-03-27 8:54
 * @LastEditTime 2025-03-27 8:54
 * @Description
 */
@@ -67,12 +67,14 @@
    /**
     * 获取未完成的计划列表,小程序计划列表页使用
     * 计划状态:1-草稿,2-未执行,3-执行中,4-已完成
     * @return
     */
    List<VoPlans> getNotCompletePlans();
    /**
     * 获取已完成的计划列表,小程序计划列表页使用
     * 计划状态:1-草稿,2-未执行,3-执行中,4-已完成
     * @return
     */
    List<VoPlans> getCompletedPlans();
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java
@@ -25,4 +25,11 @@
    int updateByPrimaryKey(IrProjectGroup record);
    /**
     * 解绑项目与轮罐组关联
     * @param projectId
     * @return
     */
    Integer unbindGroup(Long projectId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoIr.IrProject;
import com.dy.pipIrrGlobal.voIr.VoProject;
import com.dy.pipIrrGlobal.voIr.VoProjectDetail;
import com.dy.pipIrrGlobal.voIr.VoProjectOne;
import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
import org.apache.ibatis.annotations.Mapper;
@@ -79,4 +80,11 @@
     * @return
     */
    List<VoProjectSimple> getSimpleProjects(Map<?, ?> params);
    /**
     * 根据项目Id获取项目详情,编辑项目信息使用
     * @param projectId
     * @return
     */
    VoProjectDetail getProjectDetail(Long projectId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java
@@ -36,6 +36,11 @@
    private Long id;
    /**
     * 项目ID
     */
    private Long projectId;
    /**
     * 计划名称
     */
    @NotBlank(message = "计划名称不能为空")
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlans.java
@@ -16,11 +16,16 @@
 */
@Data
@JsonPropertyOrder({"planId", "planName", "startupMode", "planStartTime", "planStopTime", "duration", "planState"})
@JsonPropertyOrder({"projectName","planId", "planName", "startupMode", "planStartTime", "planStopTime", "duration", "planState"})
public class VoPlans {
    public static final long serialVersionUID = 202503261555001L;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 计划ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectDetail.java
New file
@@ -0,0 +1,27 @@
package com.dy.pipIrrGlobal.voIr;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2025-03-28 8:49
 * @LastEditTime 2025-03-28 8:49
 * @Description 灌溉项目详情视图对象
 */
@Data
@JsonPropertyOrder({"projectName", "irrigateGroups"})
public class VoProjectDetail {
    public static final long serialVersionUID = 202503280850001L;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 灌溉组列表
     */
    private String irrigateGroups;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -5,6 +5,7 @@
    <!--@mbg.generated-->
    <!--@Table ir_irrigate_plan-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="project_id" jdbcType="BIGINT" property="projectId" />
    <result column="plan_name" jdbcType="VARCHAR" property="planName" />
    <result column="startup_mode" jdbcType="TINYINT" property="startupMode" />
    <result column="plan_start_time" jdbcType="TIMESTAMP" property="planStartTime" />
@@ -16,7 +17,7 @@
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, plan_name, startup_mode, plan_start_time, plan_stop_time, duration,
    id, project_id, plan_name, startup_mode, plan_start_time, plan_stop_time, duration,
    plan_state, executing_state, deleted
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -33,11 +34,11 @@
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan">
    <!--@mbg.generated-->
    insert into ir_irrigate_plan (id, plan_name,
    insert into ir_irrigate_plan (id, project_id, plan_name,
      startup_mode, plan_start_time, plan_stop_time, 
      duration, plan_state, executing_state, 
      deleted)
    values (#{id,jdbcType=BIGINT}, #{planName,jdbcType=VARCHAR},
    values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{planName,jdbcType=VARCHAR},
      #{startupMode,jdbcType=TINYINT}, #{planStartTime,jdbcType=TIMESTAMP}, #{planStopTime,jdbcType=TIMESTAMP}, 
      #{duration,jdbcType=INTEGER}, #{planState,jdbcType=TINYINT}, #{executingState,jdbcType=TINYINT}, 
      #{deleted,jdbcType=BIGINT})
@@ -48,6 +49,9 @@
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="projectId != null">
        project_id,
      </if>
      <if test="planName != null">
        plan_name,
@@ -77,6 +81,9 @@
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="projectId != null">
        #{projectId,jdbcType=BIGINT},
      </if>
      <if test="planName != null">
        #{planName,jdbcType=VARCHAR},
@@ -108,6 +115,9 @@
    <!--@mbg.generated-->
    update ir_irrigate_plan
    <set>
      <if test="projectId != null">
        project_id = #{projectId,jdbcType=BIGINT},
      </if>
      <if test="planName != null">
        plan_name = #{planName,jdbcType=VARCHAR},
      </if>
@@ -138,7 +148,8 @@
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan">
    <!--@mbg.generated-->
    update ir_irrigate_plan
    set plan_name = #{planName,jdbcType=VARCHAR},
    set project_id = #{projectId,jdbcType=BIGINT},
      plan_name = #{planName,jdbcType=VARCHAR},
      startup_mode = #{startupMode,jdbcType=TINYINT},
      plan_start_time = #{planStartTime,jdbcType=TIMESTAMP},
      plan_stop_time = #{planStopTime,jdbcType=TIMESTAMP},
@@ -152,111 +163,111 @@
  <!--根据指定的计划ID获取启动模式-->
  <select id="getStartupMode" resultType="java.lang.Byte">
    SELECT
        startup_mode AS startupMode
    startup_mode AS startupMode
    FROM ir_irrigate_plan
    WHERE id = #{planId}
  </select>
  <!--根据指定的条件获取计划数量-->
<!--  <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>-->
  <!--  <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="planName != null and planName != ''">-->
  <!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')-->
  <!--      </if>-->
<!--      <if test="startupMode != null">-->
<!--        AND plan.startup_mode = #{startupMode}-->
<!--      </if>-->
  <!--      <if test="startupMode != null">-->
  <!--        AND plan.startup_mode = #{startupMode}-->
  <!--      </if>-->
<!--      <if test="planState != null">-->
<!--        AND plan.plan_state = #{planState}-->
<!--      </if>-->
  <!--      <if test="planState != null">-->
  <!--        AND plan.plan_state = #{planState}-->
  <!--      </if>-->
<!--      <if test="executingState != null">-->
<!--        AND plan.executing_state = #{executingState}-->
<!--      </if>-->
<!--    </where>-->
<!--  </select>-->
  <!--      <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,-->
  <!--  <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>-->
  <!--        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="planName != null and planName != ''">-->
  <!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')-->
  <!--      </if>-->
<!--      <if test="startupMode != null">-->
<!--        AND plan.startup_mode = #{startupMode}-->
<!--      </if>-->
  <!--      <if test="startupMode != null">-->
  <!--        AND plan.startup_mode = #{startupMode}-->
  <!--      </if>-->
<!--      <if test="planState != null">-->
<!--        AND plan.plan_state = #{planState}-->
<!--      </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>-->
  <!--      <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
    plan.startup_mode AS startupMode,
    plan.plan_start_time AS planStartTime,
    plan.duration AS duration
    FROM ir_irrigate_plan plan
    WHERE plan.id = #{planId}
      AND plan.deleted = 0 AND plan_state = 1
    AND plan.deleted = 0 AND plan_state = 1
    LIMIT 1
  </select>
@@ -270,39 +281,43 @@
  <!--获取未完成的计划列表,小程序计划列表页使用-->
  <select id="getNotCompletePlans" resultType="com.dy.pipIrrGlobal.voIr.VoPlans">
    SELECT
      id AS planId,
      plan_name AS planName,
      startup_mode AS startupMode,
      plan_start_time AS planStartTime,
      plan_stop_time AS planStopTime,
      duration,
      IF(plan_state = 1,'草稿',
         IF(NOW() &lt; plan_start_time, '未执行',
            IF(NOW() &gt;= plan_start_time AND NOW() &lt; plan_stop_time, '执行中', '已完成')
        )
      ) AS planState
      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() &lt; plan.plan_start_time, 2,
            IF(NOW() &gt;= plan.plan_start_time AND NOW() &lt; plan.plan_stop_time, 3, 4)
           )
        ) AS planState
    FROM ir_irrigate_plan plan
    WHERE deleted = 0 AND (plan_state = 1 OR NOW() &lt; plan_stop_time)
    ORDER BY plan_state DESC
        INNER JOIN ir_project pro ON pro.id = plan.project_id
    WHERE plan.deleted = 0 AND (plan.plan_state = 1 OR NOW() &lt; plan.plan_stop_time)
    ORDER BY plan.plan_state DESC
  </select>
  <!--获取已完成的计划列表,小程序计划列表页使用-->
  <select id="getCompletedPlans" resultType="com.dy.pipIrrGlobal.voIr.VoPlans">
    SELECT
      id AS planId,
      plan_name AS planName,
      startup_mode AS startupMode,
      plan_start_time AS planStartTime,
      plan_stop_time AS planStopTime,
      duration,
      IF(plan_state = 1,'草稿',
         IF(NOW() &lt; plan_start_time, '未执行',
            IF(NOW() &gt;= plan_start_time AND NOW() &lt; plan_stop_time, '执行中', '已完成')
        )
      ) AS planState
      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() &lt; plan.plan_start_time, 2,
            IF(NOW() &gt;= plan.plan_start_time AND NOW() &lt; plan.plan_stop_time, 3, 4)
           )
        ) AS planState
    FROM ir_irrigate_plan plan
    WHERE deleted = 0 AND (plan_state = 2 AND NOW() &gt;= plan_stop_time)
    ORDER BY plan_state DESC
        INNER JOIN ir_project pro ON pro.id = plan.project_id
    WHERE plan.deleted = 0 AND (plan.plan_state = 2 AND NOW() &gt;= plan.plan_stop_time)
    ORDER BY plan.plan_state DESC
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml
@@ -88,4 +88,9 @@
      sort = #{sort,jdbcType=INTEGER}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--解绑项目与轮罐组关联-->
  <delete id="unbindGroup">
    delete from ir_project_group where project_id=#{projectId}
  </delete>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml
@@ -308,4 +308,22 @@
      </if>
    </trim>
  </select>
  <!--根据项目Id获取项目详情,编辑项目信息使用-->
  <select id="getProjectDetail" resultType="com.dy.pipIrrGlobal.voIr.VoProjectDetail">
    SELECT
        projectName,
        GROUP_CONCAT(groupId) AS irrigateGroups
    FROM
      (
        SELECT
          pro.project_name AS projectName,
          grp.id AS groupId
        FROM ir_project pro
               INNER JOIN ir_project_group pg ON pg.project_id = pro.id
               INNER JOIN ir_irrigate_group grp ON grp.id = pg.group_id
        WHERE pro.id = #{projectId}
      ) project
    GROUP BY projectName
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/PipIrrIrrigateApplication.java
@@ -9,7 +9,7 @@
import org.springframework.context.annotation.FilterType;
@SpringBootApplication
@EnableAspectJAutoProxy
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableMultiDataSource
@ComponentScan(basePackages = {"com.dy.common", "com.dy.pipIrrGlobal", "com.dy.pipIrrIrrigate"},
        excludeFilters = {
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java
@@ -7,8 +7,11 @@
import com.dy.common.webUtil.ResultCodeMsg;
import com.dy.pipIrrGlobal.pojoIr.IrProject;
import com.dy.pipIrrGlobal.voIr.VoProject;
import com.dy.pipIrrGlobal.voIr.VoProjectDetail;
import com.dy.pipIrrGlobal.voIr.VoProjectOne;
import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
import com.dy.pipIrrGlobal.voSe.VoActiveCard;
import com.dy.pipIrrIrrigate.project.dto.IrrigateProject;
import com.dy.pipIrrIrrigate.result.IrrigateResultCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
@@ -44,8 +47,7 @@
    private final ProjectSv projectSv;
    /**
     * 添加项目
     *
     * 添加项目,旧版本,原则上废弃
     * @param po            项目实体对象
     * @param bindingResult
     * @return 添加是否成功
@@ -79,7 +81,7 @@
    }
    /**
     * 逻辑删除项目
     * 逻辑删除项目,旧版本,原则上废弃
     * @param map
     * @return
     */
@@ -141,7 +143,7 @@
    }
    /**
     * 修改项目信息
     * 修改项目信息,旧版本,原则上废弃
     * @param po
     * @param bindingResult
     * @return
@@ -175,7 +177,7 @@
    }
    /**
     * 修改项目状态
     * 修改项目状态,无用接口,原则上废弃
     * @param po
     * @param
     * @return
@@ -206,8 +208,7 @@
    }
    /**
     * 获取一个项目数据
     *
     * 获取一个项目数据,旧版本,原则上废弃
     * @return 获取一个项目数据
     */
    @Operation(summary = "获取一个项目数据", description = "获取一个项目数据")
@@ -229,7 +230,7 @@
    }
    /**
     * 分页查询
     * 分页查询,旧版本,原则上废弃
     * @param vo
     * @return
     */
@@ -253,4 +254,142 @@
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 添加项目,新版本,使用这个
     * @param po            项目实体对象
     * @param bindingResult
     * @return 添加是否成功
     */
    @PostMapping(path = "addIrrigateProject", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> addIrrigateProject(@RequestBody @Valid IrrigateProject po, BindingResult bindingResult) {
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Map map_result = projectSv.addIrrigateProject(po);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess() ;
        //String projectName = po.getProjectName();
        //String irrigateGroups = po.getIrrigateGroups();
        //Long operatorId = po.getOperatorId();
        //
        //IrProject irProject = new IrProject();
        //irProject.setProjectName(projectName);
        //irProject.setProjectState((byte)1);
        //irProject.setOperator(operatorId);
        //irProject.setOperateTime(new Date());
        //irProject.setDeleted((byte)0);
        //Long projectId = projectSv.addIrrigateProject(irProject);
        //if(projectId == null) {
        //    return BaseResponseUtils.buildErrorMsg("创建灌溉项目失败");
        //}
        //
        //String[] irrigateGroupArr = irrigateGroups.split(",");
        //Integer sort = 1;
        //for(String irrigateGroupId : irrigateGroupArr) {
        //    String trimmed = irrigateGroupId.trim();
        //    if(trimmed.isEmpty()) {
        //        continue;
        //    }
        //    try {
        //        Long irrigateGroupIdLong = Long.parseLong(trimmed);
        //        IrProjectGroup irProjectGroup = new IrProjectGroup();
        //        irProjectGroup.setProjectId(projectId);
        //        irProjectGroup.setGroupId(irrigateGroupIdLong);
        //        irProjectGroup.setSort(sort++);
        //        projectSv.projectBindGroup(irProjectGroup);
        //
        //    } catch (NumberFormatException  e) {
        //        return BaseResponseUtils.buildErrorMsg("灌溉组ID格式错误");
        //    }
        //}
    }
    /**
     * 删除项目,新版本,使用这个
     * @param projectId
     * @return
     */
    @PostMapping(path = "deleteIrrigateProject")
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> deleteIrrigateProject(@RequestParam(required = false) Long projectId) {
        if(projectId == null) {
            return BaseResponseUtils.buildErrorMsg("项目ID不能为空");
        }
        Map map_result = projectSv.deleteIrrigateProject(projectId);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess() ;
    }
    /**
     * 修改项目,新版本,使用这个
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "updateIrrigateProject", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> updateIrrigateProject(@RequestBody @Valid IrrigateProject po, BindingResult bindingResult){
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if(po.getProjectId() == null) {
            return BaseResponseUtils.buildErrorMsg("项目ID不能为空");
        }
        Map map_result = projectSv.updateIrrigateProject(po);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess() ;
    }
    /**
     * 分页查询项目,新版本,目前使用
     * @param qo
     * @return
     */
    @GetMapping(path = "/getSimpleProjects")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoProjectSimple>>> getSimpleProjects(QueryVo qo) {
        try {
            QueryResultVo<List<VoProjectSimple>> res = projectSv.getSimpleProjects(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取项目记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 根据项目Id获取项目详情,编辑项目信息使用
     * @param projectId
     * @return
     */
    @GetMapping(path = "getProject")
    @SsoAop()
    public BaseResponse<VoProjectDetail> getProject(@RequestParam Long projectId) {
        if(projectId == null) {
            return BaseResponseUtils.buildErrorMsg("项目ID不能为空");
        }
        Map map_result = projectSv.getProjectDetail(projectId);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java
@@ -2,16 +2,24 @@
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoIr.IrProjectGroupMapper;
import com.dy.pipIrrGlobal.daoIr.IrProjectMapper;
import com.dy.pipIrrGlobal.pojoIr.IrProject;
import com.dy.pipIrrGlobal.pojoIr.IrProjectGroup;
import com.dy.pipIrrGlobal.voIr.VoProject;
import com.dy.pipIrrGlobal.voIr.VoProjectDetail;
import com.dy.pipIrrGlobal.voIr.VoProjectOne;
import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
import com.dy.pipIrrIrrigate.project.dto.IrrigateProject;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -27,9 +35,11 @@
    @Autowired
    private IrProjectMapper irProjectMapper;
    @Autowired
    private IrProjectGroupMapper irProjectGroupMapper;
    /**
     * 添加项目
     *
     * 添加项目,旧版本,原则上废弃
     * @param po
     * @return
     */
@@ -62,8 +72,121 @@
    }
    /**
     * 删除项目
     *
     * 添加项目,目前使用
     * @param po
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map addIrrigateProject(IrrigateProject po) {
        String projectName = po.getProjectName();
        String irrigateGroups = po.getIrrigateGroups();
        Long operatorId = po.getOperatorId();
        IrProject irProject = new IrProject();
        irProject.setProjectName(projectName);
        irProject.setProjectState((byte)1);
        irProject.setOperator(operatorId);
        irProject.setOperateTime(new Date());
        irProject.setDeleted((byte)0);
        irProjectMapper.insert(irProject);
        Long projectId = irProject.getId();
        if(projectId == null) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "创建灌溉项目失败");
            map.put("content", null);
            return map;
        }
        String[] irrigateGroupArr = irrigateGroups.split(",");
        Integer sort = 1;
        for(String irrigateGroupId : irrigateGroupArr) {
            String trimmed = irrigateGroupId.trim();
            if(trimmed.isEmpty()) {
                continue;
            }
            try {
                Long irrigateGroupIdLong = Long.parseLong(trimmed);
                IrProjectGroup irProjectGroup = new IrProjectGroup();
                irProjectGroup.setProjectId(projectId);
                irProjectGroup.setGroupId(irrigateGroupIdLong);
                irProjectGroup.setSort(sort++);
                irProjectGroupMapper.insert(irProjectGroup);
            } catch (NumberFormatException  e) {
                Map map = new HashMap<>();
                map.put("success", false);
                map.put("msg", "灌溉组ID格式错误");
                map.put("content", null);
                return map;
            }
        }
        Map map = new HashMap<>();
        map.put("success", true);
        map.put("msg", "添加灌溉项目成功");
        map.put("content", null);
        return map;
    }
    /**
     * 删除灌溉项目,目前使用
     * @param projectId
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map deleteIrrigateProject(Long projectId) {
        try {
            irProjectGroupMapper.unbindGroup(projectId);
            irProjectMapper.deleteByPrimaryKey(projectId);
            Map map = new HashMap<>();
            map.put("success", true);
            map.put("msg", "灌溉项目删除成功");
            map.put("content", null);
            return map;
        } catch (Exception e) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "灌溉项目删除失败");
            map.put("content", null);
            return map;
        }
    }
    /**
     * 修改灌溉项目,目前使用
     * @param po
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map updateIrrigateProject(IrrigateProject po) {
        Long projectId = po.getProjectId();
        Map map_deleteProject = ((ProjectSv) AopContext.currentProxy()).deleteIrrigateProject(projectId);
        if(map_deleteProject.get("success").equals(false)) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", map_deleteProject.get("msg").toString());
            map.put("content", null);
            return map;
        }
        Map map_addProject = ((ProjectSv) AopContext.currentProxy()).addIrrigateProject(po);
        if(map_addProject.get("success").equals(false)) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", map_addProject.get("msg").toString());
            map.put("content", null);
            return map;
        }
        Map map = new HashMap<>();
        map.put("success", true);
        map.put("msg", "修改灌溉项目成功");
        map.put("content", null);
        return map;
    }
    /**
     * 删除项目,旧版本,原则上废弃
     * @param id
     */
    public Integer deleteProject(Long id) {
@@ -131,7 +254,7 @@
    }
    /**
     * 分页查询项目
     * 分页查询项目,旧版本,原则上废弃
     * @param queryVo
     * @return
     */
@@ -146,4 +269,43 @@
        rsVo.obj = irProjectMapper.getProjects(params);
        return rsVo;
    }
    /**
     * 分页查询项目,新版本,目前使用
     * @param queryVo
     * @return
     */
    public QueryResultVo<List<VoProjectSimple>> getSimpleProjects(QueryVo queryVo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
        Long itemTotal = irProjectMapper.getSimpleProjectsCount(params);
        QueryResultVo<List<VoProjectSimple>> rsVo = new QueryResultVo<>();
        rsVo.pageSize = queryVo.pageSize;
        rsVo.pageCurr = queryVo.pageCurr;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = irProjectMapper.getSimpleProjects(params);
        return rsVo;
    }
    /**
     * 根据项目Id获取项目详情,编辑项目信息使用
     * @param projectId
     * @return
     */
    public Map getProjectDetail(Long projectId) {
        try {
            VoProjectDetail voProjectDetail = irProjectMapper.getProjectDetail(projectId);
            Map map = new HashMap<>();
            map.put("success", true);
            map.put("msg", "获取项目详情成功");
            map.put("content", voProjectDetail);
            return map;
        } catch (Exception e) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "获取项目详情失败");
            map.put("content", null);
            return map;
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/dto/IrrigateProject.java
New file
@@ -0,0 +1,40 @@
package com.dy.pipIrrIrrigate.project.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2025-03-27 15:09
 * @LastEditTime 2025-03-27 15:09
 * @Description 灌溉项目实体类,添加项目使用
 */
@Data
public class IrrigateProject {
    public static final long serialVersionUID = 202503271510001L;
    /**
     * 项目ID,修改项目信息时需要传入
     */
    private Long projectId;
    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称不能为空")
    private String projectName;
    /**
     * 轮灌组列表
     */
    @NotBlank(message = "项目必须包含轮灌组")
    private String irrigateGroups;
    /**
     * 操作员ID
     */
    @NotNull(message = "操作员ID不能为空")
    private Long operatorId;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/PipIrrRemoteApplication.java
@@ -29,7 +29,8 @@
        "com.dy.pipIrrGlobal.daoBa",
        "com.dy.pipIrrGlobal.daoFi",
        "com.dy.pipIrrGlobal.daoAllRound",
        "com.dy.pipIrrGlobal.daoLargeScreen"
        "com.dy.pipIrrGlobal.daoLargeScreen",
        "com.dy.pipIrrGlobal.daoIr"
})
public class PipIrrRemoteApplication {
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -60,6 +60,7 @@
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long projectId = planAndSchedule.getProjectId();
        Long operatorId = planAndSchedule.getOperatorId();
        Byte startupMode = planAndSchedule.getStartupMode();
        Date planStartTime = planAndSchedule.getPlanStartTime();;
@@ -68,6 +69,20 @@
        Integer duration = 0;
        for(IrrigateSchedule schedule : planAndSchedule.getSchedules()){
            duration = duration + schedule.getDuration();
        }
        if(startupMode == 2){
            if(planStartTime == null) {
                return BaseResponseUtils.buildErrorMsg("自动启动模式必须指定计划启动时间");
            }
            LocalDateTime startTime = planStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
            LocalDateTime currentTime = LocalDateTime.now();
            currentTime = currentTime.plusHours(8);
            if(!startTime.isAfter(currentTime)) {
                return BaseResponseUtils.buildErrorMsg("启动时间不能在8小时之内");
            }
        }
        //if(startupMode == 1){
@@ -80,6 +95,7 @@
        //planStopTime = Date.from(stopTime.atZone(ZoneId.systemDefault()).toInstant());
        IrIrrigatePlan plan = new IrIrrigatePlan();
        plan.setProjectId(projectId);
        plan.setPlanName(planAndSchedule.getPlanName());
        plan.setStartupMode(startupMode);
        plan.setPlanStartTime(planStartTime);
@@ -208,7 +224,9 @@
            planStartTime = new Date();
        }
        LocalDateTime startTime = planStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
        startTime = startTime.plusMinutes(5);
        if(startupMode == 1){
            startTime = startTime.plusMinutes(5);
        }
        planStartTime = Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant());
        LocalDateTime stopTime = startTime.plusMinutes(duration);
        planStopTime = Date.from(stopTime.atZone(ZoneId.systemDefault()).toInstant());
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java
@@ -18,6 +18,11 @@
    public static final long serialVersionUID = 202502201511001L;
    /**
     * 项目ID
     */
    private Long projectId;
    /**
     * 计划名称
     */
    @NotBlank(message = "计划名称不能为空")