package com.ruoyi.approve.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.bean.dto.LogReportDto;
import com.ruoyi.approve.mapper.LogReportMapper;
import com.ruoyi.approve.pojo.LogReport;
import com.ruoyi.approve.service.LogReportService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.project.system.service.ISysNoticeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* 日志表 服务实现类
*
*
* @author 芯导软件(江苏)有限公司
* @since 2026-05-08 01:51:13
*/
@Service
@RequiredArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class LogReportServiceImpl extends ServiceImpl implements LogReportService {
private final LogReportMapper sysLogReportMapper;
private final ISysNoticeService sysNoticeService;
private final SysUserMapper sysUserMapper;
@Override
public IPage listPage(Page page, LogReportDto sysLogReport) {
Long userId = SecurityUtils.getUserId();
IPage logReportDtoIPage = sysLogReportMapper.listPage(page, sysLogReport, userId);
logReportDtoIPage.getRecords().forEach(sysLogReportDto -> {
String ccUsers = sysLogReportDto.getCcUsers();
if (StringUtils.isBlank(ccUsers)) {
return;
}
List userIdList = Arrays.stream(ccUsers.split(","))
.filter(StringUtils::isNotBlank) // 过滤空字符串
.map(String::trim) // 去除空格
.map(Long::parseLong) // 转换为 Long
.collect(Collectors.toList()); // 收集为 List
sysLogReportDto.setCcUserIds(userIdList);
if (!userIdList.isEmpty()) {
List users = sysUserMapper.selectUsersByIds(userIdList);
String userNames = users.stream()
.filter(Objects::nonNull)
.map(SysUser::getNickName)
.filter(StringUtils::isNotBlank)
.collect(Collectors.joining(","));
// 如果所有用户都没有昵称,设置为空字符串
sysLogReportDto.setCcUserName(StringUtils.isNotBlank(userNames) ? userNames : "");
} else {
sysLogReportDto.setCcUserName("");
}
});
return logReportDtoIPage;
}
@Override
public Boolean add(LogReportDto sysLogReport) {
if (ObjectUtils.isEmpty(sysLogReport.getCcUserIds())) {
throw new RuntimeException("请选择抄送人");
}
String collect = sysLogReport.getCcUserIds().stream()
.map(String::valueOf) // Long → String
.collect(Collectors.joining(","));// 拼接为 "1,2,3"
sysLogReport.setCcUsers(collect);
sysLogReport.setPushStatus(1);
this.save(sysLogReport);
if (ObjectUtils.isNotEmpty(sysLogReport.getCcUserIds())) {
pushLogReport(sysLogReport);
}
return true;
}
@Override
public Boolean updateSysLogReportDto(LogReportDto sysLogReport) {
if (ObjectUtils.isEmpty(sysLogReport.getCcUserIds())) {
throw new RuntimeException("请选择抄送人");
}
String collect = sysLogReport.getCcUserIds().stream()
.map(String::valueOf) // Long → String
.collect(Collectors.joining(","));// 拼接为 "1,2,3"
sysLogReport.setCcUsers(collect);
sysLogReport.setPushStatus(1);
if (ObjectUtils.isNotEmpty(sysLogReport.getCcUserIds())) {
pushLogReport(sysLogReport);
}
return this.updateById(sysLogReport);
}
@Override
public void pushLogReport(LogReportDto sysLogReportDto) {
LogReport byId = this.getById(sysLogReportDto.getId());
sysNoticeService.simpleNoticeByUser(byId.getTitle(), byId.getContent(), sysLogReportDto.getCcUserIds(), "/collaborativeApproval/journal");
}
}