危大工程-技术交底,过程监控

This commit is contained in:
lg
2025-12-06 19:07:28 +08:00
parent 35d1cfc668
commit 0f1ad34342
28 changed files with 2005 additions and 39 deletions

View File

@ -311,13 +311,11 @@ springdoc:
packages-to-scan: org.dromara.ai
- group: 31.投标管理模块
packages-to-scan: org.dromara.bidding
- group: 33.机械模块
packages-to-scan: org.dromara.mechanical.jxgl
- group: 32.设备模块
packages-to-scan: org.dromara.device
- group: 33.摄像头模块
packages-to-scan: org.dromara.other
- group: 34.机械安全模块
- group: 34.机械模块
packages-to-scan: org.dromara.mechanical
# knife4j的增强配置不需要增强可以不配
knife4j:

View File

@ -61,8 +61,7 @@ public class JxAqjcglVo implements Serializable {
/**
* 检查类型
*/
@ExcelProperty(value = "检查类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "jx_jclx")
@ExcelProperty(value = "检查类型")
private String inspectionType;
/**
@ -101,8 +100,7 @@ public class JxAqjcglVo implements Serializable {
/**
* 参与人(多个用逗号分隔)
*/
@ExcelProperty(value = "参与人", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个用逗号分隔")
@ExcelProperty(value = "参与人")
private String participants;
/**
@ -138,21 +136,19 @@ public class JxAqjcglVo implements Serializable {
/**
* 设备类型
*/
@ExcelProperty(value = "设备类型", converter = ExcelDictConvert.class)
@ExcelProperty(value = "设备类型")
private String equipmentType;
/**
* 检查结果
*/
@ExcelProperty(value = "检查结果", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "jx_jcjg")
@ExcelProperty(value = "检查结果")
private String inspectionResult;
/**
* 风险等级
*/
@ExcelProperty(value = "风险等级", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "jx_fxdj")
@ExcelProperty(value = "风险等级")
private String riskGrade;
/**

View File

@ -2,6 +2,7 @@ package org.dromara.mechanical.jxgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -11,8 +12,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.mechanical.jxgl.domain.JxGzwx;
import org.dromara.mechanical.jxgl.domain.JxWhjl;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo;
import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo;
import org.dromara.mechanical.jxgl.service.IJxGzwxService;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
@ -22,9 +26,7 @@ import org.dromara.mechanical.jxgl.service.IJxGzwxJlService;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 机械故障维修记录Service业务层处理
@ -39,6 +41,7 @@ public class JxGzwxJlServiceImpl extends ServiceImpl<JxGzwxJlMapper, JxGzwxJl> i
private final JxGzwxJlMapper baseMapper;
private final IJxGzwxService jxGzwxService;
private final ISysOssService sysOssService;
/**
* 查询机械故障维修记录
@ -154,6 +157,21 @@ public class JxGzwxJlServiceImpl extends ServiceImpl<JxGzwxJlMapper, JxGzwxJl> i
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxGzwxJlVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -55,7 +55,6 @@ public class JxSgxxjlbBo extends BaseEntity {
/**
* 设备台账id
*/
@NotBlank(message = "设备台账id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long equipmentId;
/**

View File

@ -40,29 +40,25 @@ public class JxSgxxjlbVo implements Serializable {
/**
* 事故编号如SGJL-20230620-001
*/
@ExcelProperty(value = "事故编号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=SGJL-20230620-001")
@ExcelProperty(value = "事故编号")
private String accidentCode;
/**
* 事故等级(下拉选择)
*/
@ExcelProperty(value = "事故等级", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "下=拉选择")
@ExcelProperty(value = "事故等级")
private String accidentLevel;
/**
* 事故类型(下拉选择)
*/
@ExcelProperty(value = "事故类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "下=拉选择")
@ExcelProperty(value = "事故类型")
private String accidentType;
/**
* 设备名称(下拉选择)
*/
@ExcelProperty(value = "设备名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "下=拉选择")
@ExcelProperty(value = "设备名称")
private String equipmentName;
/**
@ -86,22 +82,19 @@ public class JxSgxxjlbVo implements Serializable {
/**
* 事故描述(详细经过)
*/
@ExcelProperty(value = "事故描述", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "详=细经过")
@ExcelProperty(value = "事故描述")
private String accidentDescription;
/**
* 直接损失金额(元)
*/
@ExcelProperty(value = "直接损失金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "元=")
@ExcelProperty(value = "直接损失金额")
private BigDecimal directLoss;
/**
* 间接损失金额(元)
*/
@ExcelProperty(value = "间接损失金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "元=")
@ExcelProperty(value = "间接损失金额")
private BigDecimal indirectLoss;
/**
@ -113,8 +106,7 @@ public class JxSgxxjlbVo implements Serializable {
/**
* 人员伤亡情况(如有)
*/
@ExcelProperty(value = "人员伤亡情况", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=有")
@ExcelProperty(value = "人员伤亡情况")
private String casualtySituation;
/**

View File

@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
@ -20,9 +22,7 @@ import org.dromara.mechanical.jxsgjl.mapper.JxSgxxjlbMapper;
import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 机械事故信息记录Service业务层处理
@ -36,6 +36,9 @@ public class JxSgxxjlbServiceImpl extends ServiceImpl<JxSgxxjlbMapper, JxSgxxjlb
private final JxSgxxjlbMapper baseMapper;
private final ISysOssService sysOssService;
/**
* 查询机械事故信息记录
*
@ -153,6 +156,21 @@ public class JxSgxxjlbServiceImpl extends ServiceImpl<JxSgxxjlbMapper, JxSgxxjlb
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxSgxxjlbVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -16,6 +16,7 @@ import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq;
import org.dromara.mechanical.jxaqgl.domain.MonthDateRange;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService;
import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService;
import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo;
import org.dromara.mechanical.jxzgbh.domain.JxFcxx;
import org.dromara.mechanical.jxzgbh.domain.JxZgxx;
import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo;
@ -23,6 +24,7 @@ import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo;
import org.dromara.mechanical.jxzgbh.domain.vo.*;
import org.dromara.mechanical.jxzgbh.service.IJxFcxxService;
import org.dromara.mechanical.jxzgbh.service.IJxZgxxService;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo;
import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh;
@ -31,10 +33,7 @@ import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 机械隐患整改与闭环Service业务层处理
@ -56,6 +55,9 @@ public class JxYhzgbhServiceImpl extends ServiceImpl<JxYhzgbhMapper, JxYhzgbh> i
private final IJxAqjcglService jxAqjcglService;
private final ISysOssService sysOssService;
/**
* 查询机械隐患整改与闭环
*
@ -185,6 +187,21 @@ public class JxYhzgbhServiceImpl extends ServiceImpl<JxYhzgbhMapper, JxYhzgbh> i
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
JxYhzgbhVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -45,6 +46,16 @@ public class HseDangerArchiveController extends BaseController {
return hseDangerArchiveService.queryPageList(bo, pageQuery);
}
/**
* 查询技术交底和过程监控文件
* @param id 危大工程id
*/
@GetMapping("/getJsjdYGcjk/{id}")
public R<HseJsjdYuJkjcVo> list(@PathVariable Long id) {
return R.ok(hseDangerArchiveService.getJsjdYGcjk(id));
}
/**
* 导出危大工程档案列表
*/

View File

@ -0,0 +1,18 @@
package org.dromara.safety.domain.vo;
import lombok.Data;
@Data
public class HseJsjdYuJkjcVo {
/**
* 技术交底文件
*/
private String jsjdFile;
/**
* 过程监控文件
*/
private String gcjkFile;
}

View File

@ -0,0 +1,28 @@
package org.dromara.safety.enums;
public enum AqEnums {
AQJDZT_S("是否交底", "1"),
AQJDZT_F("是否交底", "2"),
AQWXJX_S("是否存在危险迹象", "1"),
AQWXJX_F("是否存在危险迹象", "2");
private final String TypeName;
private final String TypeValue;
public String getTypeName() {
return TypeName;
}
public String getTypeValue() {
return TypeValue;
}
AqEnums(String TypeName, String TypeValue) {
this.TypeName = TypeName;
this.TypeValue = TypeValue;
}
}

View File

@ -0,0 +1,133 @@
package org.dromara.safety.gcjkjl.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.safety.gcjkjl.domain.vo.JkjcHeadVo;
import org.dromara.safety.jsjd.domain.bo.HseJsjdBo;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.safety.jsjd.service.IHseJsjdService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo;
import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo;
import org.dromara.safety.gcjkjl.service.IHseGcjkService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 安全-过程监控记录
*
* @author Lion Li
* @date 2025-12-06
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/gcjkjl/gcjk")
public class HseGcjkController extends BaseController {
private final IHseGcjkService hseGcjkService;
private final IHseJsjdService hseJsjdService;
/**
* 查询安全技术交底列表
*/
@SaCheckPermission("gcjkjl:gcjk:list")
@GetMapping("/getlist")
public TableDataInfo<HseJsjdVo> list(HseJsjdBo bo, PageQuery pageQuery) {
return hseJsjdService.queryPageList(bo, pageQuery);
}
/**
* 查询安全-过程监控记录列表
*/
@SaCheckPermission("gcjkjl:gcjk:list")
@GetMapping("/list")
public TableDataInfo<HseGcjkVo> list(HseGcjkBo bo, PageQuery pageQuery) {
return hseGcjkService.queryPageList(bo, pageQuery);
}
/**
* 查询安全-过程监控记录头部数据
*/
@SaCheckPermission("gcjkjl:gcjk:list")
@GetMapping("/listHead")
public R<JkjcHeadVo> list(HseGcjkBo bo) {
return R.ok(hseGcjkService.listHead(bo));
}
/**
* 导出安全-过程监控记录列表
*/
@SaCheckPermission("gcjkjl:gcjk:export")
@Log(title = "安全-过程监控记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HseGcjkBo bo, HttpServletResponse response) {
List<HseGcjkVo> list = hseGcjkService.queryList(bo);
ExcelUtil.exportExcel(list, "安全-过程监控记录", HseGcjkVo.class, response);
}
/**
* 获取安全-过程监控记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("gcjkjl:gcjk:query")
@GetMapping("/{id}")
public R<HseGcjkVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(hseGcjkService.queryById(id));
}
/**
* 新增安全-过程监控记录
*/
@SaCheckPermission("gcjkjl:gcjk:add")
@Log(title = "安全-过程监控记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody HseGcjkBo bo) {
return toAjax(hseGcjkService.insertByBo(bo));
}
/**
* 修改安全-过程监控记录
*/
@SaCheckPermission("gcjkjl:gcjk:edit")
@Log(title = "安全-过程监控记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody HseGcjkBo bo) {
return toAjax(hseGcjkService.updateByBo(bo));
}
/**
* 删除安全-过程监控记录
*
* @param ids 主键串
*/
@SaCheckPermission("gcjkjl:gcjk:remove")
@Log(title = "安全-过程监控记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(hseGcjkService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,196 @@
package org.dromara.safety.gcjkjl.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 安全-过程监控记录对象 hse_gcjk
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("hse_gcjk")
public class HseGcjk extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 监控编号
*/
private String monitorNo;
/**
* 项目ID
*/
private Long projectId;
/**
* 危大工程ID
*/
private Long masterId;
/**
* 危大工程名称
*/
private String deName;
/**
* 监控内容
*/
private String monitorContent;
/**
* 监控频次
*/
private String monitorFrequency;
/**
* 监控责任人姓名
*/
private String monitorResponsiblePerson;
/**
* 过程记录日期
*/
private LocalDate recordDate;
/**
* 是否存在危险迹象10
*/
private String hasHazardSign;
/**
* 施工状态描述
*/
private String constructionStatus;
/**
* 关键工序完成情况
*/
private String keyProcessProgress;
/**
* 是否旁站10
*/
private String isOnSiteSupervision;
/**
* 整改期限
*/
private LocalDate abarbeitungQx;
/**
* 整改人
*/
private String abarbeitungRen;
/**
* 整改要求
*/
private String abarbeitungYq;
/**
* 旁站记录内容
*/
private String supervisionJl;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionJs;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionKs;
/**
* 问题描述
*/
private String problemDescription;
/**
* 旁站文件
*/
private String supervisionFile;
/**
* 旁站人
*/
private String supervisionRen;
/**
* 旁站单位
*/
private String supervisionDw;
/**
* 验收意见
*/
private String inspectionOpinion;
/**
* 验收人姓名
*/
private String inspector;
/**
* 验收时间
*/
private LocalDateTime inspectionTime;
/**
* 审核标志
*/
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
}

View File

@ -0,0 +1,189 @@
package org.dromara.safety.gcjkjl.domain.bo;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 安全-过程监控记录业务对象 hse_gcjk
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HseGcjk.class, reverseConvertGenerate = false)
public class HseGcjkBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 监控编号
*/
@NotBlank(message = "监控编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String monitorNo;
/**
* 危大工程ID
*/
@NotNull(message = "危大工程ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 危大工程名称
*/
private String deName;
/**
* 监控内容
*/
@NotBlank(message = "监控内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String monitorContent;
/**
* 监控频次
*/
@NotBlank(message = "监控频次不能为空", groups = { AddGroup.class, EditGroup.class })
private String monitorFrequency;
/**
* 监控责任人姓名
*/
@NotBlank(message = "监控责任人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String monitorResponsiblePerson;
/**
* 过程记录日期
*/
@NotNull(message = "过程记录日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate recordDate;
/**
* 是否存在危险迹象10
*/
@NotNull(message = "是否存在危险迹象10不能为空", groups = { AddGroup.class, EditGroup.class })
private String hasHazardSign;
/**
* 施工状态描述
*/
@NotBlank(message = "施工状态描述不能为空", groups = { AddGroup.class, EditGroup.class })
private String constructionStatus;
/**
* 关键工序完成情况
*/
private String keyProcessProgress;
/**
* 是否旁站10
*/
@NotNull(message = "是否旁站10不能为空", groups = { AddGroup.class, EditGroup.class })
private String isOnSiteSupervision;
/**
* 验收意见
*/
private String inspectionOpinion;
/**
* 验收人姓名
*/
private String inspector;
/**
* 验收时间
*/
private LocalDateTime inspectionTime;
/**
* 审核标志
*/
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 整改期限
*/
private LocalDate abarbeitungQx;
/**
* 整改人
*/
private String abarbeitungRen;
/**
* 整改要求
*/
private String abarbeitungYq;
/**
* 旁站记录内容
*/
private String supervisionJl;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionJs;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionKs;
/**
* 问题描述
*/
private String problemDescription;
/**
* 旁站文件
*/
private String supervisionFile;
/**
* 旁站人
*/
private String supervisionRen;
/**
* 旁站单位
*/
private String supervisionDw;
}

View File

@ -0,0 +1,209 @@
package org.dromara.safety.gcjkjl.domain.vo;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 安全-过程监控记录视图对象 hse_gcjk
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = HseGcjk.class)
public class HseGcjkVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 监控编号
*/
@ExcelProperty(value = "监控编号")
private String monitorNo;
/**
* 项目ID
*/
private Long projectId;
/**
* 危大工程ID
*/
@ExcelProperty(value = "危大工程ID")
private Long masterId;
/**
* 危大工程名称
*/
@ExcelProperty(value = "危大工程名称")
private String deName;
/**
* 监控内容
*/
@ExcelProperty(value = "监控内容")
private String monitorContent;
/**
* 监控频次
*/
@ExcelProperty(value = "监控频次")
private String monitorFrequency;
/**
* 监控责任人姓名
*/
@ExcelProperty(value = "监控责任人姓名")
private String monitorResponsiblePerson;
/**
* 过程记录日期
*/
@ExcelProperty(value = "过程记录日期")
private LocalDate recordDate;
/**
* 是否存在危险迹象10
*/
@ExcelProperty(value = "是否存在危险迹象", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=0")
private String hasHazardSign;
/**
* 施工状态描述
*/
@ExcelProperty(value = "施工状态描述")
private String constructionStatus;
/**
* 关键工序完成情况
*/
@ExcelProperty(value = "关键工序完成情况")
private String keyProcessProgress;
/**
* 是否旁站10
*/
@ExcelProperty(value = "是否旁站", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=0")
private String isOnSiteSupervision;
/**
* 验收意见
*/
@ExcelProperty(value = "验收意见")
private String inspectionOpinion;
/**
* 验收人姓名
*/
@ExcelProperty(value = "验收人姓名")
private String inspector;
/**
* 验收时间
*/
@ExcelProperty(value = "验收时间")
private LocalDateTime inspectionTime;
/**
* 审核标志
*/
@ExcelProperty(value = "审核标志")
private String auditStatus;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 整改期限
*/
private LocalDate abarbeitungQx;
/**
* 整改人
*/
private String abarbeitungRen;
/**
* 整改要求
*/
private String abarbeitungYq;
/**
* 旁站记录内容
*/
private String supervisionJl;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionJs;
/**
* 旁站结束时间
*/
private LocalDateTime supervisionKs;
/**
* 问题描述
*/
private String problemDescription;
/**
* 旁站文件
*/
private String supervisionFile;
/**
* 旁站人
*/
private String supervisionRen;
/**
* 旁站单位
*/
private String supervisionDw;
}

View File

@ -0,0 +1,23 @@
package org.dromara.safety.gcjkjl.domain.vo;
import lombok.Data;
@Data
public class JkjcHeadVo {
/**
* 监控总数
*/
private Long zs = 0L;
/**
*存在危险迹象
*/
private Long czwxjx = 0L;
/**
* 不存在危险迹象
*/
private Long bczwxjx = 0L;
}

View File

@ -0,0 +1,15 @@
package org.dromara.safety.gcjkjl.mapper;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 安全-过程监控记录Mapper接口
*
* @author Lion Li
* @date 2025-12-06
*/
public interface HseGcjkMapper extends BaseMapperPlus<HseGcjk, HseGcjkVo> {
}

View File

@ -0,0 +1,74 @@
package org.dromara.safety.gcjkjl.service;
import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo;
import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
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.gcjkjl.domain.vo.JkjcHeadVo;
import java.util.Collection;
import java.util.List;
/**
* 安全-过程监控记录Service接口
*
* @author Lion Li
* @date 2025-12-06
*/
public interface IHseGcjkService extends IService<HseGcjk>{
/**
* 查询安全-过程监控记录
*
* @param id 主键
* @return 安全-过程监控记录
*/
HseGcjkVo queryById(Long id);
/**
* 分页查询安全-过程监控记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 安全-过程监控记录分页列表
*/
TableDataInfo<HseGcjkVo> queryPageList(HseGcjkBo bo, PageQuery pageQuery);
/**
* 查询符合条件的安全-过程监控记录列表
*
* @param bo 查询条件
* @return 安全-过程监控记录列表
*/
List<HseGcjkVo> queryList(HseGcjkBo bo);
/**
* 新增安全-过程监控记录
*
* @param bo 安全-过程监控记录
* @return 是否新增成功
*/
Boolean insertByBo(HseGcjkBo bo);
/**
* 修改安全-过程监控记录
*
* @param bo 安全-过程监控记录
* @return 是否修改成功
*/
Boolean updateByBo(HseGcjkBo bo);
/**
* 校验并批量删除安全-过程监控记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JkjcHeadVo listHead(HseGcjkBo bo);
}

View File

@ -0,0 +1,187 @@
package org.dromara.safety.gcjkjl.service.impl;
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;
import org.dromara.common.mybatis.core.page.PageQuery;
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.common.utils.BatchNumberGenerator;
import org.dromara.safety.enums.AqEnums;
import org.dromara.safety.gcjkjl.domain.vo.JkjcHeadVo;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo;
import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
import org.dromara.safety.gcjkjl.mapper.HseGcjkMapper;
import org.dromara.safety.gcjkjl.service.IHseGcjkService;
import java.util.*;
/**
* 安全-过程监控记录Service业务层处理
*
* @author Lion Li
* @date 2025-12-06
*/
@RequiredArgsConstructor
@Service
public class HseGcjkServiceImpl extends ServiceImpl<HseGcjkMapper, HseGcjk> implements IHseGcjkService {
private final HseGcjkMapper baseMapper;
private final ISysOssService sysOssService;
/**
* 查询安全-过程监控记录
*
* @param id 主键
* @return 安全-过程监控记录
*/
@Override
public HseGcjkVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询安全-过程监控记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 安全-过程监控记录分页列表
*/
@Override
public TableDataInfo<HseGcjkVo> queryPageList(HseGcjkBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<HseGcjk> lqw = buildQueryWrapper(bo);
Page<HseGcjkVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的安全-过程监控记录列表
*
* @param bo 查询条件
* @return 安全-过程监控记录列表
*/
@Override
public List<HseGcjkVo> queryList(HseGcjkBo bo) {
LambdaQueryWrapper<HseGcjk> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<HseGcjk> buildQueryWrapper(HseGcjkBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<HseGcjk> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(HseGcjk::getId);
lqw.eq(StringUtils.isNotBlank(bo.getMonitorNo()), HseGcjk::getMonitorNo, bo.getMonitorNo());
lqw.eq(bo.getMasterId() != null, HseGcjk::getMasterId, bo.getMasterId());
lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseGcjk::getDeName, bo.getDeName());
lqw.eq(StringUtils.isNotBlank(bo.getMonitorContent()), HseGcjk::getMonitorContent, bo.getMonitorContent());
lqw.eq(StringUtils.isNotBlank(bo.getMonitorFrequency()), HseGcjk::getMonitorFrequency, bo.getMonitorFrequency());
lqw.eq(StringUtils.isNotBlank(bo.getMonitorResponsiblePerson()), HseGcjk::getMonitorResponsiblePerson, bo.getMonitorResponsiblePerson());
lqw.eq(bo.getRecordDate() != null, HseGcjk::getRecordDate, bo.getRecordDate());
lqw.eq(bo.getHasHazardSign() != null, HseGcjk::getHasHazardSign, bo.getHasHazardSign());
lqw.eq(StringUtils.isNotBlank(bo.getConstructionStatus()), HseGcjk::getConstructionStatus, bo.getConstructionStatus());
lqw.eq(StringUtils.isNotBlank(bo.getKeyProcessProgress()), HseGcjk::getKeyProcessProgress, bo.getKeyProcessProgress());
lqw.eq(bo.getIsOnSiteSupervision() != null, HseGcjk::getIsOnSiteSupervision, bo.getIsOnSiteSupervision());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionOpinion()), HseGcjk::getInspectionOpinion, bo.getInspectionOpinion());
lqw.eq(StringUtils.isNotBlank(bo.getInspector()), HseGcjk::getInspector, bo.getInspector());
lqw.eq(bo.getInspectionTime() != null, HseGcjk::getInspectionTime, bo.getInspectionTime());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), HseGcjk::getAuditStatus, bo.getAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseGcjk::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增安全-过程监控记录
*
* @param bo 安全-过程监控记录
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(HseGcjkBo bo) {
HseGcjk add = MapstructUtils.convert(bo, HseGcjk.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("ANGCJC-");
add.setMonitorNo(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改安全-过程监控记录
*
* @param bo 安全-过程监控记录
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(HseGcjkBo bo) {
HseGcjk update = MapstructUtils.convert(bo, HseGcjk.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(HseGcjk entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除安全-过程监控记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
HseGcjkVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public JkjcHeadVo listHead(HseGcjkBo bo) {
JkjcHeadVo jkjcHeadVo = new JkjcHeadVo();
if (bo.getProjectId() == null) throw new RuntimeException("项目不能为空");
List<HseGcjk> hseGcjks = baseMapper.selectList(new LambdaQueryWrapper<HseGcjk>().eq(HseGcjk::getProjectId, bo.getProjectId()));
if (hseGcjks != null && hseGcjks.size() > 0) {
jkjcHeadVo.setZs(Long.valueOf(hseGcjks.size()));
jkjcHeadVo.setBczwxjx(hseGcjks.stream().filter(hseGcjk -> hseGcjk.getHasHazardSign().equals(AqEnums.AQWXJX_F.getTypeValue())).count());
jkjcHeadVo.setCzwxjx(hseGcjks.stream().filter(hseGcjk -> hseGcjk.getHasHazardSign().equals(AqEnums.AQWXJX_S.getTypeValue())).count());
}
return jkjcHeadVo;
}
}

View File

@ -0,0 +1,131 @@
package org.dromara.safety.jsjd.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.safety.domain.bo.HseSpecialPlanBo;
import org.dromara.safety.domain.vo.HseSpecialPlanVo;
import org.dromara.safety.jsjd.domain.vo.JsjgHeadVo;
import org.dromara.safety.service.IHseSpecialPlanService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.safety.jsjd.domain.bo.HseJsjdBo;
import org.dromara.safety.jsjd.service.IHseJsjdService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 安全技术交底
*
* @author Lion Li
* @date 2025-12-06
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/jsjd/jsjd")
public class HseJsjdController extends BaseController {
private final IHseJsjdService hseJsjdService;
private final IHseSpecialPlanService hseSpecialPlanService;
/**
* 查询危大工程专项施工方案列表
*/
@SaCheckPermission("jsjd:jsjd:list")
@GetMapping("/getlist")
public TableDataInfo<HseSpecialPlanVo> list(HseSpecialPlanBo bo, PageQuery pageQuery) {
return hseSpecialPlanService.queryPageList(bo, pageQuery);
}
/**
* 查询安全技术交底列表
*/
@SaCheckPermission("jsjd:jsjd:list")
@GetMapping("/list")
public TableDataInfo<HseJsjdVo> list(HseJsjdBo bo, PageQuery pageQuery) {
return hseJsjdService.queryPageList(bo, pageQuery);
}
/**
* 查询安全技术交底头部数据
*/
@SaCheckPermission("jsjd:jsjd:list")
@GetMapping("/listHead")
public R<JsjgHeadVo> list(HseJsjdBo bo) {
return R.ok(hseJsjdService.listHead(bo));
}
/**
* 导出安全技术交底列表
*/
@SaCheckPermission("jsjd:jsjd:export")
@Log(title = "安全技术交底", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HseJsjdBo bo, HttpServletResponse response) {
List<HseJsjdVo> list = hseJsjdService.queryList(bo);
ExcelUtil.exportExcel(list, "安全技术交底", HseJsjdVo.class, response);
}
/**
* 获取安全技术交底详细信息
*
* @param id 主键
*/
@SaCheckPermission("jsjd:jsjd:query")
@GetMapping("/{id}")
public R<HseJsjdVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(hseJsjdService.queryById(id));
}
/**
* 新增安全技术交底
*/
@SaCheckPermission("jsjd:jsjd:add")
@Log(title = "安全技术交底", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody HseJsjdBo bo) {
return toAjax(hseJsjdService.insertByBo(bo));
}
/**
* 修改安全技术交底
*/
@SaCheckPermission("jsjd:jsjd:edit")
@Log(title = "安全技术交底", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody HseJsjdBo bo) {
return toAjax(hseJsjdService.updateByBo(bo));
}
/**
* 删除安全技术交底
*
* @param ids 主键串
*/
@SaCheckPermission("jsjd:jsjd:remove")
@Log(title = "安全技术交底", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(hseJsjdService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,108 @@
package org.dromara.safety.jsjd.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 安全技术交底对象 hse_jsjd
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("hse_jsjd")
public class HseJsjd extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 交底编号
*/
private String disclosureNo;
/**
* 危大工程ID
*/
private Long masterId;
/**
* 危大工程名称
*/
private String deName;
/**
* 项目id
*/
private Long projectId;
/**
* 交底方式
*/
private String disclosureMethod;
/**
* 交底日期
*/
private LocalDate disclosureDate;
/**
* 交底地点
*/
private String disclosurePlace;
/**
* 交底人
*/
private String disclosurePerson;
/**
* 交底对象(多个)
*/
private String disclosureObjects;
/**
* 关键风险提示
*/
private String keyRiskTips;
/**
* 安全注意事项
*/
private String safetyNotes;
/**
* 交底状态
*/
private String presentationState;
/**
* 审核标志
*/
private String auditStatus;
/**
* 应急措施说明
*/
private String outburstExplain;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
}

View File

@ -0,0 +1,120 @@
package org.dromara.safety.jsjd.domain.bo;
import org.dromara.safety.jsjd.domain.HseJsjd;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.time.LocalDate;
/**
* 安全技术交底业务对象 hse_jsjd
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HseJsjd.class, reverseConvertGenerate = false)
public class HseJsjdBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 交底编号
*/
private String disclosureNo;
/**
* 危大工程ID
*/
@NotNull(message = "专项方案管理ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long masterId;
/**
* 危大工程名称
*/
private String deName;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 交底方式
*/
@NotBlank(message = "交底方式不能为空", groups = { AddGroup.class, EditGroup.class })
private String disclosureMethod;
/**
* 交底日期
*/
@NotNull(message = "交底日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate disclosureDate;
/**
* 交底地点
*/
@NotBlank(message = "交底地点不能为空", groups = { AddGroup.class, EditGroup.class })
private String disclosurePlace;
/**
* 交底人
*/
@NotNull(message = "交底人不能为空", groups = { AddGroup.class, EditGroup.class })
private String disclosurePerson;
/**
* 交底对象(多个)
*/
@NotBlank(message = "交底对象(多个)不能为空", groups = { AddGroup.class, EditGroup.class })
private String disclosureObjects;
/**
* 关键风险提示
*/
@NotBlank(message = "关键风险提示不能为空", groups = { AddGroup.class, EditGroup.class })
private String keyRiskTips;
/**
* 安全注意事项
*/
@NotBlank(message = "安全注意事项不能为空", groups = { AddGroup.class, EditGroup.class })
private String safetyNotes;
/**
* 交底状态
*/
@NotBlank(message = "交底状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String presentationState;
/**
* 审核标志
*/
private String auditStatus;
/**
* 应急措施说明
*/
@NotBlank(message = "应急措施说明不能为空", groups = { AddGroup.class, EditGroup.class })
private String outburstExplain;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
}

View File

@ -0,0 +1,135 @@
package org.dromara.safety.jsjd.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.safety.jsjd.domain.HseJsjd;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 安全技术交底视图对象 hse_jsjd
*
* @author Lion Li
* @date 2025-12-06
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = HseJsjd.class)
public class HseJsjdVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 交底编号
*/
@ExcelProperty(value = "交底编号")
private String disclosureNo;
/**
* 危大工程ID
*/
@ExcelProperty(value = "专项方案管理ID")
private Long masterId;
/**
* 危大工程名称
*/
private String deName;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 交底方式
*/
@ExcelProperty(value = "交底方式")
private String disclosureMethod;
/**
* 交底日期
*/
@ExcelProperty(value = "交底日期")
private LocalDate disclosureDate;
/**
* 交底地点
*/
@ExcelProperty(value = "交底地点")
private String disclosurePlace;
/**
* 交底人
*/
@ExcelProperty(value = "交底人")
private String disclosurePerson;
/**
* 交底对象(多个)
*/
@ExcelProperty(value = "交底对象(多个)")
private String disclosureObjects;
/**
* 关键风险提示
*/
@ExcelProperty(value = "关键风险提示")
private String keyRiskTips;
/**
* 安全注意事项
*/
@ExcelProperty(value = "安全注意事项")
private String safetyNotes;
/**
* 交底状态
*/
@ExcelProperty(value = "交底状态")
private String presentationState;
/**
* 审核标志
*/
@ExcelProperty(value = "审核标志")
private String auditStatus;
/**
* 应急措施说明
*/
@ExcelProperty(value = "应急措施说明")
private String outburstExplain;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
}

View File

@ -0,0 +1,33 @@
package org.dromara.safety.jsjd.domain.vo;
import lombok.Data;
@Data
public class JsjgHeadVo {
/**
* 危大工程总数
*/
private Long wczs = 0L;
/**
* 技术交底 总数
*/
private Long jdzs = 0L;
/**
* 技术交底 已完成
*/
private Long jdywc = 0L;
/**
* 技术交底 未完成
*/
private Long jdwwc = 0L;
}

View File

@ -0,0 +1,15 @@
package org.dromara.safety.jsjd.mapper;
import org.dromara.safety.jsjd.domain.HseJsjd;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 安全技术交底Mapper接口
*
* @author Lion Li
* @date 2025-12-06
*/
public interface HseJsjdMapper extends BaseMapperPlus<HseJsjd, HseJsjdVo> {
}

View File

@ -0,0 +1,74 @@
package org.dromara.safety.jsjd.service;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.safety.jsjd.domain.bo.HseJsjdBo;
import org.dromara.safety.jsjd.domain.HseJsjd;
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.jsjd.domain.vo.JsjgHeadVo;
import java.util.Collection;
import java.util.List;
/**
* 安全技术交底Service接口
*
* @author Lion Li
* @date 2025-12-06
*/
public interface IHseJsjdService extends IService<HseJsjd>{
/**
* 查询安全技术交底
*
* @param id 主键
* @return 安全技术交底
*/
HseJsjdVo queryById(Long id);
/**
* 分页查询安全技术交底列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 安全技术交底分页列表
*/
TableDataInfo<HseJsjdVo> queryPageList(HseJsjdBo bo, PageQuery pageQuery);
/**
* 查询符合条件的安全技术交底列表
*
* @param bo 查询条件
* @return 安全技术交底列表
*/
List<HseJsjdVo> queryList(HseJsjdBo bo);
/**
* 新增安全技术交底
*
* @param bo 安全技术交底
* @return 是否新增成功
*/
Boolean insertByBo(HseJsjdBo bo);
/**
* 修改安全技术交底
*
* @param bo 安全技术交底
* @return 是否修改成功
*/
Boolean updateByBo(HseJsjdBo bo);
/**
* 校验并批量删除安全技术交底信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
JsjgHeadVo listHead(HseJsjdBo bo);
}

View File

@ -0,0 +1,189 @@
package org.dromara.safety.jsjd.service.impl;
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;
import org.dromara.common.mybatis.core.page.PageQuery;
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.common.utils.BatchNumberGenerator;
import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo;
import org.dromara.safety.domain.HseSpecialPlan;
import org.dromara.safety.enums.AqEnums;
import org.dromara.safety.jsjd.domain.vo.JsjgHeadVo;
import org.dromara.safety.service.IHseSpecialPlanService;
import org.dromara.system.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.dromara.safety.jsjd.domain.bo.HseJsjdBo;
import org.dromara.safety.jsjd.domain.vo.HseJsjdVo;
import org.dromara.safety.jsjd.domain.HseJsjd;
import org.dromara.safety.jsjd.mapper.HseJsjdMapper;
import org.dromara.safety.jsjd.service.IHseJsjdService;
import java.util.*;
/**
* 安全技术交底Service业务层处理
*
* @author Lion Li
* @date 2025-12-06
*/
@RequiredArgsConstructor
@Service
public class HseJsjdServiceImpl extends ServiceImpl<HseJsjdMapper, HseJsjd> implements IHseJsjdService {
private final HseJsjdMapper baseMapper;
private final ISysOssService sysOssService;
private final IHseSpecialPlanService hseSpecialPlanService;
/**
* 查询安全技术交底
*
* @param id 主键
* @return 安全技术交底
*/
@Override
public HseJsjdVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询安全技术交底列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 安全技术交底分页列表
*/
@Override
public TableDataInfo<HseJsjdVo> queryPageList(HseJsjdBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<HseJsjd> lqw = buildQueryWrapper(bo);
Page<HseJsjdVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的安全技术交底列表
*
* @param bo 查询条件
* @return 安全技术交底列表
*/
@Override
public List<HseJsjdVo> queryList(HseJsjdBo bo) {
LambdaQueryWrapper<HseJsjd> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<HseJsjd> buildQueryWrapper(HseJsjdBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<HseJsjd> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(HseJsjd::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDisclosureNo()), HseJsjd::getDisclosureNo, bo.getDisclosureNo());
lqw.eq(bo.getMasterId() != null, HseJsjd::getMasterId, bo.getMasterId());
lqw.eq(bo.getDeName() != null, HseJsjd::getDeName, bo.getDeName());
lqw.eq(bo.getProjectId() != null, HseJsjd::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getDisclosureMethod()), HseJsjd::getDisclosureMethod, bo.getDisclosureMethod());
lqw.eq(bo.getDisclosureDate() != null, HseJsjd::getDisclosureDate, bo.getDisclosureDate());
lqw.eq(StringUtils.isNotBlank(bo.getDisclosurePlace()), HseJsjd::getDisclosurePlace, bo.getDisclosurePlace());
lqw.eq(bo.getDisclosurePerson() != null, HseJsjd::getDisclosurePerson, bo.getDisclosurePerson());
lqw.eq(StringUtils.isNotBlank(bo.getDisclosureObjects()), HseJsjd::getDisclosureObjects, bo.getDisclosureObjects());
lqw.eq(StringUtils.isNotBlank(bo.getKeyRiskTips()), HseJsjd::getKeyRiskTips, bo.getKeyRiskTips());
lqw.eq(StringUtils.isNotBlank(bo.getSafetyNotes()), HseJsjd::getSafetyNotes, bo.getSafetyNotes());
lqw.eq(StringUtils.isNotBlank(bo.getPresentationState()), HseJsjd::getPresentationState, bo.getPresentationState());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), HseJsjd::getAuditStatus, bo.getAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getOutburstExplain()), HseJsjd::getOutburstExplain, bo.getOutburstExplain());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseJsjd::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增安全技术交底
*
* @param bo 安全技术交底
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(HseJsjdBo bo) {
HseJsjd add = MapstructUtils.convert(bo, HseJsjd.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("AQJSJD-");
HseJsjdVo hseJsjdVo = baseMapper.selectVoOne(new LambdaQueryWrapper<HseJsjd>().eq(HseJsjd::getMasterId, bo.getMasterId()));
if (hseJsjdVo != null) throw new RuntimeException("该专项方案已被添加 ");
add.setDisclosureNo(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改安全技术交底
*
* @param bo 安全技术交底
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(HseJsjdBo bo) {
HseJsjd update = MapstructUtils.convert(bo, HseJsjd.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(HseJsjd entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除安全技术交底信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
HseJsjdVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public JsjgHeadVo listHead(HseJsjdBo bo) {
JsjgHeadVo jsjgHeadVo = new JsjgHeadVo();
if (bo.getProjectId() == null) throw new RuntimeException("项目不能为空");
Long l = hseSpecialPlanService.getBaseMapper().selectCount(new LambdaQueryWrapper<HseSpecialPlan>().eq(HseSpecialPlan::getProjectId, bo.getProjectId()));
List<HseJsjd> hseJsjds = baseMapper.selectList(new LambdaQueryWrapper<HseJsjd>().eq(HseJsjd::getProjectId, bo.getProjectId()));
jsjgHeadVo.setWczs(l);
jsjgHeadVo.setJdzs(Long.valueOf(hseJsjds.size()));
jsjgHeadVo.setJdwwc(hseJsjds.stream().filter(hseJsjd -> hseJsjd.getPresentationState().equals(AqEnums.AQJDZT_F.getTypeValue())).count());
jsjgHeadVo.setJdywc(hseJsjds.stream().filter(hseJsjd -> hseJsjd.getPresentationState().equals(AqEnums.AQJDZT_S.getTypeValue())).count());
return jsjgHeadVo;
}
}

View File

@ -7,6 +7,8 @@ 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.HseJsjdYuJkjcVo;
import java.util.Collection;
import java.util.List;
@ -67,4 +69,6 @@ public interface IHseDangerArchiveService extends IService<HseDangerArchive>{
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
HseJsjdYuJkjcVo getJsjdYGcjk(Long id);
}

View File

@ -9,6 +9,13 @@ 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.vo.HseJsjdYuJkjcVo;
import org.dromara.safety.gcjkjl.domain.HseGcjk;
import org.dromara.safety.gcjkjl.service.IHseGcjkService;
import org.dromara.safety.jsjd.domain.HseJsjd;
import org.dromara.safety.jsjd.service.IHseJsjdService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.dromara.safety.domain.bo.HseDangerArchiveBo;
import org.dromara.safety.domain.vo.HseDangerArchiveVo;
@ -32,6 +39,14 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl<HseDangerArchiveMap
private final HseDangerArchiveMapper baseMapper;
@Autowired
@Lazy
private IHseGcjkService hseGcjkService;
@Autowired
@Lazy
private final IHseJsjdService hseJsjdService;
/**
* 查询危大工程档案
*
@ -146,4 +161,25 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl<HseDangerArchiveMap
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public HseJsjdYuJkjcVo getJsjdYGcjk(Long id) {
HseJsjdYuJkjcVo hseJsjdYuJkjcVo = new HseJsjdYuJkjcVo();
if (id == null) throw new RuntimeException("危大工程不能为空");
HseGcjk hseGcjk = hseGcjkService.getBaseMapper().selectOne(new LambdaQueryWrapper<HseGcjk>().eq(HseGcjk::getMasterId, id));
if (hseGcjk != null){
hseJsjdYuJkjcVo.setJsjdFile(hseGcjk.getFileId());
}
List<HseJsjd> hseJsjds = hseJsjdService.getBaseMapper().selectList(new LambdaQueryWrapper<HseJsjd>().eq(HseJsjd::getMasterId, id));
if (hseJsjds != null && hseJsjds.size() != 0){
StringBuffer stringBuffer = new StringBuffer();
hseJsjds.forEach(hseJsjd -> {
stringBuffer.append(hseJsjd.getFileId()).append(",");
});
hseJsjdYuJkjcVo.setGcjkFile(stringBuffer.toString());
}
return hseJsjdYuJkjcVo;
}
}