From 3ef4149d834fcf5becae3d40900e0a97e207aff1 Mon Sep 17 00:00:00 2001
From: chenhao <852066789@qq.com>
Date: Fri, 30 May 2025 10:10:24 +0800
Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E6=B7=BB=E5=8A=A0=E9=A1=B9?=
=?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增项目管理相关的 HTML 模板文件
- 实现项目管理的前端页面逻辑
- 添加项目管理的后端接口和服务
- 集成项目管理到现有的系统中
---
.../templates/manage/delivery/delivery.html | 4 +
.../resources/templates/project/info/add.html | 197 +++++++++++++++
.../templates/project/info/edit.html | 198 +++++++++++++++
.../templates/project/info/project.html | 238 ++++++++++++++++++
.../sip/controller/ProjectInfoController.java | 128 ++++++++++
.../com/ruoyi/sip/domain/ProjectInfo.java | 122 +++++++++
.../ruoyi/sip/domain/ProjectOperateLog.java | 100 ++++++++
.../ruoyi/sip/domain/ProjectProductInfo.java | 41 +++
.../ruoyi/sip/domain/ProjectWorkProgress.java | 43 ++++
.../ruoyi/sip/mapper/ProjectInfoMapper.java | 63 +++++
.../sip/mapper/ProjectOperateLogMapper.java | 63 +++++
.../sip/mapper/ProjectProductInfoMapper.java | 65 +++++
.../sip/mapper/ProjectWorkProgressMapper.java | 66 +++++
.../sip/service/IProjectInfoService.java | 61 +++++
.../service/IProjectOperateLogService.java | 63 +++++
.../service/IProjectProductInfoService.java | 65 +++++
.../service/IProjectWorkProgressService.java | 65 +++++
.../service/impl/OrderInfoServiceImpl.java | 4 +-
.../service/impl/ProjectInfoServiceImpl.java | 212 ++++++++++++++++
.../impl/ProjectOperateLogServiceImpl.java | 100 ++++++++
.../impl/ProjectProductInfoServiceImpl.java | 113 +++++++++
.../impl/ProjectWorkProgressServiceImpl.java | 105 ++++++++
.../mapper/manage/OrderDeliveryMapper.xml | 1 +
.../mapper/sip/ProjectInfoMapper.xml | 178 +++++++++++++
.../mapper/sip/ProjectOperateLogMapper.xml | 85 +++++++
.../mapper/sip/ProjectProductInfoMapper.xml | 86 +++++++
.../mapper/sip/ProjectWorkProgressMapper.xml | 87 +++++++
27 files changed, 2550 insertions(+), 3 deletions(-)
create mode 100644 ruoyi-admin/src/main/resources/templates/project/info/add.html
create mode 100644 ruoyi-admin/src/main/resources/templates/project/info/edit.html
create mode 100644 ruoyi-admin/src/main/resources/templates/project/info/project.html
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOperateLog.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectProductInfo.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectWorkProgress.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOperateLogMapper.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectProductInfoMapper.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectWorkProgressMapper.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOperateLogService.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectProductInfoService.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectWorkProgressService.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOperateLogServiceImpl.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java
create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectWorkProgressServiceImpl.java
create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/ProjectOperateLogMapper.xml
create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/ProjectProductInfoMapper.xml
create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/ProjectWorkProgressMapper.xml
diff --git a/ruoyi-admin/src/main/resources/templates/manage/delivery/delivery.html b/ruoyi-admin/src/main/resources/templates/manage/delivery/delivery.html
index d9bec81c..32368fe2 100644
--- a/ruoyi-admin/src/main/resources/templates/manage/delivery/delivery.html
+++ b/ruoyi-admin/src/main/resources/templates/manage/delivery/delivery.html
@@ -36,6 +36,10 @@
+
+
+
+
搜索
重置
diff --git a/ruoyi-admin/src/main/resources/templates/project/info/add.html b/ruoyi-admin/src/main/resources/templates/project/info/add.html
new file mode 100644
index 00000000..3ccb4a91
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/info/add.html
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/info/edit.html b/ruoyi-admin/src/main/resources/templates/project/info/edit.html
new file mode 100644
index 00000000..09bdba61
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/info/edit.html
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/info/project.html b/ruoyi-admin/src/main/resources/templates/project/info/project.html
new file mode 100644
index 00000000..30acee3c
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/info/project.html
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java
new file mode 100644
index 00000000..f6ac5961
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectInfoController.java
@@ -0,0 +1,128 @@
+package com.ruoyi.sip.controller;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.sip.domain.ProjectInfo;
+import com.ruoyi.sip.service.IProjectInfoService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 项目管理Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Controller
+@RequestMapping("/sip/project")
+public class ProjectInfoController extends BaseController
+{
+ private String prefix = "/project/info";
+
+ @Autowired
+ private IProjectInfoService projectInfoService;
+
+ @RequiresPermissions("sip:project:view")
+ @GetMapping()
+ public String product()
+ {
+ return prefix + "/project";
+ }
+
+ /**
+ * 查询项目管理列表
+ */
+ @RequiresPermissions("sip:project:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(ProjectInfo projectInfo)
+ {
+ startPage();
+ List list = projectInfoService.selectProjectInfoList(projectInfo);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出项目管理列表
+ */
+ @RequiresPermissions("sip:project:export")
+ @Log(title = "项目管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(ProjectInfo projectInfo)
+ {
+ List list = projectInfoService.selectProjectInfoList(projectInfo);
+ ExcelUtil util = new ExcelUtil(ProjectInfo.class);
+ return util.exportExcel(list, "项目管理数据");
+ }
+
+ /**
+ * 新增项目管理
+ */
+ @RequiresPermissions("sip:project:add")
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存项目管理
+ */
+ @RequiresPermissions("sip:project:add")
+ @Log(title = "项目管理", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(ProjectInfo projectInfo)
+ {
+ return toAjax(projectInfoService.insertProjectInfo(projectInfo));
+ }
+
+ /**
+ * 修改项目管理
+ */
+ @RequiresPermissions("sip:project:edit")
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") Long id, ModelMap mmap)
+ {
+ ProjectInfo projectInfo = projectInfoService.selectProjectInfoById(id);
+ mmap.put("projectInfo", projectInfo);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存项目管理
+ */
+ @RequiresPermissions("sip:project:edit")
+ @Log(title = "项目管理", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(ProjectInfo projectInfo)
+ {
+ return toAjax(projectInfoService.updateProjectInfo(projectInfo));
+ }
+
+ /**
+ * 删除项目管理
+ */
+ @RequiresPermissions("sip:project:remove")
+ @Log(title = "项目管理", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(projectInfoService.deleteProjectInfoByIds(ids));
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
new file mode 100644
index 00000000..51490739
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
@@ -0,0 +1,122 @@
+package com.ruoyi.sip.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+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;
+
+/**
+ * 项目管理对象 project_info
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Data
+public class ProjectInfo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 项目编码 */
+ @Excel(name = "项目编码")
+ private String projectCode;
+
+ /** 项目名称 */
+ @Excel(name = "项目名称")
+ private String projectName;
+
+ /** 客户code */
+ @Excel(name = "客户code")
+ private String customerCode;
+
+ /** 客户名称 */
+ @Excel(name = "客户名称")
+ private String customerName;
+
+ /** 行业 */
+ @Excel(name = "行业")
+ private String industryType;
+
+ /** 属地 */
+ @Excel(name = "属地")
+ private String province;
+
+ /** 项目阶段 */
+ @Excel(name = "项目阶段")
+ private String projectStage;
+
+ /** 项目把握度 */
+ @Excel(name = "项目把握度")
+ private String projectGraspDegree;
+
+ /** 汇智支撑人员id */
+ @Excel(name = "汇智支撑人员id")
+ private String hzSupportUser;
+
+ /** 运作机构 */
+ @Excel(name = "运作机构")
+ private String operateInstitution;
+
+ /** 代理商code */
+ @Excel(name = "代理商code")
+ private String partnerCode;
+
+ /** 联系方式 */
+ @Excel(name = "联系方式")
+ private String contactWay;
+
+ /** 预计金额 */
+ @Excel(name = "预计金额")
+ private BigDecimal estimatedAmount;
+
+ /** 币种 */
+ @Excel(name = "币种")
+ private String currencyType;
+
+ /** 预计下单时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @Excel(name = "预计下单时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date estimatedOrderTime;
+
+ /** 预计发货时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @Excel(name = "预计发货时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date estimatedDeliverTime;
+
+ /** 竞争对手 */
+ @Excel(name = "竞争对手")
+ private String competitor;
+
+ /** 是否国产 */
+ @Excel(name = "是否国产")
+ private String countryProduct;
+
+ /** 服务器配置 */
+ @Excel(name = "服务器配置")
+ private String serverConfiguration;
+
+ /** 关键技术问题 */
+ @Excel(name = "关键技术问题")
+ private String keyProblem;
+
+ /** 项目描述 */
+ @Excel(name = "项目描述")
+ private String projectDesc;
+ /** 软件项目产品信息 */
+ private List softwareProjectProductInfoList;
+ /** 硬件项目产品信息 */
+ private List hardwareProjectProductInfoList;
+ /** 项目操作日志信息 */
+ private List projectOperateLogList;
+ /** 项目工作进度信息 */
+ private List projectWorkProgressList;
+
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOperateLog.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOperateLog.java
new file mode 100644
index 00000000..27ae65eb
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOperateLog.java
@@ -0,0 +1,100 @@
+package com.ruoyi.sip.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;
+
+/**
+ * 项目操作日志对象 project_operate_log
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public class ProjectOperateLog extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 操作内容 */
+ @Excel(name = "操作内容")
+ private String operateLog;
+
+ /** 操作人员 */
+ @Excel(name = "操作人员")
+ private String operateUser;
+
+ /** 操作时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date operateTime;
+
+ /** 项目id */
+ @Excel(name = "项目id")
+ private Long projectId;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setOperateLog(String operateLog)
+ {
+ this.operateLog = operateLog;
+ }
+
+ public String getOperateLog()
+ {
+ return operateLog;
+ }
+
+ public void setOperateUser(String operateUser)
+ {
+ this.operateUser = operateUser;
+ }
+
+ public String getOperateUser()
+ {
+ return operateUser;
+ }
+
+ public void setOperateTime(Date operateTime)
+ {
+ this.operateTime = operateTime;
+ }
+
+ public Date getOperateTime()
+ {
+ return operateTime;
+ }
+
+ public void setProjectId(Long projectId)
+ {
+ this.projectId = projectId;
+ }
+
+ public Long getProjectId()
+ {
+ return projectId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("operateLog", getOperateLog())
+ .append("operateUser", getOperateUser())
+ .append("operateTime", getOperateTime())
+ .append("projectId", getProjectId())
+ .toString();
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectProductInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectProductInfo.java
new file mode 100644
index 00000000..08e6c9a8
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectProductInfo.java
@@ -0,0 +1,41 @@
+package com.ruoyi.sip.domain;
+
+import java.util.List;
+
+import lombok.Data;
+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;
+
+/**
+ * 项目产品信息对象 project_product_info
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Data
+public class ProjectProductInfo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 项目id */
+ @Excel(name = "项目id")
+ private Long projectId;
+
+ /** 产品编码 */
+ @Excel(name = "产品编码")
+ private String productCode;
+
+ /** 数量 */
+ @Excel(name = "数量")
+ private Long quantity;
+
+ private String type;
+
+ private String model;
+
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectWorkProgress.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectWorkProgress.java
new file mode 100644
index 00000000..b62a238f
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectWorkProgress.java
@@ -0,0 +1,43 @@
+package com.ruoyi.sip.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+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;
+
+/**
+ * 项目工作进度对象 project_work_progress
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Data
+public class ProjectWorkProgress extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 变更内容 */
+ @Excel(name = "变更内容")
+ private String workContent;
+
+ /** 更新人 */
+ @Excel(name = "更新人")
+ private String workUser;
+
+ /** 更新时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date workTime;
+
+ /** 项目id */
+ @Excel(name = "项目id")
+ private Long projectId;
+
+ private String userName;
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java
new file mode 100644
index 00000000..2acc4f24
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectInfo;
+
+/**
+ * 项目管理Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface ProjectInfoMapper
+{
+ /**
+ * 查询项目管理
+ *
+ * @param id 项目管理主键
+ * @return 项目管理
+ */
+ public ProjectInfo selectProjectInfoById(Long id);
+
+ /**
+ * 查询项目管理列表
+ *
+ * @param projectInfo 项目管理
+ * @return 项目管理集合
+ */
+ public List selectProjectInfoList(ProjectInfo projectInfo);
+
+ /**
+ * 新增项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ public int insertProjectInfo(ProjectInfo projectInfo);
+
+ /**
+ * 修改项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ public int updateProjectInfo(ProjectInfo projectInfo);
+
+ /**
+ * 删除项目管理
+ *
+ * @param id 项目管理主键
+ * @return 结果
+ */
+ public int deleteProjectInfoById(Long id);
+
+ /**
+ * 批量删除项目管理
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteProjectInfoByIds(String[] ids);
+
+ String selectMaxProjectCode(ProjectInfo projectInfo);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOperateLogMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOperateLogMapper.java
new file mode 100644
index 00000000..68df0015
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOperateLogMapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectOperateLog;
+
+/**
+ * 项目操作日志Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface ProjectOperateLogMapper
+{
+ /**
+ * 查询项目操作日志
+ *
+ * @param id 项目操作日志主键
+ * @return 项目操作日志
+ */
+ public ProjectOperateLog selectProjectOperateLogById(Long id);
+
+ /**
+ * 查询项目操作日志列表
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 项目操作日志集合
+ */
+ public List selectProjectOperateLogList(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 新增项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ public int insertProjectOperateLog(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 修改项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ public int updateProjectOperateLog(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 删除项目操作日志
+ *
+ * @param id 项目操作日志主键
+ * @return 结果
+ */
+ public int deleteProjectOperateLogById(Long id);
+
+ /**
+ * 批量删除项目操作日志
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteProjectOperateLogByIds(String[] ids);
+
+ List selectProjectOperateLogListByProjectId(Long id);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectProductInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectProductInfoMapper.java
new file mode 100644
index 00000000..58d95b76
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectProductInfoMapper.java
@@ -0,0 +1,65 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectProductInfo;
+
+/**
+ * 项目产品信息Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface ProjectProductInfoMapper
+{
+ /**
+ * 查询项目产品信息
+ *
+ * @param id 项目产品信息主键
+ * @return 项目产品信息
+ */
+ public ProjectProductInfo selectProjectProductInfoById(Long id);
+
+ /**
+ * 查询项目产品信息列表
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 项目产品信息集合
+ */
+ public List selectProjectProductInfoList(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 新增项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ public int insertProjectProductInfo(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 修改项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ public int updateProjectProductInfo(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 删除项目产品信息
+ *
+ * @param id 项目产品信息主键
+ * @return 结果
+ */
+ public int deleteProjectProductInfoById(Long id);
+
+ /**
+ * 批量删除项目产品信息
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteProjectProductInfoByIds(String[] ids);
+
+ List selectProjectProductInfoListByProjectId(Long projectId);
+
+ void saveBatch(List addList);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectWorkProgressMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectWorkProgressMapper.java
new file mode 100644
index 00000000..71de2d18
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectWorkProgressMapper.java
@@ -0,0 +1,66 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectWorkProgress;
+
+/**
+ * 项目工作进度Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface ProjectWorkProgressMapper
+{
+ /**
+ * 查询项目工作进度
+ *
+ * @param id 项目工作进度主键
+ * @return 项目工作进度
+ */
+ public ProjectWorkProgress selectProjectWorkProgressById(Long id);
+
+ /**
+ * 查询项目工作进度列表
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 项目工作进度集合
+ */
+ public List selectProjectWorkProgressList(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 新增项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ public int insertProjectWorkProgress(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 修改项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ public int updateProjectWorkProgress(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 删除项目工作进度
+ *
+ * @param id 项目工作进度主键
+ * @return 结果
+ */
+ public int deleteProjectWorkProgressById(Long id);
+
+ /**
+ * 批量删除项目工作进度
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteProjectWorkProgressByIds(String[] ids);
+
+ List selectProjectWorkProgressListByProjectId(Long projectId);
+
+ void insertIgnoreBatch(List projectWorkProgressList);
+
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java
new file mode 100644
index 00000000..dd477015
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectInfoService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectInfo;
+
+/**
+ * 项目管理Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface IProjectInfoService
+{
+ /**
+ * 查询项目管理
+ *
+ * @param id 项目管理主键
+ * @return 项目管理
+ */
+ public ProjectInfo selectProjectInfoById(Long id);
+
+ /**
+ * 查询项目管理列表
+ *
+ * @param projectInfo 项目管理
+ * @return 项目管理集合
+ */
+ public List selectProjectInfoList(ProjectInfo projectInfo);
+
+ /**
+ * 新增项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ public int insertProjectInfo(ProjectInfo projectInfo);
+
+ /**
+ * 修改项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ public int updateProjectInfo(ProjectInfo projectInfo);
+
+ /**
+ * 批量删除项目管理
+ *
+ * @param ids 需要删除的项目管理主键集合
+ * @return 结果
+ */
+ public int deleteProjectInfoByIds(String ids);
+
+ /**
+ * 删除项目管理信息
+ *
+ * @param id 项目管理主键
+ * @return 结果
+ */
+ public int deleteProjectInfoById(Long id);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOperateLogService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOperateLogService.java
new file mode 100644
index 00000000..1878e076
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOperateLogService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectOperateLog;
+
+/**
+ * 项目操作日志Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface IProjectOperateLogService
+{
+ /**
+ * 查询项目操作日志
+ *
+ * @param id 项目操作日志主键
+ * @return 项目操作日志
+ */
+ public ProjectOperateLog selectProjectOperateLogById(Long id);
+
+ /**
+ * 查询项目操作日志列表
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 项目操作日志集合
+ */
+ public List selectProjectOperateLogList(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 新增项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ public int insertProjectOperateLog(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 修改项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ public int updateProjectOperateLog(ProjectOperateLog projectOperateLog);
+
+ /**
+ * 批量删除项目操作日志
+ *
+ * @param ids 需要删除的项目操作日志主键集合
+ * @return 结果
+ */
+ public int deleteProjectOperateLogByIds(String ids);
+
+ /**
+ * 删除项目操作日志信息
+ *
+ * @param id 项目操作日志主键
+ * @return 结果
+ */
+ public int deleteProjectOperateLogById(Long id);
+
+ List selectProjectOperateLogListByProjectId(Long id);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectProductInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectProductInfoService.java
new file mode 100644
index 00000000..971ecaee
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectProductInfoService.java
@@ -0,0 +1,65 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectProductInfo;
+
+/**
+ * 项目产品信息Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface IProjectProductInfoService
+{
+ /**
+ * 查询项目产品信息
+ *
+ * @param id 项目产品信息主键
+ * @return 项目产品信息
+ */
+ public ProjectProductInfo selectProjectProductInfoById(Long id);
+
+ /**
+ * 查询项目产品信息列表
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 项目产品信息集合
+ */
+ public List selectProjectProductInfoList(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 新增项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ public int insertProjectProductInfo(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 修改项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ public int updateProjectProductInfo(ProjectProductInfo projectProductInfo);
+
+ /**
+ * 批量删除项目产品信息
+ *
+ * @param ids 需要删除的项目产品信息主键集合
+ * @return 结果
+ */
+ public int deleteProjectProductInfoByIds(String ids);
+
+ /**
+ * 删除项目产品信息信息
+ *
+ * @param id 项目产品信息主键
+ * @return 结果
+ */
+ public int deleteProjectProductInfoById(Long id);
+
+ List selectProjectProductInfoListByProjectId(Long projectId);
+
+ void saveBatch(List addList);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectWorkProgressService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectWorkProgressService.java
new file mode 100644
index 00000000..2c84bd61
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectWorkProgressService.java
@@ -0,0 +1,65 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectWorkProgress;
+
+/**
+ * 项目工作进度Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+public interface IProjectWorkProgressService
+{
+ /**
+ * 查询项目工作进度
+ *
+ * @param id 项目工作进度主键
+ * @return 项目工作进度
+ */
+ public ProjectWorkProgress selectProjectWorkProgressById(Long id);
+
+ /**
+ * 查询项目工作进度列表
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 项目工作进度集合
+ */
+ public List selectProjectWorkProgressList(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 新增项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ public int insertProjectWorkProgress(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 修改项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ public int updateProjectWorkProgress(ProjectWorkProgress projectWorkProgress);
+
+ /**
+ * 批量删除项目工作进度
+ *
+ * @param ids 需要删除的项目工作进度主键集合
+ * @return 结果
+ */
+ public int deleteProjectWorkProgressByIds(String ids);
+
+ /**
+ * 删除项目工作进度信息
+ *
+ * @param id 项目工作进度主键
+ * @return 结果
+ */
+ public int deleteProjectWorkProgressById(Long id);
+
+ List selectProjectWorkProgressListByProjectId(Long projectId);
+
+ void insertIgnoreBatch(List projectWorkProgressList);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java
index 36cd0862..9426fef3 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java
@@ -279,9 +279,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
}
BigDecimal amount = orderList.getPrice().multiply(new BigDecimal(orderList.getQuantity()));
- if (orderList.getDiscount()!=null){
- amount = amount.multiply(orderList.getDiscount()).setScale(2, RoundingMode.HALF_UP);
- }
+ amount = amount.multiply(orderList.getDiscount()).setScale(2, RoundingMode.HALF_UP);
orderList.setAmount(amount);
}
orderInfoMapper.deleteOrderListByOrderId(orderId);
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
new file mode 100644
index 00000000..2f493b84
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
@@ -0,0 +1,212 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.collection.CollUtil;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.sip.domain.*;
+import com.ruoyi.sip.service.IProjectOperateLogService;
+import com.ruoyi.sip.service.IProjectProductInfoService;
+import com.ruoyi.sip.service.IProjectWorkProgressService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.ProjectInfoMapper;
+import com.ruoyi.sip.service.IProjectInfoService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 项目管理Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Service
+public class ProjectInfoServiceImpl implements IProjectInfoService {
+ @Autowired
+ private ProjectInfoMapper projectInfoMapper;
+
+ @Autowired
+ private IProjectProductInfoService productInfoService;
+ @Autowired
+ private IProjectWorkProgressService workProgressService;
+ @Autowired
+ private IProjectOperateLogService operateLogService;
+ private static final String PROJECT_CODE_PREFIX = "V";
+ private static final Integer PROJECT_CODE_LENGTH = 5;
+
+ /**
+ * 查询项目管理
+ *
+ * @param id 项目管理主键
+ * @return 项目管理
+ */
+ @Override
+ public ProjectInfo selectProjectInfoById(Long id) {
+ ProjectInfo projectInfo = projectInfoMapper.selectProjectInfoById(id);
+ //查询产品信息
+ List projectProductInfos = productInfoService.selectProjectProductInfoListByProjectId(projectInfo.getId());
+ Map> productListMap = projectProductInfos.stream().collect(Collectors.groupingBy(ProjectProductInfo::getType, Collectors.toList()));
+ projectInfo.setHardwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.HARDWARE.getType()));
+ projectInfo.setSoftwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.SOFTWARE.getType()));
+ //查询变更记录信息
+ List projectWorkProgresses = workProgressService.selectProjectWorkProgressListByProjectId((projectInfo.getId()));
+ projectInfo.setProjectWorkProgressList(projectWorkProgresses);
+ //查询操作日志信息
+ List projectOperateLogs = operateLogService.selectProjectOperateLogListByProjectId(projectInfo.getId());
+ projectInfo.setProjectOperateLogList(projectOperateLogs);
+ return projectInfo;
+ }
+
+ /**
+ * 查询项目管理列表
+ *
+ * @param projectInfo 项目管理
+ * @return 项目管理
+ */
+ @Override
+ public List selectProjectInfoList(ProjectInfo projectInfo) {
+ return projectInfoMapper.selectProjectInfoList(projectInfo);
+ }
+
+ /**
+ * 新增项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ @Override
+ public int insertProjectInfo(ProjectInfo projectInfo) {
+ //生成项目编码
+ String s = projectInfoMapper.selectMaxProjectCode(projectInfo);
+ if (s == null) {
+ projectInfo.setProjectCode(PROJECT_CODE_PREFIX + "00001");
+ }else{
+ projectInfo.setProjectCode(PROJECT_CODE_PREFIX + String.format("%0" + PROJECT_CODE_LENGTH + "d",
+ Integer.parseInt(s.substring(PROJECT_CODE_PREFIX.length())) + 1));
+ }
+ projectInfo.setCreateTime(DateUtils.getNowDate());
+ projectInfo.setCreateBy(ShiroUtils.getUserId().toString());
+ int i = projectInfoMapper.insertProjectInfo(projectInfo);
+ //插入产品信息
+ List hardwareProjectProductInfoList = projectInfo.getHardwareProjectProductInfoList();
+ List softwareProjectProductInfoList = projectInfo.getSoftwareProjectProductInfoList();
+ List addList=new ArrayList<>();
+ addList.addAll(hardwareProjectProductInfoList);
+ addList.addAll(softwareProjectProductInfoList);
+ if (CollUtil.isNotEmpty(addList)){
+ for (ProjectProductInfo projectProductInfo : addList) {
+ projectProductInfo.setProjectId(projectInfo.getId());
+ }
+ productInfoService.saveBatch(addList);
+ }
+ //插入变更记录信息
+ List projectWorkProgressList = projectInfo.getProjectWorkProgressList();
+ if (CollUtil.isNotEmpty(projectWorkProgressList)) {
+ for (ProjectWorkProgress workProgress : projectWorkProgressList) {
+ workProgress.setProjectId(projectInfo.getId());
+ }
+ workProgressService.insertIgnoreBatch(projectWorkProgressList);
+ }
+ return i;
+ }
+
+ /**
+ * 修改项目管理
+ *
+ * @param projectInfo 项目管理
+ * @return 结果
+ */
+ @Override
+ public int updateProjectInfo(ProjectInfo projectInfo) {
+ // 获取更新前的项目信息
+ ProjectInfo oldProjectInfo = projectInfoMapper.selectProjectInfoById(projectInfo.getId());
+
+ // 更新项目信息
+ projectInfo.setUpdateTime(DateUtils.getNowDate());
+ int result = projectInfoMapper.updateProjectInfo(projectInfo);
+
+ // 记录操作日志
+ StringBuilder logContent = new StringBuilder();
+ int logIndex = 1;
+
+ // 比较字段差异
+ compareField(logContent, logIndex++, "项目名称", oldProjectInfo.getProjectName(), projectInfo.getProjectName());
+ compareField(logContent, logIndex++, "客户名称", oldProjectInfo.getCustomerName(), projectInfo.getCustomerName());
+ compareField(logContent, logIndex++, "行业", oldProjectInfo.getIndustryType(), projectInfo.getIndustryType());
+ compareField(logContent, logIndex++, "属地", oldProjectInfo.getProvince(), projectInfo.getProvince());
+ compareField(logContent, logIndex++, "项目阶段", oldProjectInfo.getProjectStage(), projectInfo.getProjectStage());
+ compareField(logContent, logIndex++, "项目把握度", oldProjectInfo.getProjectGraspDegree(), projectInfo.getProjectGraspDegree());
+ compareField(logContent, logIndex++, "汇智支撑人员", oldProjectInfo.getHzSupportUser(), projectInfo.getHzSupportUser());
+ compareField(logContent, logIndex++, "运作机构", oldProjectInfo.getOperateInstitution(), projectInfo.getOperateInstitution());
+ compareField(logContent, logIndex++, "代理商", oldProjectInfo.getOperateInstitution(), projectInfo.getOperateInstitution());
+ compareField(logContent, logIndex++, "竞争对手", oldProjectInfo.getCompetitor(), projectInfo.getCompetitor());
+// compareField(logContent, logIndex++, "项目类型", oldProjectInfo.getProjectType(), projectInfo.getProjectType());
+// compareField(logContent, logIndex++, "项目状态", oldProjectInfo.getProjectStatus(), projectInfo.getProjectStatus());
+// compareField(logContent, logIndex++, "项目经理", oldProjectInfo.getProjectManager(), projectInfo.getProjectManager());
+// compareField(logContent, logIndex++, "预期收益", oldProjectInfo.getExpectedRevenue(), projectInfo.getExpectedRevenue());
+// compareField(logContent, logIndex++, "实际收益", oldProjectInfo.getActualRevenue(), projectInfo.getActualRevenue());
+// compareField(logContent, logIndex++, "开始日期", oldProjectInfo.getStartDate(), projectInfo.getStartDate());
+// compareField(logContent, logIndex++, "结束日期", oldProjectInfo.getEndDate(), projectInfo.getEndDate());
+// compareField(logContent, logIndex++, "风险等级", oldProjectInfo.getRiskLevel(), projectInfo.getRiskLevel());
+// compareField(logContent, logIndex++, "备注", oldProjectInfo.getRemarks(), projectInfo.getRemarks());
+
+ // 插入操作日志
+ if (logContent.length() > 0) {
+ ProjectOperateLog operateLog = new ProjectOperateLog();
+ operateLog.setProjectId(projectInfo.getId());
+ operateLog.setOperateLog(logContent.toString());
+ operateLog.setOperateTime(DateUtils.getNowDate());
+ operateLog.setOperateUser(ShiroUtils.getUserId().toString());
+ operateLogService.insertProjectOperateLog(operateLog);
+ }
+
+ return result;
+ }
+
+ /**
+ * 比较字段并生成日志内容
+ *
+ * @param logContent 日志内容构建器
+ * @param index 日志索引
+ * @param fieldName 字段名称
+ * @param oldValue 旧值
+ * @param newValue 新值
+ */
+ private void compareField(StringBuilder logContent, int index, String fieldName, Object oldValue, Object newValue) {
+ if (!oldValue.equals(newValue)) {
+ logContent.append(index).append(".")
+ .append(fieldName)
+ .append("由‘")
+ .append(oldValue)
+ .append("’变更为‘")
+ .append(newValue)
+ .append("’\n");
+ }
+ }
+
+ /**
+ * 批量删除项目管理
+ *
+ * @param ids 需要删除的项目管理主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectInfoByIds(String ids) {
+ return projectInfoMapper.deleteProjectInfoByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除项目管理信息
+ *
+ * @param id 项目管理主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectInfoById(Long id) {
+ return projectInfoMapper.deleteProjectInfoById(id);
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOperateLogServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOperateLogServiceImpl.java
new file mode 100644
index 00000000..070ec2c8
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOperateLogServiceImpl.java
@@ -0,0 +1,100 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.Collections;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.ProjectOperateLogMapper;
+import com.ruoyi.sip.domain.ProjectOperateLog;
+import com.ruoyi.sip.service.IProjectOperateLogService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 项目操作日志Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Service
+public class ProjectOperateLogServiceImpl implements IProjectOperateLogService
+{
+ @Autowired
+ private ProjectOperateLogMapper projectOperateLogMapper;
+
+ /**
+ * 查询项目操作日志
+ *
+ * @param id 项目操作日志主键
+ * @return 项目操作日志
+ */
+ @Override
+ public ProjectOperateLog selectProjectOperateLogById(Long id)
+ {
+ return projectOperateLogMapper.selectProjectOperateLogById(id);
+ }
+
+ /**
+ * 查询项目操作日志列表
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 项目操作日志
+ */
+ @Override
+ public List selectProjectOperateLogList(ProjectOperateLog projectOperateLog)
+ {
+ return projectOperateLogMapper.selectProjectOperateLogList(projectOperateLog);
+ }
+
+ /**
+ * 新增项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ @Override
+ public int insertProjectOperateLog(ProjectOperateLog projectOperateLog)
+ {
+ return projectOperateLogMapper.insertProjectOperateLog(projectOperateLog);
+ }
+
+ /**
+ * 修改项目操作日志
+ *
+ * @param projectOperateLog 项目操作日志
+ * @return 结果
+ */
+ @Override
+ public int updateProjectOperateLog(ProjectOperateLog projectOperateLog)
+ {
+ return projectOperateLogMapper.updateProjectOperateLog(projectOperateLog);
+ }
+
+ /**
+ * 批量删除项目操作日志
+ *
+ * @param ids 需要删除的项目操作日志主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectOperateLogByIds(String ids)
+ {
+ return projectOperateLogMapper.deleteProjectOperateLogByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除项目操作日志信息
+ *
+ * @param id 项目操作日志主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectOperateLogById(Long id)
+ {
+ return projectOperateLogMapper.deleteProjectOperateLogById(id);
+ }
+
+ @Override
+ public List selectProjectOperateLogListByProjectId(Long id) {
+ return projectOperateLogMapper.selectProjectOperateLogListByProjectId(id);
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java
new file mode 100644
index 00000000..197cb894
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.ProjectProductInfoMapper;
+import com.ruoyi.sip.domain.ProjectProductInfo;
+import com.ruoyi.sip.service.IProjectProductInfoService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 项目产品信息Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Service
+public class ProjectProductInfoServiceImpl implements IProjectProductInfoService {
+ @Autowired
+ private ProjectProductInfoMapper projectProductInfoMapper;
+
+ /**
+ * 查询项目产品信息
+ *
+ * @param id 项目产品信息主键
+ * @return 项目产品信息
+ */
+ @Override
+ public ProjectProductInfo selectProjectProductInfoById(Long id) {
+ return projectProductInfoMapper.selectProjectProductInfoById(id);
+ }
+
+ /**
+ * 查询项目产品信息列表
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 项目产品信息
+ */
+ @Override
+ public List selectProjectProductInfoList(ProjectProductInfo projectProductInfo) {
+ return projectProductInfoMapper.selectProjectProductInfoList(projectProductInfo);
+ }
+
+ /**
+ * 新增项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ @Override
+ public int insertProjectProductInfo(ProjectProductInfo projectProductInfo) {
+ return projectProductInfoMapper.insertProjectProductInfo(projectProductInfo);
+ }
+
+ /**
+ * 修改项目产品信息
+ *
+ * @param projectProductInfo 项目产品信息
+ * @return 结果
+ */
+ @Override
+ public int updateProjectProductInfo(ProjectProductInfo projectProductInfo) {
+ return projectProductInfoMapper.updateProjectProductInfo(projectProductInfo);
+ }
+
+ /**
+ * 批量删除项目产品信息
+ *
+ * @param ids 需要删除的项目产品信息主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectProductInfoByIds(String ids) {
+ return projectProductInfoMapper.deleteProjectProductInfoByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除项目产品信息信息
+ *
+ * @param id 项目产品信息主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectProductInfoById(Long id) {
+ return projectProductInfoMapper.deleteProjectProductInfoById(id);
+ }
+
+ @Override
+ public List selectProjectProductInfoListByProjectId(Long projectId) {
+ return projectProductInfoMapper.selectProjectProductInfoListByProjectId(projectId);
+ }
+
+ @Override
+ public void saveBatch(List addList) {
+ List projectProductInfos = projectProductInfoMapper.selectProjectProductInfoListByProjectId(addList.get(0).getProjectId());
+ Set idSet = addList.stream().map(ProjectProductInfo::getId).collect(Collectors.toSet());
+ String[] deleteIds = projectProductInfos.stream().filter(item -> !idSet.contains(item.getId())).map(item -> item.getId().toString()).toArray(String[]::new);
+ //删除数据
+ if (deleteIds.length > 0) {
+ projectProductInfoMapper.deleteProjectProductInfoByIds(deleteIds);
+ }
+ //新增数据
+ projectProductInfoMapper.saveBatch(addList);
+ //todo 记录变更信息
+
+
+
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectWorkProgressServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectWorkProgressServiceImpl.java
new file mode 100644
index 00000000..4c365f45
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectWorkProgressServiceImpl.java
@@ -0,0 +1,105 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.Collections;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.ProjectWorkProgressMapper;
+import com.ruoyi.sip.domain.ProjectWorkProgress;
+import com.ruoyi.sip.service.IProjectWorkProgressService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 项目工作进度Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-29
+ */
+@Service
+public class ProjectWorkProgressServiceImpl implements IProjectWorkProgressService
+{
+ @Autowired
+ private ProjectWorkProgressMapper projectWorkProgressMapper;
+
+ /**
+ * 查询项目工作进度
+ *
+ * @param id 项目工作进度主键
+ * @return 项目工作进度
+ */
+ @Override
+ public ProjectWorkProgress selectProjectWorkProgressById(Long id)
+ {
+ return projectWorkProgressMapper.selectProjectWorkProgressById(id);
+ }
+
+ /**
+ * 查询项目工作进度列表
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 项目工作进度
+ */
+ @Override
+ public List selectProjectWorkProgressList(ProjectWorkProgress projectWorkProgress)
+ {
+ return projectWorkProgressMapper.selectProjectWorkProgressList(projectWorkProgress);
+ }
+
+ /**
+ * 新增项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ @Override
+ public int insertProjectWorkProgress(ProjectWorkProgress projectWorkProgress)
+ {
+ return projectWorkProgressMapper.insertProjectWorkProgress(projectWorkProgress);
+ }
+
+ /**
+ * 修改项目工作进度
+ *
+ * @param projectWorkProgress 项目工作进度
+ * @return 结果
+ */
+ @Override
+ public int updateProjectWorkProgress(ProjectWorkProgress projectWorkProgress)
+ {
+ return projectWorkProgressMapper.updateProjectWorkProgress(projectWorkProgress);
+ }
+
+ /**
+ * 批量删除项目工作进度
+ *
+ * @param ids 需要删除的项目工作进度主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectWorkProgressByIds(String ids)
+ {
+ return projectWorkProgressMapper.deleteProjectWorkProgressByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除项目工作进度信息
+ *
+ * @param id 项目工作进度主键
+ * @return 结果
+ */
+ @Override
+ public int deleteProjectWorkProgressById(Long id)
+ {
+ return projectWorkProgressMapper.deleteProjectWorkProgressById(id);
+ }
+
+ @Override
+ public List selectProjectWorkProgressListByProjectId(Long projectId) {
+ return projectWorkProgressMapper.selectProjectWorkProgressListByProjectId(projectId);
+ }
+
+ @Override
+ public void insertIgnoreBatch(List projectWorkProgressList) {
+ projectWorkProgressMapper.insertIgnoreBatch(projectWorkProgressList);
+ }
+}
diff --git a/ruoyi-sip/src/main/resources/mapper/manage/OrderDeliveryMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/OrderDeliveryMapper.xml
index b3cf65c5..56b8d071 100644
--- a/ruoyi-sip/src/main/resources/mapper/manage/OrderDeliveryMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/manage/OrderDeliveryMapper.xml
@@ -43,6 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and t1.delivery_type = #{deliveryType}
and t1.logistics_company = #{logisticsCompany}
and t1.delivery_status = #{deliveryStatus}
+ and t2.order_name like concat('%', #{orderName},'%')
order by t1.order_id,t1.delivery_date
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
new file mode 100644
index 00000000..674e5c08
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_code, project_name, customer_code, customer_name, industry_type, province, project_stage, project_grasp_degree, hz_support_user, operate_institution, partner_code, contact_way, estimated_amount, currency_type, estimated_order_time, estimated_deliver_time, competitor, country_product, server_configuration, key_problem, project_desc, create_by, create_time, update_by, update_time from project_info
+
+
+
+
+
+
+
+
+ insert into project_info
+
+ project_code,
+ project_name,
+ customer_code,
+ customer_name,
+ industry_type,
+ province,
+ project_stage,
+ project_grasp_degree,
+ hz_support_user,
+ operate_institution,
+ partner_code,
+ contact_way,
+ estimated_amount,
+ currency_type,
+ estimated_order_time,
+ estimated_deliver_time,
+ competitor,
+ country_product,
+ server_configuration,
+ key_problem,
+ project_desc,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{projectCode},
+ #{projectName},
+ #{customerCode},
+ #{customerName},
+ #{industryType},
+ #{province},
+ #{projectStage},
+ #{projectGraspDegree},
+ #{hzSupportUser},
+ #{operateInstitution},
+ #{partnerCode},
+ #{contactWay},
+ #{estimatedAmount},
+ #{currencyType},
+ #{estimatedOrderTime},
+ #{estimatedDeliverTime},
+ #{competitor},
+ #{countryProduct},
+ #{serverConfiguration},
+ #{keyProblem},
+ #{projectDesc},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update project_info
+
+ project_code = #{projectCode},
+ project_name = #{projectName},
+ customer_code = #{customerCode},
+ customer_name = #{customerName},
+ industry_type = #{industryType},
+ province = #{province},
+ project_stage = #{projectStage},
+ project_grasp_degree = #{projectGraspDegree},
+ hz_support_user = #{hzSupportUser},
+ operate_institution = #{operateInstitution},
+ partner_code = #{partnerCode},
+ contact_way = #{contactWay},
+ estimated_amount = #{estimatedAmount},
+ currency_type = #{currencyType},
+ estimated_order_time = #{estimatedOrderTime},
+ estimated_deliver_time = #{estimatedDeliverTime},
+ competitor = #{competitor},
+ country_product = #{countryProduct},
+ server_configuration = #{serverConfiguration},
+ key_problem = #{keyProblem},
+ project_desc = #{projectDesc},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where id = #{id}
+
+
+
+ delete from project_info where id = #{id}
+
+
+
+ delete from project_info where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOperateLogMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOperateLogMapper.xml
new file mode 100644
index 00000000..f9e5fbd3
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOperateLogMapper.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, operate_log, operate_user, operate_time, project_id from project_operate_log
+
+
+
+
+
+
+
+
+ insert into project_operate_log
+
+ id,
+ operate_log,
+ operate_user,
+ operate_time,
+ project_id,
+
+
+ #{id},
+ #{operateLog},
+ #{operateUser},
+ #{operateTime},
+ #{projectId},
+
+
+
+
+ update project_operate_log
+
+ operate_log = #{operateLog},
+ operate_user = #{operateUser},
+ operate_time = #{operateTime},
+ project_id = #{projectId},
+
+ where id = #{id}
+
+
+
+ delete from project_operate_log where id = #{id}
+
+
+
+ delete from project_operate_log where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectProductInfoMapper.xml
new file mode 100644
index 00000000..e0965937
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectProductInfoMapper.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_id, product_code, quantity, remark from project_product_info
+
+
+
+
+
+
+
+
+ insert into project_product_info
+
+ project_id,
+ product_code,
+ quantity,
+ remark,
+
+
+ #{projectId},
+ #{productCode},
+ #{quantity},
+ #{remark},
+
+
+
+ insert into project_product_info (project_id, product_code, quantity, remark) values
+
+ (#{item.projectId}, #{item.productCode}, #{item.quantity}, #{item.remark})
+
+ on duplicate key update product_code = values(product_code), quantity = values(quantity), remark = values(remark)
+
+
+
+ update project_product_info
+
+ project_id = #{projectId},
+ product_code = #{productCode},
+ quantity = #{quantity},
+ remark = #{remark},
+
+ where id = #{id}
+
+
+
+ delete from project_product_info where id = #{id}
+
+
+
+ delete from project_product_info where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectWorkProgressMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectWorkProgressMapper.xml
new file mode 100644
index 00000000..472f4cef
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectWorkProgressMapper.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, work_content, work_user, work_time, project_id from project_work_progress
+
+
+
+
+
+
+
+
+ insert into project_work_progress
+
+ work_content,
+ work_user,
+ work_time,
+ project_id,
+
+
+ #{workContent},
+ #{workUser},
+ #{workTime},
+ #{projectId},
+
+
+
+ insert ignore into project_work_progress (work_content, work_user, work_time, project_id) values
+
+ (#{item.workContent}, #{item.workUser}, #{item.workTime}, #{item.projectId})
+
+
+
+
+ update project_work_progress
+
+ work_content = #{workContent},
+ work_user = #{workUser},
+ work_time = #{workTime},
+ project_id = #{projectId},
+
+ where id = #{id}
+
+
+
+ delete from project_work_progress where id = #{id}
+
+
+
+ delete from project_work_progress where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file