diff --git a/ruoyi-ui/src/api/project/projectPlan.js b/ruoyi-ui/src/api/project/projectPlan.js
new file mode 100644
index 00000000..ed832a04
--- /dev/null
+++ b/ruoyi-ui/src/api/project/projectPlan.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询项目跟进计划列表
+export function listProjectPlan(query) {
+ return request({
+ url: '/project/projectPlan/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询项目跟进计划详细
+export function getProjectPlan(id) {
+ return request({
+ url: '/project/projectPlan/' + id,
+ method: 'get'
+ })
+}
+
+// 新增项目跟进计划
+export function addProjectPlan(data) {
+ return request({
+ url: '/project/projectPlan',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改项目跟进计划
+export function updateProjectPlan(data) {
+ return request({
+ url: '/project/projectPlan',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除项目跟进计划
+export function delProjectPlan(id) {
+ return request({
+ url: '/project/projectPlan/' + id,
+ method: 'delete'
+ })
+}
diff --git a/ruoyi-ui/src/views/project/projectPlan/index.vue b/ruoyi-ui/src/views/project/projectPlan/index.vue
new file mode 100644
index 00000000..295eb1ff
--- /dev/null
+++ b/ruoyi-ui/src/views/project/projectPlan/index.vue
@@ -0,0 +1,360 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}
+
+
+
+
+ {{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectPlanController.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectPlanController.java
new file mode 100644
index 00000000..fca6162f
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectPlanController.java
@@ -0,0 +1,162 @@
+package com.yanzhu.jh.project.controller;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.yanzhu.jh.project.domain.vo.MajorPlanExport;
+import com.yanzhu.jh.project.domain.vo.SurProjectBuildNodeDataExport;
+import com.yanzhu.jh.project.domain.vo.UrbanPlanExport;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+import com.yanzhu.jh.project.service.ISurProjectPlanService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 项目跟进计划Controller
+ *
+ * @author ruoyi
+ * @date 2023-09-07
+ */
+@RestController
+@RequestMapping("/project/projectPlan")
+public class SurProjectPlanController extends BaseController
+{
+ @Autowired
+ private ISurProjectPlanService surProjectPlanService;
+
+ /**
+ * 查询项目跟进计划列表
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SurProjectPlan surProjectPlan)
+ {
+ startPage();
+ List list = surProjectPlanService.selectSurProjectPlanList(surProjectPlan);
+ return getDataTable(list);
+ }
+
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:list')")
+ @GetMapping("/listAll/{type}")
+ public AjaxResult listAll(@PathVariable("type") Long type){
+ SurProjectPlan where=new SurProjectPlan();
+ where.setPlanType(type);
+ where.setIsDel(0l);
+ List list = surProjectPlanService.selectSurProjectPlanList(where);
+ return AjaxResult.success(list);
+ }
+ /**
+ * 导出项目跟进计划列表
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:export')")
+ @Log(title = "项目跟进计划", businessType = BusinessType.EXPORT)
+ @GetMapping("/export/{type}")
+ public void export(HttpServletResponse response,@PathVariable("type") Long type)
+ {
+ SurProjectPlan where=new SurProjectPlan();
+ where.setPlanType(type);
+ List list = surProjectPlanService.selectSurProjectPlanList(where);
+ if(list.size()==0){
+ list.add(new SurProjectPlan());
+ }
+ if(type==0){
+ List list1=new ArrayList<>();
+ for(SurProjectPlan it :list){
+ list1.add(UrbanPlanExport.convert(it));
+ }
+ ExcelUtil util=new ExcelUtil<>(UrbanPlanExport.class);
+ util.exportExcel(response, list1, "城建项目计划");
+ }else{
+ List list1=new ArrayList<>();
+ for(SurProjectPlan it :list){
+ list1.add(MajorPlanExport.convert(it));
+ }
+ ExcelUtil util=new ExcelUtil<>(MajorPlanExport.class);
+ util.exportExcel(response, list1, "重点项目计划");
+ }
+
+ }
+
+ /**
+ * 获取项目跟进计划详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(surProjectPlanService.selectSurProjectPlanById(id));
+ }
+
+ /**
+ * 新增项目跟进计划
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:add')")
+ @Log(title = "项目跟进计划", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody SurProjectPlan surProjectPlan)
+ {
+ return toAjax(surProjectPlanService.insertSurProjectPlan(surProjectPlan));
+ }
+
+ /**
+ * 修改项目跟进计划
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:edit')")
+ @Log(title = "项目跟进计划", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody SurProjectPlan surProjectPlan)
+ {
+ return toAjax(surProjectPlanService.updateSurProjectPlan(surProjectPlan));
+ }
+
+ /**
+ * 删除项目跟进计划
+ */
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:remove')")
+ @Log(title = "项目跟进计划", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(surProjectPlanService.deleteSurProjectPlanByIds(ids));
+ }
+
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:import')")
+ @PostMapping("/importUrbanPlan")
+ public AjaxResult importUrbanPlan(MultipartFile file, boolean updateSupport) throws Exception{
+ ExcelUtil util=new ExcelUtil(UrbanPlanExport.class);
+ InputStream is=file.getInputStream();
+ List list = util.importExcel(is);
+ is.close();
+ int n=surProjectPlanService.importUrbanPlan(list);
+ return success("成功导入"+n+"条数据!");
+ }
+
+ @PreAuthorize("@ss.hasPermi('project:projectPlan:import')")
+ @PostMapping("/importMajorPlan")
+ public AjaxResult importMajorPlan(MultipartFile file, boolean updateSupport) throws Exception{
+ ExcelUtil util=new ExcelUtil(MajorPlanExport.class);
+ InputStream is=file.getInputStream();
+ List list = util.importExcel(is);
+ is.close();
+ int n=surProjectPlanService.importMajorPlan(list);
+ return success("成功导入"+n+"条数据!");
+ }
+
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectPlan.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectPlan.java
new file mode 100644
index 00000000..d137082d
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectPlan.java
@@ -0,0 +1,186 @@
+package com.yanzhu.jh.project.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 项目跟进计划对象 sur_project_plan
+ *
+ * @author ruoyi
+ * @date 2023-09-07
+ */
+public class SurProjectPlan extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 项目名称 */
+ @Excel(name = "项目名称")
+ private String projectName;
+
+ /** 建设规模及主要建设内容 */
+ @Excel(name = "建设规模及主要建设内容")
+ private String content;
+
+ /** 建设性质 */
+ @Excel(name = "建设性质")
+ private String buildType;
+
+ /** 包抓部门 */
+ @Excel(name = "包抓部门")
+ private String dept;
+
+ /** 开工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开工日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date startDate;
+
+ /** 完工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "完工日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date endDate;
+
+ /** 总投资(万元) */
+ @Excel(name = "总投资", readConverterExp = "万=元")
+ private Long totalInvestment;
+
+ /** 年度投资(万元) */
+ @Excel(name = "年度投资", readConverterExp = "万=元")
+ private Long yearInvestment;
+
+ /** 0-城建项目计划,1-重点项目计划 */
+ @Excel(name = "0-城建项目计划,1-重点项目计划")
+ private Long planType;
+
+ /** 是否删除 */
+ @Excel(name = "是否删除")
+ private Long isDel;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setProjectName(String projectName)
+ {
+ this.projectName = projectName;
+ }
+
+ public String getProjectName()
+ {
+ return projectName;
+ }
+ public void setContent(String content)
+ {
+ this.content = content;
+ }
+
+ public String getContent()
+ {
+ return content;
+ }
+ public void setBuildType(String buildType)
+ {
+ this.buildType = buildType;
+ }
+
+ public String getBuildType()
+ {
+ return buildType;
+ }
+ public void setDept(String dept)
+ {
+ this.dept = dept;
+ }
+
+ public String getDept()
+ {
+ return dept;
+ }
+ public void setStartDate(Date startDate)
+ {
+ this.startDate = startDate;
+ }
+
+ public Date getStartDate()
+ {
+ return startDate;
+ }
+ public void setEndDate(Date endDate)
+ {
+ this.endDate = endDate;
+ }
+
+ public Date getEndDate()
+ {
+ return endDate;
+ }
+ public void setTotalInvestment(Long totalInvestment)
+ {
+ this.totalInvestment = totalInvestment;
+ }
+
+ public Long getTotalInvestment()
+ {
+ return totalInvestment;
+ }
+ public void setYearInvestment(Long yearInvestment)
+ {
+ this.yearInvestment = yearInvestment;
+ }
+
+ public Long getYearInvestment()
+ {
+ return yearInvestment;
+ }
+ public void setPlanType(Long planType)
+ {
+ this.planType = planType;
+ }
+
+ public Long getPlanType()
+ {
+ return planType;
+ }
+ public void setIsDel(Long isDel)
+ {
+ this.isDel = isDel;
+ }
+
+ public Long getIsDel()
+ {
+ return isDel;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("projectName", getProjectName())
+ .append("content", getContent())
+ .append("buildType", getBuildType())
+ .append("dept", getDept())
+ .append("startDate", getStartDate())
+ .append("endDate", getEndDate())
+ .append("totalInvestment", getTotalInvestment())
+ .append("yearInvestment", getYearInvestment())
+ .append("planType", getPlanType())
+ .append("remark", getRemark())
+ .append("isDel", getIsDel())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/MajorPlanExport.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/MajorPlanExport.java
new file mode 100644
index 00000000..133c1c8f
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/MajorPlanExport.java
@@ -0,0 +1,164 @@
+package com.yanzhu.jh.project.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+
+import java.util.Date;
+
+/**
+ * 重点项目计划
+ */
+public class MajorPlanExport
+{
+
+ @Excel(name = "编号(不要修改)", width = 20,prompt = "不要修改修改此列")
+ private Long id;
+
+ public static MajorPlanExport convert(SurProjectPlan it) {
+ MajorPlanExport p=new MajorPlanExport();
+ p.id=it.getId();
+ p.buildType=it.getBuildType();
+ p.content=it.getContent();
+ p.dept=it.getDept();
+ p.endDate=it.getEndDate();
+ p.startDate=it.getStartDate();
+ p.projectName=it.getProjectName();
+ p.totalInvestment=it.getTotalInvestment();
+ p.yearInvestment=it.getYearInvestment();
+ return p;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getBuildType() {
+ return buildType;
+ }
+
+ public void setBuildType(String buildType) {
+ this.buildType = buildType;
+ }
+
+ public String getDept() {
+ return dept;
+ }
+
+ public void setDept(String dept) {
+ this.dept = dept;
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Date startDate) {
+ this.startDate = startDate;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(Date endDate) {
+ this.endDate = endDate;
+ }
+
+ public Long getTotalInvestment() {
+ return totalInvestment;
+ }
+
+ public void setTotalInvestment(Long totalInvestment) {
+ this.totalInvestment = totalInvestment;
+ }
+
+ public Long getYearInvestment() {
+ return yearInvestment;
+ }
+
+ public void setYearInvestment(Long yearInvestment) {
+ this.yearInvestment = yearInvestment;
+ }
+
+ /** 项目名称 */
+ @Excel(name = "项目名称", width = 30,align = HorizontalAlignment.LEFT)
+ private String projectName;
+
+ /** 建设规模及主要建设内容 */
+ @Excel(name = "建设规模及主要建设内容", width = 40,align = HorizontalAlignment.LEFT)
+ private String content;
+
+ /** 建设性质 */
+ @Excel(name = "建设性质(新建/续建/前期)")
+ private String buildType;
+
+ /** 包抓部门 */
+ @Excel(name = "包抓部门")
+ private String dept;
+
+ /** 开工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开工日期", dateFormat = "yyyy.MM")
+ private Date startDate;
+
+ /** 完工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "完工日期", dateFormat = "yyyy.MM")
+ private Date endDate;
+
+ /** 总投资(万元) */
+ @Excel(name = "总投资(万元)")
+ private Long totalInvestment;
+
+ /** 年度投资(万元) */
+ @Excel(name = "年度计划投资(万元)")
+ private Long yearInvestment;
+
+ public void setValue(SurProjectPlan it) {
+ it.setContent(this.content);
+ it.setDept(this.dept);
+ it.setProjectName(this.projectName);
+ it.setBuildType(this.buildType);
+ it.setStartDate(this.startDate);
+ it.setEndDate(this.endDate);
+ it.setTotalInvestment(this.totalInvestment);
+ it.setYearInvestment(this.yearInvestment);
+ }
+
+ public SurProjectPlan toPlan() {
+ SurProjectPlan p=new SurProjectPlan();
+ p.setPlanType(0l);
+ p.setYearInvestment(this.yearInvestment);
+ p.setDept(this.dept);
+ p.setTotalInvestment(this.totalInvestment);
+ p.setEndDate(this.endDate);
+ p.setStartDate(this.startDate);
+ p.setBuildType(this.buildType);
+ p.setProjectName(this.projectName);
+ p.setContent(this.content);
+ p.setIsDel(0l);
+ return p;
+ }
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/UrbanPlanExport.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/UrbanPlanExport.java
new file mode 100644
index 00000000..5393e17b
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/vo/UrbanPlanExport.java
@@ -0,0 +1,162 @@
+package com.yanzhu.jh.project.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+
+import java.util.Date;
+
+/**
+ * 城建项目计划
+ */
+public class UrbanPlanExport {
+ @Excel(name = "编号(不要修改)", width = 20,prompt = "不要修改修改此列")
+ private Long id;
+
+ /** 项目名称 */
+ @Excel(name = "项目名称", width = 30,align = HorizontalAlignment.LEFT)
+ private String projectName;
+
+ /** 建设规模及主要建设内容 */
+ @Excel(name = "建设规模及主要工程内容", width = 40,align = HorizontalAlignment.LEFT)
+ private String content;
+
+ /** 建设性质 */
+ @Excel(name = "建设性质(新建/续建/前期)")
+ private String buildType;
+
+ /** 包抓部门 */
+ @Excel(name = "包抓部门")
+ private String dept;
+
+ /** 开工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开工时限", dateFormat = "yyyy.MM")
+ private Date startDate;
+
+ /** 完工日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "建成时限", dateFormat = "yyyy.MM")
+ private Date endDate;
+
+ /** 总投资(万元) */
+ @Excel(name = "总投资(万元)")
+ private Long totalInvestment;
+
+ /** 年度投资(万元) */
+ @Excel(name = "年度投资(万元)")
+ private Long yearInvestment;
+
+ public static UrbanPlanExport convert(SurProjectPlan it) {
+ UrbanPlanExport p=new UrbanPlanExport();
+ p.id=it.getId();
+ p.buildType=it.getBuildType();
+ p.content=it.getContent();
+ p.dept=it.getDept();
+ p.endDate=it.getEndDate();
+ p.startDate=it.getStartDate();
+ p.projectName=it.getProjectName();
+ p.totalInvestment=it.getTotalInvestment();
+ p.yearInvestment=it.getYearInvestment();
+ return p;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getBuildType() {
+ return buildType;
+ }
+
+ public void setBuildType(String buildType) {
+ this.buildType = buildType;
+ }
+
+ public String getDept() {
+ return dept;
+ }
+
+ public void setDept(String dept) {
+ this.dept = dept;
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Date startDate) {
+ this.startDate = startDate;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(Date endDate) {
+ this.endDate = endDate;
+ }
+
+ public Long getTotalInvestment() {
+ return totalInvestment;
+ }
+
+ public void setTotalInvestment(Long totalInvestment) {
+ this.totalInvestment = totalInvestment;
+ }
+
+ public Long getYearInvestment() {
+ return yearInvestment;
+ }
+
+ public void setYearInvestment(Long yearInvestment) {
+ this.yearInvestment = yearInvestment;
+ }
+
+ public void setValue(SurProjectPlan it) {
+ it.setContent(this.content);
+ it.setDept(this.dept);
+ it.setProjectName(this.projectName);
+ it.setBuildType(this.buildType);
+ it.setStartDate(this.startDate);
+ it.setEndDate(this.endDate);
+ it.setTotalInvestment(this.totalInvestment);
+ it.setYearInvestment(this.yearInvestment);
+ }
+
+ public SurProjectPlan toPlan() {
+ SurProjectPlan p=new SurProjectPlan();
+ p.setPlanType(0l);
+ p.setYearInvestment(this.yearInvestment);
+ p.setDept(this.dept);
+ p.setTotalInvestment(this.totalInvestment);
+ p.setEndDate(this.endDate);
+ p.setStartDate(this.startDate);
+ p.setBuildType(this.buildType);
+ p.setProjectName(this.projectName);
+ p.setContent(this.content);
+ p.setIsDel(0l);
+ return p;
+ }
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectPlanMapper.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectPlanMapper.java
new file mode 100644
index 00000000..3b75d45c
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectPlanMapper.java
@@ -0,0 +1,61 @@
+package com.yanzhu.jh.project.mapper;
+
+import java.util.List;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+
+/**
+ * 项目跟进计划Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-09-07
+ */
+public interface SurProjectPlanMapper
+{
+ /**
+ * 查询项目跟进计划
+ *
+ * @param id 项目跟进计划主键
+ * @return 项目跟进计划
+ */
+ public SurProjectPlan selectSurProjectPlanById(Long id);
+
+ /**
+ * 查询项目跟进计划列表
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 项目跟进计划集合
+ */
+ public List selectSurProjectPlanList(SurProjectPlan surProjectPlan);
+
+ /**
+ * 新增项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ public int insertSurProjectPlan(SurProjectPlan surProjectPlan);
+
+ /**
+ * 修改项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ public int updateSurProjectPlan(SurProjectPlan surProjectPlan);
+
+ /**
+ * 删除项目跟进计划
+ *
+ * @param id 项目跟进计划主键
+ * @return 结果
+ */
+ public int deleteSurProjectPlanById(Long id);
+
+ /**
+ * 批量删除项目跟进计划
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteSurProjectPlanByIds(Long[] ids);
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectPlanService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectPlanService.java
new file mode 100644
index 00000000..d35cf8e8
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectPlanService.java
@@ -0,0 +1,67 @@
+package com.yanzhu.jh.project.service;
+
+import java.util.List;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+import com.yanzhu.jh.project.domain.vo.MajorPlanExport;
+import com.yanzhu.jh.project.domain.vo.UrbanPlanExport;
+
+/**
+ * 项目跟进计划Service接口
+ *
+ * @author ruoyi
+ * @date 2023-09-07
+ */
+public interface ISurProjectPlanService
+{
+ /**
+ * 查询项目跟进计划
+ *
+ * @param id 项目跟进计划主键
+ * @return 项目跟进计划
+ */
+ public SurProjectPlan selectSurProjectPlanById(Long id);
+
+ /**
+ * 查询项目跟进计划列表
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 项目跟进计划集合
+ */
+ public List selectSurProjectPlanList(SurProjectPlan surProjectPlan);
+
+ /**
+ * 新增项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ public int insertSurProjectPlan(SurProjectPlan surProjectPlan);
+
+ /**
+ * 修改项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ public int updateSurProjectPlan(SurProjectPlan surProjectPlan);
+
+ /**
+ * 批量删除项目跟进计划
+ *
+ * @param ids 需要删除的项目跟进计划主键集合
+ * @return 结果
+ */
+ public int deleteSurProjectPlanByIds(Long[] ids);
+
+ /**
+ * 删除项目跟进计划信息
+ *
+ * @param id 项目跟进计划主键
+ * @return 结果
+ */
+ public int deleteSurProjectPlanById(Long id);
+
+ public int importUrbanPlan(List list);
+
+ public int importMajorPlan(List list);
+}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectPlanServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectPlanServiceImpl.java
new file mode 100644
index 00000000..43d959da
--- /dev/null
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectPlanServiceImpl.java
@@ -0,0 +1,150 @@
+package com.yanzhu.jh.project.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import com.yanzhu.jh.project.domain.vo.MajorPlanExport;
+import com.yanzhu.jh.project.domain.vo.UrbanPlanExport;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.yanzhu.jh.project.mapper.SurProjectPlanMapper;
+import com.yanzhu.jh.project.domain.SurProjectPlan;
+import com.yanzhu.jh.project.service.ISurProjectPlanService;
+import com.ruoyi.common.utils.SecurityUtils;
+/**
+ * 项目跟进计划Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-09-07
+ */
+@Service
+public class SurProjectPlanServiceImpl implements ISurProjectPlanService
+{
+ @Autowired
+ private SurProjectPlanMapper surProjectPlanMapper;
+
+ /**
+ * 查询项目跟进计划
+ *
+ * @param id 项目跟进计划主键
+ * @return 项目跟进计划
+ */
+ @Override
+ public SurProjectPlan selectSurProjectPlanById(Long id)
+ {
+ return surProjectPlanMapper.selectSurProjectPlanById(id);
+ }
+
+ /**
+ * 查询项目跟进计划列表
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 项目跟进计划
+ */
+ @Override
+ public List selectSurProjectPlanList(SurProjectPlan surProjectPlan)
+ {
+ return surProjectPlanMapper.selectSurProjectPlanList(surProjectPlan);
+ }
+
+ /**
+ * 新增项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ @Override
+ public int insertSurProjectPlan(SurProjectPlan surProjectPlan)
+ {
+ surProjectPlan.setCreateBy(SecurityUtils.getUsername());
+ surProjectPlan.setCreateTime(DateUtils.getNowDate());
+ return surProjectPlanMapper.insertSurProjectPlan(surProjectPlan);
+ }
+
+ /**
+ * 修改项目跟进计划
+ *
+ * @param surProjectPlan 项目跟进计划
+ * @return 结果
+ */
+ @Override
+ public int updateSurProjectPlan(SurProjectPlan surProjectPlan)
+ {
+ surProjectPlan.setUpdateBy(SecurityUtils.getUsername());
+ surProjectPlan.setUpdateTime(DateUtils.getNowDate());
+ return surProjectPlanMapper.updateSurProjectPlan(surProjectPlan);
+ }
+
+ /**
+ * 批量删除项目跟进计划
+ *
+ * @param ids 需要删除的项目跟进计划主键
+ * @return 结果
+ */
+ @Override
+ public int deleteSurProjectPlanByIds(Long[] ids)
+ {
+ return surProjectPlanMapper.deleteSurProjectPlanByIds(ids);
+ }
+
+ /**
+ * 删除项目跟进计划信息
+ *
+ * @param id 项目跟进计划主键
+ * @return 结果
+ */
+ @Override
+ public int deleteSurProjectPlanById(Long id)
+ {
+ return surProjectPlanMapper.deleteSurProjectPlanById(id);
+ }
+
+ @Override
+ public int importUrbanPlan(List list) {
+ SurProjectPlan where=new SurProjectPlan();
+ where.setPlanType(0l);
+ List oldList=selectSurProjectPlanList(where);
+ int i=0;
+ for(;i list) {
+ SurProjectPlan where=new SurProjectPlan();
+ where.setPlanType(1l);
+ List oldList=selectSurProjectPlanList(where);
+ int i=0;
+ for(;i
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_name, content, build_type, dept, start_date, end_date, total_investment, year_investment, plan_type, remark, is_del, create_by, create_time, update_by, update_time from sur_project_plan
+
+
+
+
+
+
+
+ insert into sur_project_plan
+
+ project_name,
+ content,
+ build_type,
+ dept,
+ start_date,
+ end_date,
+ total_investment,
+ year_investment,
+ plan_type,
+ remark,
+ is_del,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{projectName},
+ #{content},
+ #{buildType},
+ #{dept},
+ #{startDate},
+ #{endDate},
+ #{totalInvestment},
+ #{yearInvestment},
+ #{planType},
+ #{remark},
+ #{isDel},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update sur_project_plan
+
+ project_name = #{projectName},
+ content = #{content},
+ build_type = #{buildType},
+ dept = #{dept},
+ start_date = #{startDate},
+ end_date = #{endDate},
+ total_investment = #{totalInvestment},
+ year_investment = #{yearInvestment},
+ plan_type = #{planType},
+ remark = #{remark},
+ is_del = #{isDel},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where id = #{id}
+
+
+
+ delete from sur_project_plan where id = #{id}
+
+
+
+ delete from sur_project_plan where id in
+
+ #{id}
+
+
+
\ No newline at end of file