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() < plan_start_time, '未执行', IF(NOW() >= plan_start_time AND NOW() < 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() < 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 WHERE deleted = 0 AND (plan_state = 1 OR NOW() < 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() < 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() < plan_start_time, '未执行', IF(NOW() >= plan_start_time AND NOW() < 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() < 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 WHERE deleted = 0 AND (plan_state = 2 AND NOW() >= 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() >= 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 = "计划名称不能为空")