This commit is contained in:
zt
2025-12-03 19:54:45 +08:00
parent b5b7324f7c
commit 9c7f9ad980
9 changed files with 282 additions and 5 deletions

View File

@ -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<HiddenDangerCountVo> dangerCount(@PathVariable Long projectId) {
HiddenDangerCountVo count = hazardHiddenDangerService.dangerCount(projectId);
return R.ok(count);
}
/**
* 隐患级别列表
*/
@GetMapping("/levelList")
public R<List<HazardRuleVo>> export(HazardRuleBo bo) {
List<HazardRuleVo> list = hazardRuleService.queryList(bo);
return R.ok(list);
}
/**
* 评估隐患
*/
@SaCheckPermission("safety:hiddenDanger:edit")
@Log(title = "隐患信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/evaluate")
public R<Void> evaluate(@RequestBody EvaluateDto dto) {
return toAjax(hazardHiddenDangerService.evaluate(dto));
}
}

View File

@ -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;
/**
* 上报时间

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<HazardHiddenDanger>
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 隐患统计
*
* @param projectId 项目ID
* @return 隐患统计信息
*/
HiddenDangerCountVo dangerCount(Long projectId);
/**
* 评估隐患
*
* @param dto 评估信息
* @return 是否评估成功
*/
Boolean evaluate(EvaluateDto dto);
}

View File

@ -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<HazardHiddenDangerMapper, HazardHiddenDanger> implements IHazardHiddenDangerService {
public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDangerMapper, HazardHiddenDanger>
implements IHazardHiddenDangerService {
private final HazardHiddenDangerMapper baseMapper;
private final IHazardRuleService hazardRuleService;
/**
* 查询隐患信息
*
@ -72,6 +84,8 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<HazardHiddenDanger> 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<HazardHiddenDange
public Boolean insertByBo(HazardHiddenDangerBo bo) {
HazardHiddenDanger add = MapstructUtils.convert(bo, HazardHiddenDanger.class);
validEntityBeforeSave(add);
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id = snowflake.nextId();
add.setDangerCode("YH-"+id);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
@ -142,4 +159,36 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl<HazardHiddenDange
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public HiddenDangerCountVo dangerCount(Long projectId) {
List<HazardHiddenDanger> 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;
}
}

View File

@ -234,6 +234,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
}).toList();
List<HseSafetyInspectionGis> inspections = safetyInspectionList.stream()
// .filter(q -> "2".equals(q.getIsReply()))
.sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed())
.toList()
.stream().map(p -> {
HseSafetyInspectionGis gis = new HseSafetyInspectionGis();