feat(sip): 增加项目操作日志简略信息记录功能
- 新增简略信息变更记录逻辑,包括配置信息和产品信息变更 - 在 ProjectOperateLog 模型中添加 logType 字段,用于区分日志类型 - 修改 ProjectOperateLogMapper 映射文件,增加 logType 字段的插入 -优化了日志记录的结构和内容,提高了日志的可读性和实用性master
parent
623be7c554
commit
196a81e1e2
|
@ -2,6 +2,8 @@ package com.ruoyi.sip.domain;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
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.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
import com.ruoyi.common.annotation.Excel;
|
import com.ruoyi.common.annotation.Excel;
|
||||||
|
@ -13,6 +15,8 @@ import com.ruoyi.common.core.domain.BaseEntity;
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2025-05-29
|
* @date 2025-05-29
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
public class ProjectOperateLog extends BaseEntity
|
public class ProjectOperateLog extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
@ -36,65 +40,19 @@ public class ProjectOperateLog extends BaseEntity
|
||||||
/** 项目id */
|
/** 项目id */
|
||||||
@Excel(name = "项目id")
|
@Excel(name = "项目id")
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
//记录类型 0:简略信息 1:详细信息
|
||||||
|
private String logType;
|
||||||
|
|
||||||
public void setId(Long id)
|
@Getter
|
||||||
{
|
public enum LogTypeEnum {
|
||||||
this.id = id;
|
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
import com.ruoyi.common.utils.DictUtils;
|
import com.ruoyi.common.utils.DictUtils;
|
||||||
import com.ruoyi.common.utils.ShiroUtils;
|
import com.ruoyi.common.utils.ShiroUtils;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.sip.domain.*;
|
import com.ruoyi.sip.domain.*;
|
||||||
import com.ruoyi.sip.mapper.ProjectInfoMapper;
|
import com.ruoyi.sip.mapper.ProjectInfoMapper;
|
||||||
import com.ruoyi.sip.service.*;
|
import com.ruoyi.sip.service.*;
|
||||||
|
@ -69,6 +70,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
projectInfo.setProjectWorkProgressList(projectWorkProgresses);
|
projectInfo.setProjectWorkProgressList(projectWorkProgresses);
|
||||||
//查询操作日志信息
|
//查询操作日志信息
|
||||||
List<ProjectOperateLog> projectOperateLogs = operateLogService.selectProjectOperateLogListByProjectId(projectInfo.getId());
|
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);
|
projectInfo.setProjectOperateLogList(projectOperateLogs);
|
||||||
return projectInfo;
|
return projectInfo;
|
||||||
}
|
}
|
||||||
|
@ -193,6 +200,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
|
|
||||||
private void recordOperationLogs(ProjectInfo projectInfo, ProjectInfo oldProjectInfo) {
|
private void recordOperationLogs(ProjectInfo projectInfo, ProjectInfo oldProjectInfo) {
|
||||||
StringBuilder logContent = new StringBuilder();
|
StringBuilder logContent = new StringBuilder();
|
||||||
|
//简略信息变更
|
||||||
|
StringBuilder logSimpleContent = new StringBuilder();
|
||||||
|
int logSimpleIndex = 1;
|
||||||
int logIndex = 1;
|
int logIndex = 1;
|
||||||
// 比较项目信息字段差异
|
// 比较项目信息字段差异
|
||||||
logIndex = compareField(logContent, logIndex, "项目名称", oldProjectInfo.getProjectName(), projectInfo.getProjectName());
|
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.getCompetitor(), projectInfo.getCompetitor());
|
||||||
logIndex = compareField(logContent, logIndex, "关键技术问题", oldProjectInfo.getKeyProblem(), projectInfo.getKeyProblem());
|
logIndex = compareField(logContent, logIndex, "关键技术问题", oldProjectInfo.getKeyProblem(), projectInfo.getKeyProblem());
|
||||||
logIndex = compareField(logContent, logIndex, "项目简述", oldProjectInfo.getProjectDesc(), projectInfo.getProjectDesc());
|
logIndex = compareField(logContent, logIndex, "项目简述", oldProjectInfo.getProjectDesc(), projectInfo.getProjectDesc());
|
||||||
|
if (logIndex > 1) {
|
||||||
|
logSimpleIndex = logIndex;
|
||||||
|
logSimpleContent.append("1.配置信息发生变更\n");
|
||||||
|
}
|
||||||
// 配置信息变更
|
// 配置信息变更
|
||||||
List<ProjectProductInfo> oldHardwareList = oldProjectInfo.getHardwareProjectProductInfoList();
|
List<ProjectProductInfo> oldHardwareList = oldProjectInfo.getHardwareProjectProductInfoList();
|
||||||
List<ProjectProductInfo> oldSoftwareList = oldProjectInfo.getSoftwareProjectProductInfoList();
|
List<ProjectProductInfo> oldSoftwareList = oldProjectInfo.getSoftwareProjectProductInfoList();
|
||||||
|
@ -231,11 +244,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
// 比较硬件产品信息
|
// 比较硬件产品信息
|
||||||
logIndex = compareProductInfoList(logContent, logIndex, "硬件产品", oldHardwareList, newHardwareList);
|
logIndex = compareProductInfoList(logContent, logIndex, "硬件产品", oldHardwareList, newHardwareList);
|
||||||
|
|
||||||
|
if (logSimpleIndex != logIndex) {
|
||||||
|
logSimpleContent.append(StringUtils.isNotEmpty(logSimpleContent)?"1.":"2.").append("产品信息发生变更");
|
||||||
|
}
|
||||||
// 比较软件产品信息
|
// 比较软件产品信息
|
||||||
logIndex = compareProductInfoList(logContent, logIndex, "软件产品", oldSoftwareList, newSoftwareList);
|
logIndex = compareProductInfoList(logContent, logIndex, "软件产品", oldSoftwareList, newSoftwareList);
|
||||||
|
|
||||||
|
|
||||||
// 插入操作日志
|
// 插入操作日志
|
||||||
if (logContent.length() > 0) {
|
if (logContent.length() > 0) {
|
||||||
ProjectOperateLog operateLog = new ProjectOperateLog();
|
ProjectOperateLog operateLog = new ProjectOperateLog();
|
||||||
|
@ -243,6 +257,17 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
operateLog.setOperateLog(logContent.toString());
|
operateLog.setOperateLog(logContent.toString());
|
||||||
operateLog.setOperateTime(DateUtils.getNowDate());
|
operateLog.setOperateTime(DateUtils.getNowDate());
|
||||||
operateLog.setOperateUser(ShiroUtils.getUserId().toString());
|
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);
|
operateLogService.insertProjectOperateLog(operateLog);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="operateUser" column="operate_user" />
|
<result property="operateUser" column="operate_user" />
|
||||||
<result property="operateTime" column="operate_time" />
|
<result property="operateTime" column="operate_time" />
|
||||||
<result property="projectId" column="project_id" />
|
<result property="projectId" column="project_id" />
|
||||||
|
<result property="logType" column="log_type" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectProjectOperateLogVo">
|
<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>
|
</sql>
|
||||||
|
|
||||||
<select id="selectProjectOperateLogList" parameterType="ProjectOperateLog" resultMap="ProjectOperateLogResult">
|
<select id="selectProjectOperateLogList" parameterType="ProjectOperateLog" resultMap="ProjectOperateLogResult">
|
||||||
|
@ -36,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
, t1.operate_user
|
, t1.operate_user
|
||||||
, t1.operate_time
|
, t1.operate_time
|
||||||
, t1.project_id
|
, t1.project_id
|
||||||
|
, t1.log_type
|
||||||
, t2.user_name
|
, t2.user_name
|
||||||
from project_operate_log t1
|
from project_operate_log t1
|
||||||
left join sys_user t2 on operate_user = t2.user_id
|
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="operateUser != null">operate_user,</if>
|
||||||
<if test="operateTime != null">operate_time,</if>
|
<if test="operateTime != null">operate_time,</if>
|
||||||
<if test="projectId != null">project_id,</if>
|
<if test="projectId != null">project_id,</if>
|
||||||
|
<if test="logType != null">log_type,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="id != null">#{id},</if>
|
<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="operateUser != null">#{operateUser},</if>
|
||||||
<if test="operateTime != null">#{operateTime},</if>
|
<if test="operateTime != null">#{operateTime},</if>
|
||||||
<if test="projectId != null">#{projectId},</if>
|
<if test="projectId != null">#{projectId},</if>
|
||||||
|
<if test="logType != null">#{logType},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
@ -67,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="operateUser != null">operate_user = #{operateUser},</if>
|
<if test="operateUser != null">operate_user = #{operateUser},</if>
|
||||||
<if test="operateTime != null">operate_time = #{operateTime},</if>
|
<if test="operateTime != null">operate_time = #{operateTime},</if>
|
||||||
<if test="projectId != null">project_id = #{projectId},</if>
|
<if test="projectId != null">project_id = #{projectId},</if>
|
||||||
|
<if test="logType != null">log_type = #{logType},</if>
|
||||||
</trim>
|
</trim>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
Loading…
Reference in New Issue