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 index 4c59335f..40cba03c 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java @@ -139,5 +139,6 @@ public class ProjectInfo extends BaseEntity private List projectOperateLogList; /** 项目工作进度信息 */ private List projectWorkProgressList; + private ProjectPocInfo projectPocInfo; } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectPocInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectPocInfo.java new file mode 100644 index 00000000..3d277040 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectPocInfo.java @@ -0,0 +1,58 @@ +package com.ruoyi.sip.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.ToString; +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; + +/** + * poc测试信息对象 project_poc_info + * + * @author ruoyi + * @date 2025-06-09 + */ +@Data +@ToString +public class ProjectPocInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** */ + private Long id; + + /** 项目id */ + @Excel(name = "项目id") + private Long projectId; + + /** 测试环境 */ + @Excel(name = "测试环境") + private String testEnvironment; + + /** 测试进展 */ + @Excel(name = "测试进展") + private String testProgress; + + /** 项目成员信息 */ + @Excel(name = "项目成员信息") + private String projectUserInfo; + + /** 启动日期 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "启动日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date startDate; + + /** 预计完成时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "预计完成时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date planFinishTime; + + /** 实际完成时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date realFinishTime; + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectPocInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectPocInfoMapper.java new file mode 100644 index 00000000..090ee814 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectPocInfoMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.ProjectPocInfo; + +/** + * poc测试信息Mapper接口 + * + * @author ruoyi + * @date 2025-06-09 + */ +public interface ProjectPocInfoMapper +{ + /** + * 查询poc测试信息 + * + * @param id poc测试信息主键 + * @return poc测试信息 + */ + public ProjectPocInfo selectProjectPocInfoById(Long id); + + /** + * 查询poc测试信息列表 + * + * @param projectPocInfo poc测试信息 + * @return poc测试信息集合 + */ + public List selectProjectPocInfoList(ProjectPocInfo projectPocInfo); + + /** + * 新增poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + public int insertProjectPocInfo(ProjectPocInfo projectPocInfo); + + /** + * 修改poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + public int updateProjectPocInfo(ProjectPocInfo projectPocInfo); + + /** + * 删除poc测试信息 + * + * @param id poc测试信息主键 + * @return 结果 + */ + public int deleteProjectPocInfoById(Long id); + + /** + * 批量删除poc测试信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteProjectPocInfoByIds(String[] ids); + + List listByProjectId(List projectId); + + void insertBatch(List addList); + void updateBatch(List addList); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectPocInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectPocInfoService.java new file mode 100644 index 00000000..5906ec5b --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectPocInfoService.java @@ -0,0 +1,67 @@ +package com.ruoyi.sip.service; + +import java.util.List; +import com.ruoyi.sip.domain.ProjectPocInfo; + +/** + * poc测试信息Service接口 + * + * @author ruoyi + * @date 2025-06-09 + */ +public interface IProjectPocInfoService +{ + /** + * 查询poc测试信息 + * + * @param id poc测试信息主键 + * @return poc测试信息 + */ + public ProjectPocInfo selectProjectPocInfoById(Long id); + + /** + * 查询poc测试信息列表 + * + * @param projectPocInfo poc测试信息 + * @return poc测试信息集合 + */ + public List selectProjectPocInfoList(ProjectPocInfo projectPocInfo); + + /** + * 新增poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + public int insertProjectPocInfo(ProjectPocInfo projectPocInfo); + + /** + * 修改poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + public int updateProjectPocInfo(ProjectPocInfo projectPocInfo); + + /** + * 批量删除poc测试信息 + * + * @param ids 需要删除的poc测试信息主键集合 + * @return 结果 + */ + public int deleteProjectPocInfoByIds(String ids); + + /** + * 删除poc测试信息信息 + * + * @param id poc测试信息主键 + * @return 结果 + */ + public int deleteProjectPocInfoById(Long id); + + List listByProjectId(List projectId); + + + + void saveBatch(List projectPocInfos); +} 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 index 4e83939f..cf0ed4f0 100644 --- 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 @@ -17,7 +17,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.text.DateFormat; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; @@ -45,7 +44,8 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { private IProjectWorkProgressService workProgressService; @Autowired private IProjectOperateLogService operateLogService; - + @Autowired + private IProjectPocInfoService pocInfoService; @Autowired private IProjectOrderInfoService orderInfoService; @@ -90,6 +90,10 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { return ProjectOperateLog.LogTypeEnum.BRIEF.getValue().equals(item.getLogType()); }).collect(Collectors.toList()); projectInfo.setProjectOperateLogList(projectOperateLogs); + List projectPocInfos = pocInfoService.listByProjectId(Collections.singletonList(projectInfo.getId())); + if (CollUtil.isNotEmpty(projectPocInfos)) { + projectInfo.setProjectPocInfo(projectPocInfos.get(0)); + } return projectInfo; } @@ -175,6 +179,13 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { } workProgressService.insertIgnoreBatch(projectWorkProgressList); } + //保存poc信息 + ProjectPocInfo projectPocInfo = projectInfo1.getProjectPocInfo(); + if (projectPocInfo != null) { + projectPocInfo.setProjectId(projectInfo1.getId()); + pocInfoService.saveBatch(Collections.singletonList(projectPocInfo)); + } + } @@ -221,7 +232,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { private void recordOperationLogs(ProjectInfo projectInfo, ProjectInfo oldProjectInfo) { StringBuilder logContent = new StringBuilder(); //简略信息变更 - StringBuilder logSimpleContent = new StringBuilder(); + StringJoiner logSimpleContent = new StringJoiner("\n"); int logSimpleIndex = 1; int logIndex = 1; // 比较项目信息字段差异 @@ -257,7 +268,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { logIndex = compareField(logContent, logIndex, "项目简述", oldProjectInfo.getProjectDesc(), projectInfo.getProjectDesc()); if (logIndex > 1) { logSimpleIndex = logIndex; - logSimpleContent.append("1.项目信息发生变更\n"); + logSimpleContent.add("1.项目信息发生变更"); } // 配置信息变更 List oldSoftWareProductList = oldProjectInfo.getSoftwareProjectProductInfoList(); @@ -281,9 +292,18 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { logIndex = compareProductInfoList(logContent, logIndex, "配置硬件信息", oldMaintenanceProductList, newMaintenanceProductList); if (logSimpleIndex != logIndex) { - logSimpleContent.append(StringUtils.isNotEmpty(logSimpleContent)?"1.":"2.").append("配置信息发生变更"); + logSimpleContent.add(StringUtils.format("{}.配置信息发生变更", logSimpleContent.length() + 1)); + logSimpleIndex = logIndex; } + //记录poc信息变更 + logIndex = comparePocInfo(oldProjectInfo.getProjectPocInfo(), projectInfo.getProjectPocInfo(), logIndex, logContent); + + + if (logSimpleIndex != logIndex) { + logSimpleContent.add(StringUtils.format("{}.poc信息发生变更", logSimpleContent.length() + 1)); + logSimpleIndex = logIndex; + } // 插入操作日志 if (logContent.length() > 0) { ProjectOperateLog operateLog = new ProjectOperateLog(); @@ -306,6 +326,26 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { } } + private int comparePocInfo(ProjectPocInfo oldInfo, ProjectPocInfo info, int index, StringBuilder logContent) { + if (oldInfo == null && info != null) { + logContent.append(index).append(".poc新增"); + return ++index; + } + if (oldInfo != null && info == null) { + logContent.append(index).append(".poc删除"); + return ++index; + } + if (oldInfo != null) { + index=compareField(logContent, index, "测试环境", oldInfo.getTestEnvironment(), info.getTestEnvironment()); + index=compareField(logContent, index, "测试进展", oldInfo.getTestProgress(), info.getTestProgress()); + index=compareField(logContent, index, "项目成员信息", oldInfo.getProjectUserInfo(), info.getProjectUserInfo()); + index=compareField(logContent, index, "启动日期", formatterDate(oldInfo.getStartDate()), formatterDate(info.getStartDate())); + index=compareField(logContent, index, "预计完成日期", formatterDate(oldInfo.getPlanFinishTime()), formatterDate(info.getPlanFinishTime())); + index=compareField(logContent, index, "实际完成日期", formatterDate(oldInfo.getRealFinishTime()), formatterDate(info.getRealFinishTime())); + } + return index; + } + private String formatterDate(Date date) { if (date == null) { return null; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectPocInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectPocInfoServiceImpl.java new file mode 100644 index 00000000..898d009a --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectPocInfoServiceImpl.java @@ -0,0 +1,120 @@ +package com.ruoyi.sip.service.impl; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.ProjectPocInfoMapper; +import com.ruoyi.sip.domain.ProjectPocInfo; +import com.ruoyi.sip.service.IProjectPocInfoService; +import com.ruoyi.common.core.text.Convert; + +/** + * poc测试信息Service业务层处理 + * + * @author ruoyi + * @date 2025-06-09 + */ +@Service +public class ProjectPocInfoServiceImpl implements IProjectPocInfoService +{ + @Autowired + private ProjectPocInfoMapper projectPocInfoMapper; + + /** + * 查询poc测试信息 + * + * @param id poc测试信息主键 + * @return poc测试信息 + */ + @Override + public ProjectPocInfo selectProjectPocInfoById(Long id) + { + return projectPocInfoMapper.selectProjectPocInfoById(id); + } + + /** + * 查询poc测试信息列表 + * + * @param projectPocInfo poc测试信息 + * @return poc测试信息 + */ + @Override + public List selectProjectPocInfoList(ProjectPocInfo projectPocInfo) + { + return projectPocInfoMapper.selectProjectPocInfoList(projectPocInfo); + } + + /** + * 新增poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + @Override + public int insertProjectPocInfo(ProjectPocInfo projectPocInfo) + { + projectPocInfo.setCreateTime(DateUtils.getNowDate()); + return projectPocInfoMapper.insertProjectPocInfo(projectPocInfo); + } + + /** + * 修改poc测试信息 + * + * @param projectPocInfo poc测试信息 + * @return 结果 + */ + @Override + public int updateProjectPocInfo(ProjectPocInfo projectPocInfo) + { + return projectPocInfoMapper.updateProjectPocInfo(projectPocInfo); + } + + /** + * 批量删除poc测试信息 + * + * @param ids 需要删除的poc测试信息主键 + * @return 结果 + */ + @Override + public int deleteProjectPocInfoByIds(String ids) + { + return projectPocInfoMapper.deleteProjectPocInfoByIds(Convert.toStrArray(ids)); + } + + /** + * 删除poc测试信息信息 + * + * @param id poc测试信息主键 + * @return 结果 + */ + @Override + public int deleteProjectPocInfoById(Long id) + { + return projectPocInfoMapper.deleteProjectPocInfoById(id); + } + + @Override + public List listByProjectId(List projectId) { + return projectPocInfoMapper.listByProjectId(projectId); + } + + @Override + public void saveBatch(List projectPocInfos) { + if (CollUtil.isEmpty(projectPocInfos)){ + return; + } + List addList = projectPocInfos.stream().filter(projectPocInfo -> projectPocInfo.getId() == null).collect(Collectors.toList()); + List updateList = projectPocInfos.stream().filter(projectPocInfo -> projectPocInfo.getId() != null).collect(Collectors.toList()); + if (CollUtil.isEmpty(addList)){ + projectPocInfoMapper.insertBatch(addList); + } + if (CollUtil.isEmpty(updateList)){ + projectPocInfoMapper.updateBatch(updateList); + } + } +} diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectPocInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectPocInfoMapper.xml new file mode 100644 index 00000000..dcc9c09b --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectPocInfoMapper.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + select id, project_id, test_environment, test_progress, project_user_info, start_date, plan_finish_time, real_finish_time, create_by, create_time from project_poc_info + + + + + + + + + insert into project_poc_info + + project_id, + test_environment, + test_progress, + project_user_info, + start_date, + plan_finish_time, + real_finish_time, + create_by, + create_time, + + + #{projectId}, + #{testEnvironment}, + #{testProgress}, + #{projectUserInfo}, + #{startDate}, + #{planFinishTime}, + #{realFinishTime}, + #{createBy}, + #{createTime}, + + + + insert into project_poc_info (project_id, test_environment, test_progress, project_user_info, start_date, plan_finish_time, real_finish_time, create_by, create_time) values + + (#{item.projectId}, #{item.testEnvironment}, #{item.testProgress}, #{item.projectUserInfo}, #{item.startDate}, #{item.planFinishTime}, #{item.realFinishTime}, #{item.createBy},now()) + + + + + update project_poc_info + + project_id = #{projectId}, + test_environment = #{testEnvironment}, + test_progress = #{testProgress}, + project_user_info = #{projectUserInfo}, + start_date = #{startDate}, + plan_finish_time = #{planFinishTime}, + real_finish_time = #{realFinishTime}, + create_by = #{createBy}, + create_time = #{createTime}, + + where id = #{id} + + + + update project_poc_info + + test_environment = #{item.testEnvironment}, + test_progress = #{item.testProgress}, + project_user_info = #{item.projectUserInfo}, + start_date = #{item.startDate}, + plan_finish_time = #{item.planFinishTime}, + real_finish_time = #{item.realFinishTime}, + + where id = #{item.id} + + + + + delete from project_poc_info where id = #{id} + + + + delete from project_poc_info where id in + + #{id} + + + + \ No newline at end of file