添加站班会、安全巡检工单、安全日志、安全周报前端页面,以及修复部分后端逻辑

This commit is contained in:
lcj
2025-03-21 18:20:12 +08:00
parent 7c05f661dc
commit 1bbae0fb3a
36 changed files with 2913 additions and 92 deletions

View File

@ -0,0 +1,45 @@
package org.dromara.project.domain.enums;
import lombok.Getter;
import org.dromara.common.core.utils.ObjectUtils;
/**
* 项目成员岗位枚举
*
* @author lcj
* @date 2025/3/21 13:36
*/
@Getter
public enum ProjectTeamMemberPostEnum {
MEMBER("普通成员", "0"),
FOREMAN("班组长", "1");
private final String text;
private final String value;
ProjectTeamMemberPostEnum(String text, String value) {
this.text = text;
this.value = value;
}
/**
* 根据 value 获取枚举
*
* @param value 项目成员岗位枚举值
* @return 项目成员岗位枚举
*/
public static ProjectTeamMemberPostEnum getEnumByValue(String value) {
if (ObjectUtils.isEmpty(value)) {
return null;
}
for (ProjectTeamMemberPostEnum anEnum : ProjectTeamMemberPostEnum.values()) {
if (anEnum.value.equals(value)) {
return anEnum;
}
}
return null;
}
}

View File

@ -0,0 +1,43 @@
package org.dromara.project.domain.resp.projectteam;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lcj
* @date 2025/3/21 13:49
*/
@Data
public class ProjectTeamForemanResp implements Serializable {
@Serial
private static final long serialVersionUID = -5655849857614630436L;
/**
* 主键id
*/
private Long id;
/**
* 班组名称
*/
private String teamName;
/**
* 项目id
*/
private Long projectId;
/**
* 班组长id
*/
private Long foremanId;
/**
* 班组长名字
*/
private String foremanName;
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
@ -16,6 +17,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.enums.ProjectTeamMemberPostEnum;
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberCreateReq;
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberQueryReq;
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberUpdateReq;
@ -186,6 +188,19 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
if (projectTeamService.getById(teamId) == null) {
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
}
// 判断对应班组班组长是否存在
String postId = entity.getPostId();
ProjectTeamMemberPostEnum postEnum = ProjectTeamMemberPostEnum.getEnumByValue(postId);
if (postEnum == null) {
throw new ServiceException("请选择正确的岗位", HttpStatus.BAD_REQUEST);
}
LambdaQueryWrapper<BusProjectTeamMember> lqw = Wrappers.lambdaQuery(BusProjectTeamMember.class)
.eq(BusProjectTeamMember::getProjectId, projectId)
.eq(BusProjectTeamMember::getTeamId, teamId)
.eq(BusProjectTeamMember::getPostId, ProjectTeamMemberPostEnum.FOREMAN.getValue());
if (this.count(lqw) > 0) {
throw new ServiceException("当前班组已存在班组长", HttpStatus.CONFLICT);
}
}
/**

View File

@ -89,7 +89,7 @@ public class SafetyLogCreateReq implements Serializable {
/**
* 文件id列表
*/
private List<String> fileIdList;
private String fileId;
/**
* 备注

View File

@ -94,7 +94,7 @@ public class SafetyLogUpdateReq implements Serializable {
/**
* 文件id列表
*/
private List<String> fileIdList;
private String fileId;
/**
* 备注

View File

@ -4,6 +4,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* @author lcj
@ -33,7 +34,7 @@ public class SafetyWeeklyReportQueryReq implements Serializable {
/**
* 周期范围
*/
private String scopeDate;
private List<String> scopeDate;
/**
* 备注

View File

@ -1,5 +1,6 @@
package org.dromara.safety.domain.req.teammeeting;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
@ -35,6 +36,7 @@ public class TeamMeetingCreateReq implements Serializable {
/**
* 开会时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date meetingDate;
/**

View File

@ -1,5 +1,6 @@
package org.dromara.safety.domain.req.teammeeting;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
@ -40,6 +41,7 @@ public class TeamMeetingQueryReq implements Serializable {
/**
* 开会时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date meetingDate;
/**

View File

@ -1,5 +1,6 @@
package org.dromara.safety.domain.req.teammeeting;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
@ -40,6 +41,7 @@ public class TeamMeetingUpdateReq implements Serializable {
/**
* 开会时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date meetingDate;
/**

View File

@ -4,7 +4,6 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.core.domain.vo.IdAndNameVO;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.safety.domain.BusSafetyInspection;
@ -70,25 +69,25 @@ public class BusSafetyInspectionVo implements Serializable {
/**
* 整改班组id
*/
/* @ExcelProperty(value = "整改班组id")
private Long teamId;*/
@ExcelProperty(value = "整改班组id")
private Long teamId;
/**
* 整改班组
* 整改班组名字
*/
private IdAndNameVO team;
private String teamName;
/**
* 整改人班组长id
*/
/* @ExcelProperty(value = "整改人", converter = ExcelDictConvert.class)
@ExcelProperty(value = "整改人", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "班=组长")
private Long correctorId;*/
private Long correctorId;
/**
* 整改人(班组长)
* 整改人(班组长)名字
*/
private IdAndNameVO corrector;
private String correctorName;
/**
* 是否回复1回复 2不回复
@ -156,24 +155,14 @@ public class BusSafetyInspectionVo implements Serializable {
/**
* 检查附件
*/
/* @ExcelProperty(value = "检查附件")
private Long checkFile;*/
/**
* 检查附件
*/
private IdAndNameVO checkFileUrl;
@ExcelProperty(value = "检查附件")
private String checkFile;
/**
* 整改附件
*/
/* @ExcelProperty(value = "整改附件")
private Long rectificationFile;*/
/**
* 整改附件
*/
private IdAndNameVO rectificationFileUrl;
@ExcelProperty(value = "整改附件")
private String rectificationFile;
/**
* 备注
@ -187,4 +176,14 @@ public class BusSafetyInspectionVo implements Serializable {
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 创建人id
*/
private Long creatorId;
/**
* 创建人名字
*/
private String creatorName;
}

View File

@ -126,11 +126,6 @@ public class BusSafetyLogVo implements Serializable {
@ExcelProperty(value = "文件id列表")
private String fileId;
/**
* 文件列表
*/
private List<IdAndNameVO> fileList;
/**
* 备注
*/

View File

@ -4,11 +4,11 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.core.domain.vo.IdAndNameVO;
import org.dromara.safety.domain.BusSafetyWeeklyReport;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
@ -58,13 +58,13 @@ public class BusSafetyWeeklyReportVo implements Serializable {
/**
* 文件位置
*/
/* @ExcelProperty(value = "文件位置")
private String path;*/
@ExcelProperty(value = "文件位置")
private String path;
/**
* 文件位置
*/
private IdAndNameVO pathUrl;
private String pathUrl;
/**
* 备注
@ -72,5 +72,10 @@ public class BusSafetyWeeklyReportVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -5,8 +5,6 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.core.domain.vo.IdAndNameVO;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.safety.domain.BusTeamMeeting;
import java.io.Serial;
@ -116,4 +114,9 @@ public class BusTeamMeetingVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.domain.vo.IdAndNameVO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
@ -24,8 +23,6 @@ import org.dromara.safety.domain.req.safetyinspection.SafetyInspectionUpdateReq;
import org.dromara.safety.domain.vo.BusSafetyInspectionVo;
import org.dromara.safety.mapper.BusSafetyInspectionMapper;
import org.dromara.safety.service.IBusSafetyInspectionService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -50,9 +47,6 @@ public class BusSafetyInspectionServiceImpl extends ServiceImpl<BusSafetyInspect
@Resource
private IBusProjectTeamService projectTeamService;
@Resource
private ISysOssService ossService;
/**
* 查询安全巡检工单
*
@ -174,35 +168,32 @@ public class BusSafetyInspectionServiceImpl extends ServiceImpl<BusSafetyInspect
return safetyInspectionVo;
}
BeanUtils.copyProperties(safetyInspection, safetyInspectionVo);
// 关联班组信息
Long teamId = safetyInspection.getTeamId();
if (teamId != null) {
LambdaQueryWrapper<BusProjectTeam> teamLambdaQueryWrapper = Wrappers.lambdaQuery(BusProjectTeam.class)
.select(BusProjectTeam::getId, BusProjectTeam::getTeamName)
.eq(BusProjectTeam::getId, teamId);
BusProjectTeam projectTeam = projectTeamService.getOne(teamLambdaQueryWrapper);
safetyInspectionVo.setTeam(IdAndNameVO.build(projectTeam.getId(), projectTeam.getTeamName()));
safetyInspectionVo.setTeamId(projectTeam.getId());
safetyInspectionVo.setTeamName(projectTeam.getTeamName());
}
// 关联整改人信息
Long correctorId = safetyInspection.getCorrectorId();
if (correctorId != null) {
LambdaQueryWrapper<BusConstructionUser> constructionUserLambdaQueryWrapper = Wrappers.lambdaQuery(BusConstructionUser.class)
.select(BusConstructionUser::getId, BusConstructionUser::getUserName)
.eq(BusConstructionUser::getId, correctorId);
BusConstructionUser constructionUser = constructionUserService.getOne(constructionUserLambdaQueryWrapper);
safetyInspectionVo.setCorrector(IdAndNameVO.build(constructionUser.getId(), constructionUser.getUserName()));
safetyInspectionVo.setCorrectorId(constructionUser.getId());
safetyInspectionVo.setCorrectorName(constructionUser.getUserName());
}
// 查询文件url
Long checkFile = safetyInspection.getCheckFile();
Long rectificationFile = safetyInspection.getRectificationFile();
List<Long> fileIdList = List.of(checkFile, rectificationFile);
if (CollUtil.isNotEmpty(fileIdList)) {
List<SysOssVo> ossList = ossService.listByIds(fileIdList);
for (SysOssVo sysOssVo : ossList) {
if (checkFile.equals(sysOssVo.getOssId())) {
safetyInspectionVo.setCheckFileUrl(IdAndNameVO.build(sysOssVo.getOssId(), sysOssVo.getUrl()));
} else if (rectificationFile.equals(sysOssVo.getOssId())) {
safetyInspectionVo.setRectificationFileUrl(IdAndNameVO.build(sysOssVo.getOssId(), sysOssVo.getUrl()));
}
}
// 关联创建用户信息
Long createBy = safetyInspection.getCreateBy();
if (createBy != null) {
BusConstructionUser createUser = constructionUserService.getById(createBy);
safetyInspectionVo.setCreatorId(createUser.getId());
safetyInspectionVo.setCreatorName(createUser.getUserName());
}
return safetyInspectionVo;
}

View File

@ -1,8 +1,6 @@
package org.dromara.safety.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -24,8 +22,6 @@ import org.dromara.safety.domain.req.safetylog.SafetyLogUpdateReq;
import org.dromara.safety.domain.vo.BusSafetyLogVo;
import org.dromara.safety.mapper.BusSafetyLogMapper;
import org.dromara.safety.service.IBusSafetyLogService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -43,9 +39,6 @@ import java.util.List;
public class BusSafetyLogServiceImpl extends ServiceImpl<BusSafetyLogMapper, BusSafetyLog>
implements IBusSafetyLogService {
@Resource
private ISysOssService ossService;
@Resource
private IBusConstructionUserService constructionUserService;
@ -100,10 +93,6 @@ public class BusSafetyLogServiceImpl extends ServiceImpl<BusSafetyLogMapper, Bus
// 将实体类和 DTO 进行转换
BusSafetyLog safetyLog = new BusSafetyLog();
BeanUtils.copyProperties(req, safetyLog);
// 数据转换
List<String> fileIdList = req.getFileIdList();
String fileIdStr = JSONUtil.toJsonStr(fileIdList);
safetyLog.setFileId(fileIdStr);
// 数据校验
validEntityBeforeSave(safetyLog, true);
// 写入数据库
@ -126,10 +115,6 @@ public class BusSafetyLogServiceImpl extends ServiceImpl<BusSafetyLogMapper, Bus
// 将实体类和 DTO 进行转换
BusSafetyLog safetyLog = new BusSafetyLog();
BeanUtils.copyProperties(req, safetyLog);
// 数据转换
List<String> fileIdList = req.getFileIdList();
String fileIdStr = JSONUtil.toJsonStr(fileIdList);
safetyLog.setFileId(fileIdStr);
// 数据校验
validEntityBeforeSave(safetyLog, false);
// 判断是否存在
@ -181,15 +166,6 @@ public class BusSafetyLogServiceImpl extends ServiceImpl<BusSafetyLogMapper, Bus
return safetyLogVo;
}
BeanUtils.copyProperties(safetyLog, safetyLogVo);
// 关联查询文件信息
String fileId = safetyLog.getFileId();
List<Long> fileIdList = JSONUtil.toList(fileId, Long.class);
if (CollectionUtil.isNotEmpty(fileIdList)) {
List<SysOssVo> fileOssList = ossService.listByIds(fileIdList);
List<IdAndNameVO> idAndNameVOList = fileOssList.stream()
.map(fileOss -> IdAndNameVO.build(fileOss.getOssId(), fileOss.getUrl())).toList();
safetyLogVo.setFileList(idAndNameVOList);
}
// 关联创建用户信息
Long createBy = safetyLog.getCreateBy();
if (createBy != null) {

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.domain.vo.IdAndNameVO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
@ -167,7 +166,7 @@ public class BusSafetyWeeklyReportServiceImpl extends ServiceImpl<BusSafetyWeekl
String path = safetyWeeklyReport.getPath();
if (StringUtils.isNotBlank(path)) {
SysOssVo ossVo = ossService.getById(Long.valueOf(path));
safetyWeeklyReportVo.setPathUrl(IdAndNameVO.build(ossVo.getOssId(), ossVo.getUrl()));
safetyWeeklyReportVo.setPathUrl(ossVo.getUrl());
}
return safetyWeeklyReportVo;
}
@ -187,13 +186,12 @@ public class BusSafetyWeeklyReportServiceImpl extends ServiceImpl<BusSafetyWeekl
Long id = req.getId();
Long projectId = req.getProjectId();
String week = req.getWeek();
String scopeDate = req.getScopeDate();
List<String> scopeDate = req.getScopeDate();
String remark = req.getRemark();
// 时间范围查询
if (StringUtils.isNotBlank(scopeDate)) {
String[] split = scopeDate.split(",");
lqw.ge(BusSafetyWeeklyReport::getScopeEnd, split[0])
.le(BusSafetyWeeklyReport::getScope, split[1]);
if (ObjectUtils.isNotEmpty(scopeDate)) {
lqw.ge(BusSafetyWeeklyReport::getScopeEnd, scopeDate.get(0))
.le(BusSafetyWeeklyReport::getScope, scopeDate.get(1));
}
// 模糊查询
lqw.like(StringUtils.isNotBlank(remark), BusSafetyWeeklyReport::getRemark, remark);