From 90faa5303c948210cc12795cdb68f3a16ebd17a3 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 06 三月 2026 16:34:00 +0800
Subject: [PATCH] feat(plan): 新增项目管理计划模块基础功能
---
src/main/resources/mapper/projectManagement/PlanMapper.xml | 30 +++++
src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java | 40 ++++++
src/main/java/com/ruoyi/projectManagement/pojo/Plan.java | 84 ++++++++++++++
src/main/java/com/ruoyi/projectManagement/vo/SearchPlanVo.java | 21 +++
src/main/java/com/ruoyi/projectManagement/service/PlanService.java | 34 +++++
src/main/java/com/ruoyi/projectManagement/mapper/PlanMapper.java | 21 +++
src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java | 81 +++++++++++++
src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java | 31 +++++
8 files changed, 342 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/projectManagement/mapper/PlanMapper.java b/src/main/java/com/ruoyi/projectManagement/mapper/PlanMapper.java
new file mode 100644
index 0000000..3c5d707
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/mapper/PlanMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.projectManagement.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.projectManagement.pojo.Plan;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.projectManagement.vo.SearchPlanVo;
+
+/**
+* @author buhuazhen
+* @description 閽堝琛ㄣ�恜roject_management_plan(椤圭洰绠$悊璁″垝琛�(椤圭洰绠$悊绫诲瀷))銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2026-03-06 15:29:26
+* @Entity generator.domain.ProjectManagementPlan
+*/
+public interface PlanMapper extends BaseMapper<Plan> {
+
+ IPage<Plan> selectPlanPage(SearchPlanVo searchPlanVo);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/projectManagement/pojo/Plan.java b/src/main/java/com/ruoyi/projectManagement/pojo/Plan.java
new file mode 100644
index 0000000..3fa3a98
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/pojo/Plan.java
@@ -0,0 +1,84 @@
+package com.ruoyi.projectManagement.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.time.LocalDateTime;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 椤圭洰绠$悊璁″垝琛�(椤圭洰绠$悊绫诲瀷)
+ * @TableName project_management_plan
+ */
+@TableName(value ="project_management_plan")
+@Data
+@ApiModel(description="椤圭洰绠$悊璁″垝琛�(椤圭洰绠$悊绫诲瀷)")
+public class Plan {
+ /**
+ *
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ @ApiModelProperty(value="涓婚敭ID")
+ private Long id;
+
+ /**
+ * 璁″垝鍚嶇О
+ */
+ @TableField(value = "name")
+ @ApiModelProperty(value="璁″垝鍚嶇О")
+ private String name;
+
+ /**
+ * 璁″垝鎻忚堪
+ */
+ @TableField(value = "describe")
+ @ApiModelProperty(value="璁″垝鎻忚堪")
+ private String describe;
+
+ /**
+ * 闄勪欢 ,杩涜鍒嗗壊
+ */
+ @TableField(value = "attachment")
+ @ApiModelProperty(value="闄勪欢")
+ private String attachment;
+
+ /**
+ *
+ */
+ @TableField(value = "is_delete")
+ @ApiModelProperty(value="鏄惁鍒犻櫎")
+ private Integer isDelete;
+
+ /**
+ *
+ */
+ @TableField(value = "create_time",fill = FieldFill.INSERT)
+ @ApiModelProperty(value="鍒涘缓鏃堕棿")
+ private LocalDateTime createTime;
+
+ /**
+ *
+ */
+ @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+ @ApiModelProperty(value="鏇存柊鏃堕棿")
+ private LocalDateTime updateTime;
+
+ /**
+ *
+ */
+ @TableField(value = "create_user",fill = FieldFill.INSERT)
+ @ApiModelProperty(value="鍒涘缓浜�")
+ private String createUser;
+
+ /**
+ *
+ */
+ @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
+ @ApiModelProperty(value="鏇存柊浜�")
+ private String updateUser;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/projectManagement/service/PlanService.java b/src/main/java/com/ruoyi/projectManagement/service/PlanService.java
new file mode 100644
index 0000000..7eab7d8
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/service/PlanService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.projectManagement.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.projectManagement.pojo.Plan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.projectManagement.vo.PlanVo;
+import com.ruoyi.projectManagement.vo.SavePlanVo;
+import com.ruoyi.projectManagement.vo.SearchPlanVo;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+* @author buhuazhen
+* @description 閽堝琛ㄣ�恜roject_management_plan(椤圭洰绠$悊璁″垝琛�(椤圭洰绠$悊绫诲瀷))銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2026-03-06 15:29:26
+*/
+public interface PlanService{
+
+ /**
+ * 淇濆瓨椤圭洰绠$悊璁″垝
+ * @param savePlanVo
+ */
+ void savePlan(@NotNull SavePlanVo savePlanVo);
+
+ /**
+ * 鍒犻櫎椤圭洰绠$悊璁″垝
+ * @param id
+ */
+ void deletePlan(@NotNull Long id);
+
+
+ IPage<PlanVo> searchPlan(@NotNull SearchPlanVo searchPlanVo);
+}
diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java b/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
new file mode 100644
index 0000000..4262f89
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
@@ -0,0 +1,81 @@
+package com.ruoyi.projectManagement.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.basic.service.CustomerFollowUpFileService;
+import com.ruoyi.projectManagement.mapper.PlanMapper;
+import com.ruoyi.projectManagement.pojo.Plan;
+import com.ruoyi.projectManagement.service.PlanService;
+import com.ruoyi.projectManagement.vo.PlanVo;
+import com.ruoyi.projectManagement.vo.SavePlanVo;
+import com.ruoyi.projectManagement.vo.SearchPlanVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.Optional;
+
+/**
+ * @author buhuazhen
+ * @description 椤圭洰绠$悊璁″垝鐨勫疄鐜�
+ * @createDate 2026-03-06 15:29:26
+ */
+@Service
+@RequiredArgsConstructor
+@Transactional(readOnly = true)
+public class PlanServiceImpl implements PlanService {
+
+ private final PlanMapper planMapper;
+
+ private final CustomerFollowUpFileService customerFollowUpFileService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void savePlan(SavePlanVo savePlanVo) {
+ Plan plan = BeanUtil.copyProperties(savePlanVo, Plan.class);
+ // 闄勪欢澶勭悊 , 鎷兼帴
+ String attachments = String.join(",", Optional.ofNullable(savePlanVo.getAttachmentIds()).orElse(Collections.emptyList()));
+ plan.setAttachment(attachments);
+
+
+ if (savePlanVo.getId() == null) {
+ planMapper.insert(plan);
+ } else {
+ planMapper.updateById(plan);
+ }
+
+ // todo@ 鑺傜偣淇濆瓨
+
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deletePlan(Long id) {
+ planMapper.update(null,
+ new LambdaUpdateWrapper<Plan>()
+ .eq(Plan::getId, id)
+ .set(Plan::getIsDelete, 1));
+ // todo@ 瀵瑰簲鑺傜偣鍏ㄩ儴鍒犻櫎
+
+
+ }
+
+ @Override
+ public IPage<PlanVo> searchPlan(SearchPlanVo searchPlanVo) {
+ IPage<Plan> planIPage = planMapper.selectPlanPage(searchPlanVo);
+ IPage<PlanVo> resultPage = planIPage.convert(plan -> BeanUtil.copyProperties(plan, PlanVo.class));
+ // 鏂囦欢鑾峰彇
+ customerFollowUpFileService.fillAttachment(resultPage.getRecords(), PlanVo::getAttachment, PlanVo::setAttachmentList);
+ // todo@ node 鑺傜偣鑾峰彇
+
+ return resultPage;
+ }
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java b/src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java
new file mode 100644
index 0000000..9ee78e9
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.projectManagement.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.ruoyi.common.vo.SimpleFileVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 璁″垝VO
+ * @author buhuazhen
+ * @date 2026/3/6
+ * @email 3038525872@qq.com
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PlanVo implements Serializable {
+
+ private Long id;
+
+ private String name;
+
+ private String describe;
+
+ // 闄勪欢
+ private List<SimpleFileVo> attachmentList;
+
+ @JsonIgnore
+ private String attachment;
+
+ private LocalDateTime createTime;
+
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java b/src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java
new file mode 100644
index 0000000..5c79940
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.projectManagement.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author buhuazhen
+ * @date 2026/3/6
+ * @email 3038525872@qq.com
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SavePlanVo implements Serializable {
+
+ private Long id;
+ @NotBlank
+ private String name;
+ @NotBlank
+ private String describe;
+
+ private List<String> attachmentIds;
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/projectManagement/vo/SearchPlanVo.java b/src/main/java/com/ruoyi/projectManagement/vo/SearchPlanVo.java
new file mode 100644
index 0000000..d4d4ad0
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/vo/SearchPlanVo.java
@@ -0,0 +1,21 @@
+package com.ruoyi.projectManagement.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author buhuazhen
+ * @date 2026/3/6
+ * @email 3038525872@qq.com
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SearchPlanVo extends Page implements Serializable {
+
+
+}
diff --git a/src/main/resources/mapper/projectManagement/PlanMapper.xml b/src/main/resources/mapper/projectManagement/PlanMapper.xml
new file mode 100644
index 0000000..3578358
--- /dev/null
+++ b/src/main/resources/mapper/projectManagement/PlanMapper.xml
@@ -0,0 +1,30 @@
+<?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.ruoyi.projectManagement.mapper.PlanMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.projectManagement.pojo.Plan">
+ <id property="id" column="id" jdbcType="BIGINT"/>
+ <result property="name" column="name" jdbcType="VARCHAR"/>
+ <result property="describe" column="describe" jdbcType="VARCHAR"/>
+ <result property="attachment" column="attachment" jdbcType="VARCHAR"/>
+ <result property="is_delete" column="is_delete" jdbcType="INTEGER"/>
+ <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+ <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/>
+ <result property="create_user" column="create_user" jdbcType="VARCHAR"/>
+ <result property="update_user" column="update_user" jdbcType="VARCHAR"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ id,name,describe,
+ attachment,is_delete,create_time,
+ update_time,create_user,update_user
+ </sql>
+
+ <select id="selectPlanPage" resultMap="BaseResultMap">
+ select t1.*
+ from project_management_plan as t1
+ order by t1.create_time desc
+ </select>
+</mapper>
--
Gitblit v1.9.3