隐患整改

This commit is contained in:
lcj
2025-12-05 14:24:17 +08:00
parent 6032869417
commit 46299e5732
5 changed files with 107 additions and 52 deletions

View File

@ -34,6 +34,11 @@ public class HazardHiddenDangerRectify extends BaseEntity {
*/ */
private Long hiddenDangerId; private Long hiddenDangerId;
/**
* 整改期限
*/
private LocalDateTime rectifyDeadline;
/** /**
* 整改次数 * 整改次数
*/ */

View File

@ -41,6 +41,12 @@ public class HazardHiddenDangerRectifyVo implements Serializable {
@ExcelProperty(value = "关联隐患ID") @ExcelProperty(value = "关联隐患ID")
private Long hiddenDangerId; private Long hiddenDangerId;
/**
* 整改期限
*/
@ExcelProperty(value = "整改期限")
private LocalDateTime rectifyDeadline;
/** /**
* 整改次数 * 整改次数
*/ */
@ -89,6 +95,12 @@ public class HazardHiddenDangerRectifyVo implements Serializable {
@ExcelProperty(value = "复查人ID") @ExcelProperty(value = "复查人ID")
private Long reviewUserId; private Long reviewUserId;
/**
* 复查人名字
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reviewUserId")
private String reviewUserName;
/** /**
* 复查说明 * 复查说明
*/ */
@ -106,6 +118,7 @@ public class HazardHiddenDangerRectifyVo implements Serializable {
*/ */
@Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reviewFiles") @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reviewFiles")
private String reviewFilesUrl; private String reviewFilesUrl;
/** /**
* 复查时间 * 复查时间
*/ */

View File

@ -32,7 +32,6 @@ import java.time.LocalDateTime;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 隐患整改情况Service业务层处理 * 隐患整改情况Service业务层处理
@ -158,36 +157,29 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl<HazardHidd
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean rectification(HazardHiddenDangerRectifyRectificationReq req) { public Boolean rectification(HazardHiddenDangerRectifyRectificationReq req) {
Long id = req.getId(); Long id = req.getId();
HazardHiddenDangerRectify oldRectify = this.getById(id); HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id);
if (oldRectify == null) {
throw new ServiceException("未找到该数据");
}
Long userId = LoginHelper.getUserId();
if (!oldRectify.getRectifyUserId().equals(userId)) {
throw new ServiceException("您没有权限修改该数据");
}
if (!oldRectify.getReviewStatus().equals(HseSafetyInspectionReviewTypeEnum.NOT_REVIEW.getValue())) {
throw new ServiceException("该数据已审核,请勿重复操作");
}
Long hiddenDangerId = oldRectify.getHiddenDangerId();
HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(hiddenDangerId);
if (hiddenDanger == null) { if (hiddenDanger == null) {
throw new ServiceException("未找到该数据"); throw new ServiceException("未找到该数据");
} }
// 判断是否为最新的一条 HazardHiddenDangerRectify oldRectify = this.lambdaQuery()
Integer maxCount = this.lambdaQuery() .eq(HazardHiddenDangerRectify::getHiddenDangerId, id)
.eq(HazardHiddenDangerRectify::getHiddenDangerId, hiddenDangerId)
.select(HazardHiddenDangerRectify::getRectifyCount)
.orderByDesc(HazardHiddenDangerRectify::getRectifyCount) .orderByDesc(HazardHiddenDangerRectify::getRectifyCount)
.last("limit 1") .last("limit 1")
.one() .one();
.getRectifyCount(); // todo 待完善
if (!Objects.equals(maxCount, oldRectify.getRectifyCount())) { /* Long userId = LoginHelper.getUserId();
throw new ServiceException("请修改最新的一条整改记录"); if (!oldRectify.getRectifyUserId().equals(userId)) {
throw new ServiceException("您没有权限修改该数据");
}*/
if (!oldRectify.getReviewStatus().equals(HseSafetyInspectionReviewTypeEnum.NOT_REVIEW.getValue())) {
throw new ServiceException("该数据已审核,请勿重复操作");
} }
HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify();
BeanUtils.copyProperties(req, rectify); rectify.setId(oldRectify.getId());
rectify.setRectifyDesc(req.getRectifyDesc());
rectify.setRectifyFiles(req.getRectifyFiles());
rectify.setRectifyTime(LocalDateTime.now()); rectify.setRectifyTime(LocalDateTime.now());
boolean update = this.updateById(rectify); boolean update = this.updateById(rectify);
if (!update) { if (!update) {
@ -218,34 +210,32 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl<HazardHidd
&& !reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.UNPASS.getValue())) { && !reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.UNPASS.getValue())) {
throw new ServiceException("请选择复查状态"); throw new ServiceException("请选择复查状态");
} }
HazardHiddenDangerRectify oldRectify = this.getById(id); HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id);
if (oldRectify == null) {
throw new ServiceException("未找到该数据");
}
Long userId = LoginHelper.getUserId();
if (!oldRectify.getReviewUserId().equals(userId)) {
throw new ServiceException("您没有权限审核该数据");
}
Long hiddenDangerId = oldRectify.getHiddenDangerId();
// 判断是否为最新的一条
Integer maxCount = this.lambdaQuery()
.eq(HazardHiddenDangerRectify::getHiddenDangerId, hiddenDangerId)
.select(HazardHiddenDangerRectify::getRectifyCount)
.orderByDesc(HazardHiddenDangerRectify::getRectifyCount)
.last("limit 1")
.one()
.getRectifyCount();
if (!Objects.equals(maxCount, oldRectify.getRectifyCount())) {
throw new ServiceException("请审核最新的一条整改记录");
}
HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(hiddenDangerId);
if (hiddenDanger == null) { if (hiddenDanger == null) {
throw new ServiceException("未找到该数据"); throw new ServiceException("未找到该数据");
} }
HazardHiddenDangerRectify oldRectify = this.lambdaQuery()
.eq(HazardHiddenDangerRectify::getHiddenDangerId, id)
.orderByDesc(HazardHiddenDangerRectify::getRectifyCount)
.last("limit 1")
.one();
Long rectifyId = oldRectify.getId();
Long userId = LoginHelper.getUserId();
// todo 待完善
/* if (!oldRectify.getReviewUserId().equals(userId)) {
throw new ServiceException("您没有权限审核该数据");
}*/
LocalDateTime now = LocalDateTime.now();
HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify();
String reviewDesc = req.getReviewDesc();
String reviewFiles = req.getReviewFiles();
BeanUtils.copyProperties(req, rectify); BeanUtils.copyProperties(req, rectify);
rectify.setReviewTime(LocalDateTime.now()); rectify.setId(rectifyId);
synchronized (("hd_" + hiddenDangerId).intern()) { rectify.setReviewDesc(reviewDesc);
rectify.setReviewFiles(reviewFiles);
rectify.setReviewStatus(reviewStatus);
rectify.setReviewTime(now);
synchronized (("hd_" + id).intern()) {
boolean update = this.updateById(rectify); boolean update = this.updateById(rectify);
if (!update) { if (!update) {
throw new ServiceException("数据修改失败"); throw new ServiceException("数据修改失败");
@ -255,20 +245,24 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl<HazardHidd
// 修改状态 // 修改状态
hiddenDanger.setStatus(HazardHiddenDanger.CLOSED); hiddenDanger.setStatus(HazardHiddenDanger.CLOSED);
} else { } else {
// 修改状态
hiddenDanger.setStatus(HazardHiddenDanger.RECTIFY);
LocalDateTime rectificationDeadline = req.getRectificationDeadline(); LocalDateTime rectificationDeadline = req.getRectificationDeadline();
if (rectificationDeadline == null) { if (rectificationDeadline == null) {
throw new ServiceException("请选择整改期限"); throw new ServiceException("请选择整改期限");
} }
if (rectificationDeadline.isBefore(now)) {
throw new ServiceException("整改期限不能小于当前时间");
}
// 修改状态
hiddenDanger.setStatus(HazardHiddenDanger.RECTIFY);
// 设置新的整改期限 // 设置新的整改期限
hiddenDanger.setRectifyTime(rectificationDeadline); hiddenDanger.setRectifyTime(rectificationDeadline);
// 生成新的整改 // 生成新的整改
HazardHiddenDangerRectify newRectify = new HazardHiddenDangerRectify(); HazardHiddenDangerRectify newRectify = new HazardHiddenDangerRectify();
newRectify.setHiddenDangerId(hiddenDangerId); newRectify.setHiddenDangerId(id);
newRectify.setRectifyCount(maxCount + 1); newRectify.setRectifyCount(oldRectify.getRectifyCount() + 1);
newRectify.setReviewUserId(rectify.getReviewUserId()); newRectify.setReviewUserId(rectify.getReviewUserId());
newRectify.setRectifyUserId(rectifyUserId != null ? rectifyUserId : oldRectify.getRectifyUserId()); newRectify.setRectifyUserId(rectifyUserId != null ? rectifyUserId : oldRectify.getRectifyUserId());
newRectify.setRectifyDeadline(rectificationDeadline);
boolean save = this.save(newRectify); boolean save = this.save(newRectify);
if (!save) { if (!save) {
throw new ServiceException("数据保存失败"); throw new ServiceException("数据保存失败");

View File

@ -8,20 +8,25 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.safety.domain.HazardHiddenDanger; import org.dromara.safety.domain.HazardHiddenDanger;
import org.dromara.safety.domain.HazardHiddenDangerRectify;
import org.dromara.safety.domain.HazardRule; import org.dromara.safety.domain.HazardRule;
import org.dromara.safety.domain.bo.HazardHiddenDangerBo; import org.dromara.safety.domain.bo.HazardHiddenDangerBo;
import org.dromara.safety.domain.dto.EvaluateDto; import org.dromara.safety.domain.dto.EvaluateDto;
import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo;
import org.dromara.safety.domain.vo.HazardHiddenDangerVo; import org.dromara.safety.domain.vo.HazardHiddenDangerVo;
import org.dromara.safety.domain.vo.HiddenDangerCountVo; import org.dromara.safety.domain.vo.HiddenDangerCountVo;
import org.dromara.safety.mapper.HazardHiddenDangerMapper; import org.dromara.safety.mapper.HazardHiddenDangerMapper;
import org.dromara.safety.mapper.HazardHiddenDangerRectifyMapper;
import org.dromara.safety.service.IHazardHiddenDangerService; import org.dromara.safety.service.IHazardHiddenDangerService;
import org.dromara.safety.service.IHazardRuleService; import org.dromara.safety.service.IHazardRuleService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collection; import java.util.Collection;
@ -43,6 +48,8 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
private final IHazardRuleService hazardRuleService; private final IHazardRuleService hazardRuleService;
private final HazardHiddenDangerRectifyMapper hazardHiddenDangerRectifyMapper;
/** /**
* 查询隐患信息 * 查询隐患信息
* *
@ -51,7 +58,15 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
*/ */
@Override @Override
public HazardHiddenDangerVo queryById(Long id) { public HazardHiddenDangerVo queryById(Long id) {
return baseMapper.selectVoById(id); HazardHiddenDangerVo dangerVo = baseMapper.selectVoById(id);
if (dangerVo == null) {
throw new ServiceException("未找到该数据");
}
List<HazardHiddenDangerRectifyVo> dangerRectifyVos = hazardHiddenDangerRectifyMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class)
.eq(HazardHiddenDangerRectify::getHiddenDangerId, id)
.orderByAsc(HazardHiddenDangerRectify::getRectifyCount));
dangerVo.setRectifyList(dangerRectifyVos);
return dangerVo;
} }
/** /**
@ -195,6 +210,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean evaluate(EvaluateDto dto) { public Boolean evaluate(EvaluateDto dto) {
HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId()); HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId());
BeanUtil.copyProperties(dto, hazardHiddenDanger); BeanUtil.copyProperties(dto, hazardHiddenDanger);
@ -209,6 +225,20 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
} else if (responseUnit.equals("1")) { } else if (responseUnit.equals("1")) {
hazardHiddenDanger.setRectifyTime(now.plusMinutes(byId.getResponseTime())); hazardHiddenDanger.setRectifyTime(now.plusMinutes(byId.getResponseTime()));
} }
return baseMapper.updateById(hazardHiddenDanger) > 0; // 修改数据
if (baseMapper.updateById(hazardHiddenDanger) <= 0) {
throw new ServiceException("数据修改失败");
}
// 添加整改任务
HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify();
rectify.setHiddenDangerId(dto.getId());
rectify.setRectifyDeadline(hazardHiddenDanger.getRectifyTime());
rectify.setRectifyUserId(hazardHiddenDanger.getRectifyUserId());
rectify.setReviewUserId(hazardHiddenDanger.getEvaluator());
rectify.setRectifyCount(1);
if (hazardHiddenDangerRectifyMapper.insert(rectify) <= 0) {
throw new ServiceException("数据保存失败");
}
return true;
} }
} }

View File

@ -2106,3 +2106,16 @@ insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0', values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0',
'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, ''); 'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, '');
CREATE TABLE `hazard_delay_task`
(
`id` BIGINT PRIMARY KEY COMMENT '主键',
`biz_type` VARCHAR(50) NOT NULL COMMENT '业务类型',
`biz_id` BIGINT NOT NULL COMMENT '业务ID',
`execute_time` DATETIME NOT NULL COMMENT '执行的时间点',
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '任务状态 0未执行 1执行中 2执行成功 3执行失败',
`retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数',
`max_retry` INT NOT NULL DEFAULT 3 COMMENT '最大重试次数',
`fail_reason` VARCHAR(1024) NULL COMMENT '失败原因'
);