feat(sip): 增加项目操作日志简略信息记录功能

- 新增简略信息变更记录逻辑,包括配置信息和产品信息变更
- 在 ProjectOperateLog 模型中添加 logType 字段,用于区分日志类型
- 修改 ProjectOperateLogMapper 映射文件,增加 logType 字段的插入
-优化了日志记录的结构和内容,提高了日志的可读性和实用性
master
chenhao 2025-06-03 09:19:24 +08:00
parent 623be7c554
commit 196a81e1e2
3 changed files with 50 additions and 62 deletions

View File

@ -2,6 +2,8 @@ package com.ruoyi.sip.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.Getter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@ -13,6 +15,8 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author ruoyi
* @date 2025-05-29
*/
@Data
public class ProjectOperateLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -36,65 +40,19 @@ public class ProjectOperateLog extends BaseEntity
/** 项目id */
@Excel(name = "项目id")
private Long projectId;
//记录类型 0:简略信息 1:详细信息
private String logType;
public void setId(Long id)
{
this.id = id;
}
@Getter
public enum LogTypeEnum {
BRIEF("0", "简略信息"),
DETAIL("1", "详细信息");
private final String value;
private final String desc;
LogTypeEnum(String value,String desc){
this.value = value;
this.desc = desc;
}
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();
}
}

View File

@ -7,6 +7,7 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.mapper.ProjectInfoMapper;
import com.ruoyi.sip.service.*;
@ -69,6 +70,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
projectInfo.setProjectWorkProgressList(projectWorkProgresses);
//查询操作日志信息
List<ProjectOperateLog> projectOperateLogs = operateLogService.selectProjectOperateLogListByProjectId(projectInfo.getId());
projectOperateLogs=projectOperateLogs.stream().filter(item->{
if (ShiroUtils.getSysUser().isAdmin()) {
return ProjectOperateLog.LogTypeEnum.DETAIL.getValue().equals(item.getLogType());
}
return ProjectOperateLog.LogTypeEnum.BRIEF.getValue().equals(item.getLogType());
}).collect(Collectors.toList());
projectInfo.setProjectOperateLogList(projectOperateLogs);
return projectInfo;
}
@ -193,6 +200,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
private void recordOperationLogs(ProjectInfo projectInfo, ProjectInfo oldProjectInfo) {
StringBuilder logContent = new StringBuilder();
//简略信息变更
StringBuilder logSimpleContent = new StringBuilder();
int logSimpleIndex = 1;
int logIndex = 1;
// 比较项目信息字段差异
logIndex = compareField(logContent, logIndex, "项目名称", oldProjectInfo.getProjectName(), projectInfo.getProjectName());
@ -221,7 +231,10 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
logIndex = compareField(logContent, logIndex, "竞争对手", oldProjectInfo.getCompetitor(), projectInfo.getCompetitor());
logIndex = compareField(logContent, logIndex, "关键技术问题", oldProjectInfo.getKeyProblem(), projectInfo.getKeyProblem());
logIndex = compareField(logContent, logIndex, "项目简述", oldProjectInfo.getProjectDesc(), projectInfo.getProjectDesc());
if (logIndex > 1) {
logSimpleIndex = logIndex;
logSimpleContent.append("1.配置信息发生变更\n");
}
// 配置信息变更
List<ProjectProductInfo> oldHardwareList = oldProjectInfo.getHardwareProjectProductInfoList();
List<ProjectProductInfo> oldSoftwareList = oldProjectInfo.getSoftwareProjectProductInfoList();
@ -231,11 +244,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
// 比较硬件产品信息
logIndex = compareProductInfoList(logContent, logIndex, "硬件产品", oldHardwareList, newHardwareList);
if (logSimpleIndex != logIndex) {
logSimpleContent.append(StringUtils.isNotEmpty(logSimpleContent)?"1.":"2.").append("产品信息发生变更");
}
// 比较软件产品信息
logIndex = compareProductInfoList(logContent, logIndex, "软件产品", oldSoftwareList, newSoftwareList);
// 插入操作日志
if (logContent.length() > 0) {
ProjectOperateLog operateLog = new ProjectOperateLog();
@ -243,6 +257,17 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
operateLog.setOperateLog(logContent.toString());
operateLog.setOperateTime(DateUtils.getNowDate());
operateLog.setOperateUser(ShiroUtils.getUserId().toString());
operateLog.setLogType(ProjectOperateLog.LogTypeEnum.DETAIL.getValue());
operateLogService.insertProjectOperateLog(operateLog);
//记录type
}
if (logSimpleContent.length() > 0){
ProjectOperateLog operateLog = new ProjectOperateLog();
operateLog.setProjectId(projectInfo.getId());
operateLog.setOperateLog(logSimpleContent.toString());
operateLog.setOperateTime(DateUtils.getNowDate());
operateLog.setOperateUser(ShiroUtils.getUserId().toString());
operateLog.setLogType(ProjectOperateLog.LogTypeEnum.BRIEF.getValue());
operateLogService.insertProjectOperateLog(operateLog);
}
}

View File

@ -10,10 +10,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="operateUser" column="operate_user" />
<result property="operateTime" column="operate_time" />
<result property="projectId" column="project_id" />
<result property="logType" column="log_type" />
</resultMap>
<sql id="selectProjectOperateLogVo">
select id, operate_log, operate_user, operate_time, project_id from project_operate_log
select id, operate_log, operate_user, operate_time, project_id,log_type from project_operate_log
</sql>
<select id="selectProjectOperateLogList" parameterType="ProjectOperateLog" resultMap="ProjectOperateLogResult">
@ -36,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
, t1.operate_user
, t1.operate_time
, t1.project_id
, t1.log_type
, t2.user_name
from project_operate_log t1
left join sys_user t2 on operate_user = t2.user_id
@ -50,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="operateUser != null">operate_user,</if>
<if test="operateTime != null">operate_time,</if>
<if test="projectId != null">project_id,</if>
<if test="logType != null">log_type,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
@ -57,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="operateUser != null">#{operateUser},</if>
<if test="operateTime != null">#{operateTime},</if>
<if test="projectId != null">#{projectId},</if>
<if test="logType != null">#{logType},</if>
</trim>
</insert>
@ -67,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="operateUser != null">operate_user = #{operateUser},</if>
<if test="operateTime != null">operate_time = #{operateTime},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="logType != null">log_type = #{logType},</if>
</trim>
where id = #{id}
</update>