diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java index cd976c12..fd21a5eb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java @@ -6,6 +6,11 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.service.IHazardRuleService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -36,6 +41,8 @@ public class HazardHiddenDangerController extends BaseController { private final IHazardHiddenDangerService hazardHiddenDangerService; + private final IHazardRuleService hazardRuleService; + /** * 查询隐患信息列表 */ @@ -102,4 +109,54 @@ public class HazardHiddenDangerController extends BaseController { @PathVariable Long[] ids) { return toAjax(hazardHiddenDangerService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 隐患统计 + */ + @GetMapping("/dangerCount/{projectId}") + public R dangerCount(@PathVariable Long projectId) { + HiddenDangerCountVo count = hazardHiddenDangerService.dangerCount(projectId); + return R.ok(count); + } + + + + /** + * 隐患级别列表 + */ + @GetMapping("/levelList") + public R> export(HazardRuleBo bo) { + List list = hazardRuleService.queryList(bo); + return R.ok(list); + } + + + /** + * 评估隐患 + */ + @SaCheckPermission("safety:hiddenDanger:edit") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/evaluate") + public R evaluate(@RequestBody EvaluateDto dto) { + return toAjax(hazardHiddenDangerService.evaluate(dto)); + } + + + + + + + + + + + + + + + + + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java index c9b42cd5..238bc8a2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -22,12 +22,26 @@ public class HazardHiddenDanger extends BaseEntity { @Serial private static final long serialVersionUID = 1L; + // 待评估 + public static final String EVALUATE = "1"; + // 待整改 + public static final String RECTIFY = "2"; + // 待复查 + public static final String REVIEW = "3"; + // 已闭环 + public static final String CLOSED = "4"; + /** * 角色ID */ @TableId(value = "id") private Long id; + /** + * 项目ID + */ + private Long projectId; + /** * 隐患编号 */ @@ -67,7 +81,7 @@ public class HazardHiddenDanger extends BaseEntity { /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java index 29de86f0..11a51589 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java @@ -66,7 +66,7 @@ public class HazardHiddenDangerBo extends BaseEntity { /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 @@ -126,7 +126,6 @@ public class HazardHiddenDangerBo extends BaseEntity { /** * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) */ - @NotBlank(message = "状态(1-待评估,2-待整改,3-待复查,4-已闭环)不能为空", groups = { AddGroup.class, EditGroup.class }) private String status; /** @@ -135,4 +134,9 @@ public class HazardHiddenDangerBo extends BaseEntity { private String remark; + /** + * 项目ID + */ + private Long projectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java new file mode 100644 index 00000000..80e01efe --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java @@ -0,0 +1,59 @@ +package org.dromara.safety.domain.dto; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.domain.HazardHiddenDanger; + +import java.time.LocalDateTime; + +/** + * 隐患信息业务对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@AutoMapper(target = HazardHiddenDanger.class, reverseConvertGenerate = false) +public class EvaluateDto { + + /** + * ID + */ + private Long id; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java index 4c002e41..c2b6a31b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -1,5 +1,7 @@ package org.dromara.safety.domain.vo; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.safety.domain.HazardHiddenDanger; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -35,6 +37,11 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "角色ID") private Long id; + /** + * 项目ID + */ + private Long projectId; + /** * 隐患编号 */ @@ -59,10 +66,16 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "上报人") private Long reporter; + /** + * 上报人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reporter") + private String reporterName; + /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 @@ -91,12 +104,24 @@ public class HazardHiddenDangerVo implements Serializable { */ private String dangerFile; + /** + * 隐患附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "dangerFile") + private String dangerFileUrl; + /** * 评估人 */ @ExcelProperty(value = "评估人") private Long evaluator; + /** + * 评估人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "evaluator") + private String evaluatorName; + /** * 评估时间 */ @@ -121,6 +146,12 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "评估附件") private String reporterFile; + /** + * 评估附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reporterFile") + private String reporterFileUrl; + /** * 整改时间 */ @@ -145,6 +176,12 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "整改负责人Id") private Long rectifyUserId; + /** + * 整改负责人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + /** * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) */ @@ -159,4 +196,5 @@ public class HazardHiddenDangerVo implements Serializable { private String remark; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java new file mode 100644 index 00000000..049c3dff --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java @@ -0,0 +1,33 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HiddenDangerCountVo { + + /** + * 总数量 + */ + private Integer total; + /** + * 待评估数量 + */ + private Long waitEvaluate; + /** + * 待整改数量 + */ + private Long waitRectify; + /** + * 待复查数量 + */ + private Long waitReview; + /** + * 已闭环数量 + */ + private Long closed; + /** + * 逾期数量 + */ + private Long overdue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java index 8ceff413..5366ebad 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -1,5 +1,6 @@ package org.dromara.safety.service; +import org.dromara.safety.domain.dto.EvaluateDto; import org.dromara.safety.domain.vo.HazardHiddenDangerVo; import org.dromara.safety.domain.bo.HazardHiddenDangerBo; import org.dromara.safety.domain.HazardHiddenDanger; @@ -7,6 +8,10 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; + import java.util.Collection; import java.util.List; @@ -67,4 +72,21 @@ public interface IHazardHiddenDangerService extends IService * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 隐患统计 + * + * @param projectId 项目ID + * @return 隐患统计信息 + */ + HiddenDangerCountVo dangerCount(Long projectId); + + /** + * 评估隐患 + * + * @param dto 评估信息 + * @return 是否评估成功 + */ + Boolean evaluate(EvaluateDto dto); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java index bdb47321..00bfe7ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -1,5 +1,9 @@ package org.dromara.safety.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -8,6 +12,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.service.IHazardRuleService; import org.springframework.stereotype.Service; import org.dromara.safety.domain.bo.HazardHiddenDangerBo; import org.dromara.safety.domain.vo.HazardHiddenDangerVo; @@ -15,6 +23,7 @@ import org.dromara.safety.domain.HazardHiddenDanger; import org.dromara.safety.mapper.HazardHiddenDangerMapper; import org.dromara.safety.service.IHazardHiddenDangerService; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Collection; @@ -27,10 +36,13 @@ import java.util.Collection; */ @RequiredArgsConstructor @Service -public class HazardHiddenDangerServiceImpl extends ServiceImpl implements IHazardHiddenDangerService { +public class HazardHiddenDangerServiceImpl extends ServiceImpl + implements IHazardHiddenDangerService { private final HazardHiddenDangerMapper baseMapper; + private final IHazardRuleService hazardRuleService; + /** * 查询隐患信息 * @@ -72,6 +84,8 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(HazardHiddenDanger::getId); + lqw.eq(bo.getProjectId()!=null, HazardHiddenDanger::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getDangerType()), HazardHiddenDanger::getDangerType, bo.getDangerType()); lqw.eq(StringUtils.isNotBlank(bo.getDangerCode()), HazardHiddenDanger::getDangerCode, bo.getDangerCode()); lqw.like(StringUtils.isNotBlank(bo.getDangerName()), HazardHiddenDanger::getDangerName, bo.getDangerName()); lqw.eq(StringUtils.isNotBlank(bo.getReportLocation()), HazardHiddenDanger::getReportLocation, bo.getReportLocation()); @@ -101,6 +115,9 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -142,4 +159,36 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; } + + @Override + public HiddenDangerCountVo dangerCount(Long projectId) { + List list = lambdaQuery().eq(HazardHiddenDanger::getProjectId, projectId).list(); + HiddenDangerCountVo count = new HiddenDangerCountVo(); + count.setTotal(list.size()); + count.setWaitEvaluate(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.EVALUATE)).count()); + count.setWaitRectify(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + count.setWaitReview(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.REVIEW)).count()); + count.setClosed(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.CLOSED)).count()); + count.setOverdue(list.stream().filter(item ->item.getRectifyTime()!=null && item.getRectifyTime().isBefore(LocalDateTime.now()) + && item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + return count; + } + + @Override + public Boolean evaluate(EvaluateDto dto) { + HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId()); + BeanUtil.copyProperties(dto,hazardHiddenDanger); + HazardRule byId = hazardRuleService.getById(hazardHiddenDanger.getDangerLevelId()); + String responseUnit = byId.getResponseUnit(); + hazardHiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); + LocalDateTime now = LocalDateTime.now(); + if (responseUnit.equals("3")) { + hazardHiddenDanger.setRectifyTime(now.plusDays(byId.getResponseTime())); + } else if (responseUnit.equals("2")) { + hazardHiddenDanger.setRectifyTime(now.plusHours(byId.getResponseTime())); + } else if (responseUnit.equals("1")) { + hazardHiddenDanger.setRectifyTime(now.plusMinutes(byId.getResponseTime())); + } + return baseMapper.updateById(hazardHiddenDanger) > 0; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java index 440fade3..65104867 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java @@ -234,6 +234,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl inspections = safetyInspectionList.stream() // .filter(q -> "2".equals(q.getIsReply())) + .sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed()) .toList() .stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis();