diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index be349c0a..953e8f06 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -368,3 +368,14 @@ drone: chat: server: port: 19099 +# rabbitmq 配置 +rabbitmq: + exchange-name: dev-normal-exchange + queue-name: dev-normal-queue + routing-key: dev.normal.routing.key + delay-exchange-name: dev-delay-queue + delay-queue-name: dev-delay-exchange + delay-routing-key: dev.delay.routing.key + dead-letter-exchange: dev-dlx-exchange + dead-letter-queue: dev-dlx-queue + dead-letter-routing-key: dev.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml index 64b0ccdc..38eebf83 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml @@ -343,3 +343,14 @@ drone: chat: server: port: 18088 +# rabbitmq 配置 +rabbitmq: + exchange-name: local-normal-exchange + queue-name: local-normal-queue + routing-key: local.normal.routing.key + delay-exchange-name: local-delay-queue + delay-queue-name: local-delay-exchange + delay-routing-key: local.delay.routing.key + dead-letter-exchange: local-dlx-exchange + dead-letter-queue: local-dlx-queue + dead-letter-routing-key: local.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml index 235b008a..5b6e6e05 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml @@ -358,3 +358,14 @@ drone: chat: server: port: 19099 +# rabbitmq 配置 +rabbitmq: + exchange-name: prod-normal-exchange + queue-name: prod-normal-queue + routing-key: prod.normal.routing.key + delay-exchange-name: prod-delay-queue + delay-queue-name: prod-delay-exchange + delay-routing-key: prod.delay.routing.key + dead-letter-exchange: prod-dlx-exchange + dead-letter-queue: prod-dlx-queue + dead-letter-routing-key: prod.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 261ac1cb..6cf84cfe 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -95,7 +95,13 @@ spring: deserialization: # 允许对象忽略json中不存在的属性 fail_on_unknown_properties: false - + rabbitmq: + host: 192.168.110.2 + port: 5672 + username: admin + password: yuanjiexny + publisher-returns: true + publisher-confirm-type: correlated # Sa-Token配置 sa-token: # token名称 (同时也是cookie名称) @@ -305,10 +311,12 @@ 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.机械模块 + packages-to-scan: org.dromara.mechanical # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java new file mode 100644 index 00000000..b35d6364 --- /dev/null +++ b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java @@ -0,0 +1,146 @@ +package org.dromara.common.core.utils; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +/** + * 时间戳转换工具类(包含时分秒提取) + */ +public class TimestampUtils { + + // 默认时区(东八区) + private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8"); + + // 完整日期格式 + private static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + // 时分秒格式 + private static final String TIME_FORMAT = "HH:mm:ss"; + + // 日期格式 + private static final String DATE_FORMAT = "yyyy-MM-dd"; + + /** + * 将日期字符串转为秒级时间戳(优化版) + * 支持格式:"2025-12-03 23:59:59"、"2025-12-03"等 + * @param dateStr 日期字符串 + * @return 秒级时间戳 + */ + public static Long parseDateToTimestamp(String dateStr) { + if (StrUtil.isBlank(dateStr)) { + return null; + } + + // 使用Hutool的DateUtil进行智能解析(推荐) + try { + Date date = DateUtil.parse(dateStr); + return date.getTime() / 1000L; // 转为秒级时间戳 + } catch (Exception e) { + throw new IllegalArgumentException( + String.format("日期格式错误:%s,支持格式:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd等", dateStr) + ); + } + } + + /** + * 将时间戳转换为完整日期格式(yyyy-MM-dd HH:mm:ss) + */ + public static String formatTimestamp(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 提取时间戳中的时分秒部分(HH:mm:ss) + */ + public static String extractTime(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 提取时间戳中的日期部分(yyyy-MM-dd) + */ + public static String extractDate(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 解析时间戳字符串为毫秒级时间戳 + */ + private static Long parseToMilliseconds(String timestampStr) { + try { + Long time = Long.parseLong(timestampStr); + // 10位秒级时间戳转为13位毫秒级 + if (timestampStr.length() == 10) { + time = time * 1000; + } + return time; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("时间戳格式错误:" + timestampStr); + } + } + + /** + * 获取时间戳对应的小时 + */ + public static int getHour(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[0]); + } + + /** + * 获取时间戳对应的分钟 + */ + public static int getMinute(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[1]); + } + + /** + * 获取时间戳对应的秒 + */ + public static int getSecond(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[2]); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml index 4bffab53..c9925bb7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml @@ -29,6 +29,10 @@ + + org.springframework.boot + spring-boot-starter-amqp + com.twelvemonkeys.imageio diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java index 2fef047d..6137f009 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java @@ -3,10 +3,14 @@ package org.dromara.complaintBox.controller; import lombok.RequiredArgsConstructor; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -37,24 +41,35 @@ import java.util.List; @RequestMapping("/complaintBox/complaintBox") public class BusComplaintBoxController extends BaseController { - @Lazy private final IBusComplaintBoxService busComplaintBoxService; @Lazy - private final IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService; + @Autowired + private IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService; + @Lazy + @Autowired + private IBusComplaintBoxDisposeLoggingService disposeLoggingService; /** * 查询意见箱列表 */ -// @SaCheckPermission("complaintBox:complaintBox:list") + @SaCheckPermission("complaintBox:complaintBox:list") @GetMapping("/list") public TableDataInfo list(BusComplaintBoxBo bo, PageQuery pageQuery) { return busComplaintBoxService.queryPageList(bo, pageQuery); } + /** + * 查询意见处理记录列表 + */ + @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/getDisposeLogList") + public TableDataInfo getDisposeLogList(BusComplaintBoxDisposeLoggingBo bo, PageQuery pageQuery) { + return disposeLoggingService.queryPageList(bo, pageQuery); + } /** * web获取各个处理状态数量 */ -// @SaCheckPermission("complaintBox:complaintBox:list") + @SaCheckPermission("complaintBox:complaintBox:list") @GetMapping("/getCount") public R> getCount(BusComplaintBoxBo bo) { return R.ok(busComplaintBoxService.getCount(bo)); @@ -75,7 +90,7 @@ public class BusComplaintBoxController extends BaseController { /** * 新增意见回复 */ -// @SaCheckPermission("complaintBox:complaintBox:add") + @SaCheckPermission("complaintBox:complaintBox:add") @Log(title = "意见箱", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/postAReply") @@ -87,7 +102,7 @@ public class BusComplaintBoxController extends BaseController { /** * 修改意见阅读状态 */ -// @SaCheckPermission("complaintBox:complaintBox:edit") + @SaCheckPermission("complaintBox:complaintBox:edit") @Log(title = "意见箱", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/editCheckStatus") @@ -98,7 +113,7 @@ public class BusComplaintBoxController extends BaseController { /** * 修改意见阅读状态 */ -// @SaCheckPermission("complaintBox:complaintBox:edit") + @SaCheckPermission("complaintBox:complaintBox:edit") @Log(title = "意见箱", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/editStatus") diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java index e1f417c9..108d526c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java @@ -78,7 +78,7 @@ public class BusComplaintBox extends BaseEntity { private String isCryptonym; /** - * 处理状态(0、待处理,5、处理中,9、已解决,10、退回,14、关闭) + * 处理状态(0、待处理,5、处理中,9、已解决,10、退回,14、不予解决()) */ private String status; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java index 2fc8c293..c99a891f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java @@ -86,5 +86,10 @@ public class BusComplaintBoxBo extends BaseEntity { */ private String status; + /** + * 退回原因 + */ + private String cause; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java index fdb1e92c..26b3108c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java @@ -1,5 +1,7 @@ package org.dromara.complaintBox.domain.vo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -71,5 +73,10 @@ public class BusComplaintBoxDisposeLoggingVo implements Serializable { @ExcelProperty(value = "退回原因") private String cause; + /** + * 创建时间 + */ + private Date createTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java index ddc8ccae..5bd6fa4a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java @@ -72,13 +72,11 @@ public class BusComplaintBoxDisposeLoggingServiceImpl extends ServiceImpl buildQueryWrapper(BusComplaintBoxDisposeLoggingBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByDesc(BusComplaintBoxDisposeLogging::getId); + lqw.orderByDesc(BusComplaintBoxDisposeLogging::getCreateTime); lqw.eq(bo.getComplaintId() != null, BusComplaintBoxDisposeLogging::getComplaintId, bo.getComplaintId()); lqw.eq(bo.getUserId() != null, BusComplaintBoxDisposeLogging::getUserId, bo.getUserId()); lqw.like(StringUtils.isNotBlank(bo.getUserName()), BusComplaintBoxDisposeLogging::getUserName, bo.getUserName()); - lqw.eq(bo.getAvatar() != null, BusComplaintBoxDisposeLogging::getAvatar, bo.getAvatar()); lqw.eq(StringUtils.isNotBlank(bo.getIsRefund()), BusComplaintBoxDisposeLogging::getIsRefund, bo.getIsRefund()); - lqw.eq(StringUtils.isNotBlank(bo.getCause()), BusComplaintBoxDisposeLogging::getCause, bo.getCause()); return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java index de1c18dc..8055cc0c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java @@ -109,7 +109,7 @@ public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl 0; - if ("0".equals(busComplaintBox.getStatus())){ - busComplaintBox.setStatus("5"); - busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId()); - busComplaintBoxMapper.updateById(busComplaintBox); - } +// if ("0".equals(busComplaintBox.getStatus())){ +// busComplaintBox.setStatus("5"); +// busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId()); +// busComplaintBoxMapper.updateById(busComplaintBox); +// } if (flag) { bo.setId(add.getId()); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java index c2beeb2a..e25ec5a8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java @@ -3,6 +3,8 @@ package org.dromara.complaintBox.service.impl; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -12,12 +14,15 @@ 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.satoken.utils.LoginHelper; import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; import org.dromara.complaintBox.mapper.BusComplaintBoxMessageLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysOssVo; @@ -32,6 +37,7 @@ import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; import org.dromara.complaintBox.domain.BusComplaintBox; import org.dromara.complaintBox.mapper.BusComplaintBoxMapper; import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; @@ -50,11 +56,17 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl().set(BusComplaintBox::getStatus,bo.getStatus()).eq(BusComplaintBox::getId, bo.getId())); + LambdaUpdateWrapper lqw = new LambdaUpdateWrapper(); + lqw.set(BusComplaintBox::getStatus, bo.getStatus()); + lqw.eq(BusComplaintBox::getId, bo.getId()); + if ("5".equals(busComplaintBoxVo.getStatus())){ + BusComplaintBoxDisposeLogging logging = new BusComplaintBoxDisposeLogging(); + logging.setComplaintId(bo.getId()); + LoginUser loginUser = LoginHelper.getLoginUser(); + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + if (sysUserVo == null){ + throw new ServiceException("找不到当前登录用户信息!"); + } + logging.setUserId(loginUser.getUserId()); + logging.setUserName(sysUserVo.getNickName()); + logging.setAvatar(sysUserVo.getAvatar()); + disposeLoggingService.save(logging); + } + if ("0".equals(bo.getStatus())){ + lqw.set(BusComplaintBox::getCurrentDisposeUserId, null); + BusComplaintBoxDisposeLogging logging = disposeLoggingService.getBaseMapper() + .selectOne(new LambdaQueryWrapper() + .eq(BusComplaintBoxDisposeLogging::getComplaintId, bo.getId()) + .eq(BusComplaintBoxDisposeLogging::getUserId, busComplaintBoxVo.getCurrentDisposeUserId()) + .eq(BusComplaintBoxDisposeLogging::getIsRefund, "0")); + if (logging == null){ + throw new ServiceException("找不到处理人记录"); + } + logging.setIsRefund("1"); + logging.setCause(bo.getCause()); + disposeLoggingService.updateById(logging); + } + return baseMapper.update(lqw); } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java index f6a3c963..78bcaf3e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java @@ -412,6 +412,7 @@ public class SubConstructionUserController extends BaseController { vo.setUploadFile("部分上传"); } dataList.add(vo); + order++; } // 写入当前Sheet的数据 excelWriter.write(dataList, writeSheet); @@ -456,7 +457,9 @@ public class SubConstructionUserController extends BaseController { } else { vo.setUploadFile("部分上传"); } + vo.setTeamName(null); dataList.add(vo); + order++; } // 写入当前Sheet的数据 excelWriter.write(dataList, writeSheet); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java index 7c28b00c..70c09e5d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java @@ -231,7 +231,7 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl userIdList = constructionUserFileList.stream().map(SubConstructionUserFile::getUserId).toList(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 3cbcf475..19d25689 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -230,7 +230,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl delayCont(@PathVariable Long projectId) { + return R.ok(desVolumeCatalogService.delayCont(projectId)); + } + + + /** * 新增卷册目录 */ @@ -167,6 +175,9 @@ public class DesVolumeCatalogController extends BaseController { } + + + /** * 收资清单模板导出 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java index 750602b9..47b290af 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java @@ -46,4 +46,9 @@ public class DesVolumeCatalogQueryReq implements Serializable { */ private String designSubitem; + /** + * 0-不延期,1-延期 + */ + private String delay; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java new file mode 100644 index 00000000..7d54aa4b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java @@ -0,0 +1,23 @@ +package org.dromara.design.domain.vo; + + +import lombok.Data; + +@Data +public class DelayContVo { + + /** + * 总数 + */ + private Integer total; + + /** + * 延迟数 + */ + private Integer delay; + + /** + * 今日数 + */ + private Integer today; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java index a5e5cb04..bf3f5e04 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java @@ -11,7 +11,9 @@ import org.dromara.design.domain.DesVolumeFile; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; +import org.springframework.web.bind.annotation.PathVariable; import java.util.Collection; import java.util.List; @@ -130,4 +132,9 @@ public interface IDesVolumeCatalogService extends IService { * @return 设计子项列表 */ List listDesignSubitem(Long projectId); + + /** + * 统计 + */ + DelayContVo delayCont(Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java index 948060ed..2958cf2f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java @@ -100,4 +100,7 @@ public interface IDesVolumeFileService extends IService { TableDataInfo queryAppPageList(DesVolumeFileAppPageDto dto, PageQuery pageQuery); AuditFileVo auditFile(AuditFileDto dto); + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java index 84c20eb3..a4d26253 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java @@ -28,6 +28,7 @@ import org.dromara.design.domain.bo.DesUserBo; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.mapper.DesVolumeCatalogMapper; import org.dromara.design.service.*; @@ -43,6 +44,8 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -236,6 +239,17 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl list = this.lambdaQuery() + .eq(DesVolumeCatalog::getProjectId, projectId).list(); + DelayContVo delayContVo = new DelayContVo(); + delayContVo.setTotal(list.size()); + delayContVo.setDelay((int)list.stream().filter(item -> item.getPlannedCompletion().isBefore(LocalDate.now()) && item.getDesignState().equals("2")).count()); + delayContVo.setToday((int)list.stream().filter(item -> item.getPlannedCompletion().isEqual(LocalDate.now())).count()); + return delayContVo; + } + /** * 修改卷册目录 * @@ -353,6 +367,7 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl wrapper.gt(DesVolumeCatalog::getPlannedCompletion, LocalDateTime.now()) + .or() + .eq(DesVolumeCatalog::getDesignState, "1") + ); + } return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java index e108eb1e..caaa5ca4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java @@ -11,6 +11,7 @@ import org.dromara.device.domain.bo.DeviceAccessRecordBo; import org.dromara.device.domain.vo.DeviceAccessRecordVo; import org.dromara.device.domain.vo.DeviceInfoCountVo; import org.dromara.device.service.IDeviceAccessRecordService; +import org.redisson.api.RList; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -137,4 +138,13 @@ public class DeviceInfoController extends BaseController { @PathVariable Long[] ids) { return toAjax(deviceInfoService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 设备信息列表 + */ + @GetMapping("/deviceList") + public R> deviceList(DeviceInfoBo bo) { + List list = deviceInfoService.queryList(bo); + return R.ok(list); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java index b9639b15..0d92721d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java @@ -95,5 +95,10 @@ public class DeviceAccessRecordVo implements Serializable { @ExcelProperty(value = "详细说明", converter = ExcelDictConvert.class) private String details; + /** + * 创建时间 + */ + private Date createTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java index ee4297b5..b73aeb5c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java @@ -16,6 +16,7 @@ import org.dromara.device.domain.DeviceAccessRecord; import org.dromara.device.mapper.DeviceAccessRecordMapper; import org.dromara.device.service.IDeviceAccessRecordService; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Collection; @@ -77,6 +78,16 @@ public class DeviceAccessRecordServiceImpl extends ServiceImpl list = baseMapper.selectList(queryWrapper); checkIds.addAll(list.stream().map(DeviceType::getId).toList()); } + checkIds.addAll(ids); List list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, checkIds).list(); if(CollectionUtil.isNotEmpty(list)){ throw new ServiceException("当前类型或子级类型存在设备"); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java index 6f3cf5a8..3a850901 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java @@ -1,17 +1,15 @@ package org.dromara.gps.domain.bo; -import org.dromara.gps.domain.GpsEquipmentSon; -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 jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.gps.domain.GpsEquipmentSon; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; /** * GPS设备定位信息业务对象 gps_equipment_son @@ -137,4 +135,14 @@ public class GpsEquipmentSonBo extends BaseEntity { */ private Long tripId; + /** + * 用户名称 + */ + private String userName; + + /** + * 头像地址 + */ + private String avatar; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index 69ed9ccd..85c7b14c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -52,9 +54,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.Duration; -import java.time.LocalDate; -import java.time.LocalDateTime; +import java.time.*; import java.util.*; /** @@ -83,6 +83,8 @@ public class GpsEquipmentServiceImpl extends ServiceImpl ossDTOS = ossService.selectByIds(sysUserVo.getAvatar().toString()); + if (ossDTOS != null && !ossDTOS.isEmpty()) { + gpsEquipmentSonBo.setAvatar(ossDTOS.getFirst().getUrl()); + } + } + } + gpsEquipmentSonBo.setCreateTime(new Date()); + setPersonToRedis(gpsEquipmentSonBo,expireSeconds); + + // 保存到Redis并设置过期监听 updateDeviceAliveStatus(gpsEquipment.getClientId()); } @@ -645,5 +683,18 @@ public class GpsEquipmentServiceImpl extends ServiceImpl paramMap = new HashMap<>(); + paramMap.put("accessToken", dto.getAccessToken()); + paramMap.put("deviceSerial", dto.getDeviceSerial()); + if (dto.getChannelNo() != null) { + paramMap.put("channelNo", dto.getChannelNo()); + } + if (dto.getQuality() != null) { + paramMap.put("quality", dto.getQuality()); + } + if (dto.getProtocol() != null) { + paramMap.put("protocol", dto.getProtocol()); + } + if (dto.getStartTime() != null) { + paramMap.put("startTime", dto.getStartTime()); + } + if (dto.getEndTime() != null) { + paramMap.put("stopTime", dto.getEndTime()); + } + if (dto.getType() != null) { + paramMap.put("type", dto.getType()); + } + if (dto.getExpireTime() != null) { + paramMap.put("expireTime", dto.getExpireTime()); + } + if (dto.getRecType() != null) { + paramMap.put("recType", dto.getRecType()); + } + if (dto.getCode() != null) { + paramMap.put("code", dto.getCode()); + } + if (dto.getSupportH265() != null) { + paramMap.put("supportH265", dto.getSupportH265()); + } + if (dto.getPlaybackSpeed() != null) { + paramMap.put("playbackSpeed", dto.getPlaybackSpeed()); + } + if (dto.getGbchannel() != null) { + paramMap.put("gbchannel", dto.getGbchannel()); + } + String errorMsg = "获取回放录像请求失败"; + try (HttpResponse response = HttpRequest.post(Ys7Constant.getDeviceLappVideoUrlByPost) + .form(paramMap) + .execute()) { + if (!response.isOk()) { + log.error("{}:{}", errorMsg, response.getStatus()); + throw new ServiceException(errorMsg + response.getStatus()); + } + String body = response.body(); + log.info("本地录像body{}",body); + Ys7ResponseVo responseVo = JSONUtil.toBean(body, Ys7ResponseVo.class); + if (!responseVo.getCode().equals("200")) { + log.error("{},状态码:{},{}", errorMsg, responseVo.getCode(), responseVo.getMsg()); + throw new ServiceException(errorMsg + responseVo.getMsg()); + } + String data = responseVo.getData(); + String picUrl = JSONUtil.parseObj(data).getStr("url"); + log.info("获取回放录像请求成功,设备[{}]回放成功,通道:{},url:{}", dto.getDeviceSerial(), dto.getChannelNo(), picUrl); + return picUrl; + } + } + + /** + * 查询设备某天的本地录像 + * @param dto + * @return + */ + public static List getDeviceLocalVideo(DeviceLocalVideoRequstDto dto) { + if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial(),dto.getStartTime(), dto.getEndTime())) { + throw new ServiceException("查询设备本地录像参数为空", HttpStatus.BAD_REQUEST); + } + dto.setStartTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getStartTime())).toString()); + dto.setEndTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getEndTime())).toString()); + List vos = new ArrayList<>(); + getRexords(dto, vos); + return vos; + } + + private static void getRexords(DeviceLocalVideoRequstDto dto, List vos) { + String errorMsg = "查询设备本地录像请求失败"; + String body = getDevicceLocalVideoBody(dto); + log.info("本地录像body{}",body); + JSONObject jsonObject = JSONUtil.parseObj(body); + DeviceLocalVideoMetaVo meta = JSONUtil.toBean(jsonObject.getJSONObject("meta"), DeviceLocalVideoMetaVo.class); + if (!meta.getCode().equals("200")) { + log.error("{},状态码:{},{}", errorMsg, meta.getCode(), meta.getMessage()); + throw new ServiceException(errorMsg + meta.getMessage()); + } + DeviceLocalVideoDataVo data = JSONUtil.toBean(jsonObject.getJSONObject("data"), DeviceLocalVideoDataVo.class); + if (data != null) { + List list = JSONUtil.toList(data.getRecords(), DeviceLocalVideoRecordsVo.class); + if (list != null && !list.isEmpty()) { + list.forEach(vo -> { + vo.setStartTime(TimestampUtils.extractTime(vo.getStartTime())); + vo.setEndTime(TimestampUtils.extractTime(vo.getEndTime())); + }); + vos.addAll(list); + } + if (data.getHasMore()){ + dto.setStartTime(data.getNextFileTime()); + if (Long.parseLong(dto.getStartTime()) > Long.parseLong(dto.getEndTime())){ + return; + } + getRexords(dto, vos); + } + } + + } + + private static String getDevicceLocalVideoBody(DeviceLocalVideoRequstDto dto) { + // 2. 构建Header参数(接口文档的Header部分) + HttpRequest request = HttpRequest.get(Ys7Constant.getDeviceLocalVideoUrlByGet) + .header("accessToken", dto.getAccessToken()) // Header参数:accessToken + .header("deviceSerial", dto.getDeviceSerial());// Header参数:deviceSerial + // 可选Header:localIndex(对应dto的channelNo) + if (dto.getChannelNo() != null) { + request.header("channelNo", dto.getChannelNo().toString()); + } + + // 3. 构建Query参数(接口文档的query部分) + request.form("startTime", dto.getStartTime()) // Query必传:startTime + .form("endTime", dto.getEndTime()); // Query必传:endTime + // 可选Query参数 + if (dto.getRecordType() != null) { + request.form("recordType", dto.getRecordType().toString()); + } + if (dto.getIsQueryByNvr() != null) { + request.form("isQueryByNvr", dto.getIsQueryByNvr().toString()); + } + if (dto.getLocation() != null) { + request.form("location", dto.getLocation().toString()); + } + if (dto.getPageSize() != null) { + request.form("pageSize", dto.getPageSize().toString()); + } + + String errorMsg = "查询设备本地录像请求失败"; + try (HttpResponse response = request.execute()) { + if (!response.isOk()) { + log.error("{}:{}", errorMsg, response.getStatus()); + throw new ServiceException(errorMsg + response.getStatus()); + } + return response.body(); + } + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java new file mode 100644 index 00000000..62e67124 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java @@ -0,0 +1,18 @@ +package org.dromara.manager.ys7manager.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DeviceLocalVideoRequstDto implements Serializable { + private String accessToken; //toke + private String deviceSerial; //设备序列号 + private Integer channelNo; // 通道号,默认1 + private Integer recordType; // 1:定时录像 2:事件录像 3:智能-车 4:智能-人形 5:自动浓缩录像,不填默认查询所有类型 + private String startTime; // 回放开始时间(格式:yyyy-MM-dd HH:mm:ss) + private String endTime; // 回放结束时间(格式:yyyy-MM-dd HH:mm:ss) + private Integer isQueryByNvr; // 是否反查NVR录像:0-不反查(默认),1-反查NVR + private Integer location; // 录像检索位置:1-本地录像检索(默认),2-CVR中心录像检索 + private Integer pageSize; // 分页的页面大小,默认50,最大200 +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java new file mode 100644 index 00000000..094477b4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java @@ -0,0 +1,23 @@ +package org.dromara.manager.ys7manager.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DevicePlayBackUrlRequstDto implements Serializable { + private String accessToken; //toke + private String deviceSerial; //设备序列号 + private Integer channelNo; // 通道号,默认1 + private Integer protocol; // 流协议:1-ezopen、2-hls、3-rtmp、4-flv,默认1 + private String code; // 视频加密密码 + private Integer expireTime; // 过期时长(秒),30秒-720天 + private String type; // 地址类型:1-预览,2-本地录像回放,3-云存储录像回放,默认1 + private Integer quality; // 清晰度:1-高清,2-流畅 + private String startTime; // 回放开始时间(格式:yyyy-MM-dd HH:mm:ss) + private String endTime; // 回放结束时间(格式:yyyy-MM-dd HH:mm:ss) + private Integer supportH265; // 是否需要H265编码:1-是,0-否 + private Integer recType; // 回放源,0-系统自动选择,1-云存储,2-本地录像。非必选,默认为0 + private String playbackSpeed; // 回放倍速:-1、0.5、1、2、4、8、16(仅支持flv协议+回放类型) + private String gbchannel; // 国标设备通道编号 +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java new file mode 100644 index 00000000..97df8568 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java @@ -0,0 +1,29 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoDataVo { + + /** + * 响应内容 + */ + private String records; + + //该录像文件是否来自关联的nvr + private String fromNvr; + + // fromNvr为true,则返回关联NVR设备序列号,否则返回入参填的设备序列号。 + private String deviceSerial; + // fromNvr为true,则返回关联NVR设备通道号,否则返回入参填的设备通道号 + private String localIndex; + //是否存在更多录像文件 + private Boolean hasMore; + // hasMore为true时,该参数值为下一个录像文件的开始时间。如需分页查询,该参数值可作为下一页录像文件查询的开始时间。 + private String nextFileTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java new file mode 100644 index 00000000..0873bc1b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java @@ -0,0 +1,27 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoMetaVo { + + /** + * 响应码 + */ + private String code; + + /** + * 响应信息 + */ + private String message; + + /** + * 响应信息 + */ + private String moreInfo; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java new file mode 100644 index 00000000..ddbd65df --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java @@ -0,0 +1,27 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoRecordsVo { + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + //录像类型 + private String type; + //录像文件大小,单位:字节 + private String size; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java new file mode 100644 index 00000000..3a601c65 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java @@ -0,0 +1,149 @@ +package org.dromara.mechanical.jxaqgl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +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.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械安全检查记录 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxaqgl/aqjcgl") +public class JxAqjcglController extends BaseController { + + private final IJxAqjcglService jxAqjcglService; + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + + /** + * 查询近30天机械安全检查记录头部数据 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listHead") + public R listHead(JxAqjcglBo bo, PageQuery pageQuery) { + return R.ok(jxAqjcglService.listHead(bo, pageQuery)); + } + + + /** + * 查询近6月机械安全检查结果趋势 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listHeadJgqs") + public List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) { + return jxAqjcglService.listHeadJgqs(bo, pageQuery); + } + + + + + /** + * 查询机械安全检查记录列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/list") + public TableDataInfo list(JxAqjcglBo bo, PageQuery pageQuery) { + return jxAqjcglService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械安全检查记录列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:export") + @Log(title = "机械安全检查记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxAqjcglBo bo, HttpServletResponse response) { + List list = jxAqjcglService.queryList(bo); + ExcelUtil.exportExcel(list, "机械安全检查记录", JxAqjcglVo.class, response); + } + + /** + * 获取机械安全检查记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxaqgl:aqjcgl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxAqjcglService.queryById(id)); + } + + /** + * 新增机械安全检查记录 + */ + @SaCheckPermission("jxaqgl:aqjcgl:add") + @Log(title = "机械安全检查记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxAqjcglBo bo) { + return toAjax(jxAqjcglService.insertByBo(bo)); + } + + /** + * 修改机械安全检查记录 + */ + @SaCheckPermission("jxaqgl:aqjcgl:edit") + @Log(title = "机械安全检查记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxAqjcglBo bo) { + return toAjax(jxAqjcglService.updateByBo(bo)); + } + + /** + * 删除机械安全检查记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxaqgl:aqjcgl:remove") + @Log(title = "机械安全检查记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxAqjcglService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java new file mode 100644 index 00000000..e2909aee --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java @@ -0,0 +1,141 @@ +package org.dromara.mechanical.jxaqgl.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; + +/** + * 机械安全检查记录对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl") +public class JxAqjcgl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 检查单编号 + */ + private String inspectionOrderNo; + + /** + * 检查日期 + */ + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + private String inspectionType; + + /** + * 检查人 + */ + private Long inspector; + + /** + * 参与人(多个用逗号分隔) + */ + private String participants; + + /** + * 所属项目(如田东) + */ + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + private String projectName; + + /** + * 机械设备id + */ + private String equipmentId; + + /** + * 机械设备名称 + */ + private String equipmentName; + + /** + * 不通过原因 + */ + private String notPassCause; + /** + * 机械设备编号 + */ + private String equipmentCode; + + /** + * 设备类型(下拉选择项) + */ + private String equipmentType; + + /** + * 检查结果 + */ + private String inspectionResult; + + /** + * 风险等级 + */ + private String riskGrade; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 整改日期 + */ + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java new file mode 100644 index 00000000..f8ad6f4e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java @@ -0,0 +1,46 @@ +package org.dromara.mechanical.jxaqgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 机械安全检查记录——检查内容对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl_jcnr") +public class JxAqjcglJcnr extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 主表ID + */ + private Long masterId; + + /** + * 检查内容value + */ + private String examineValue; + + /** + * 检查内容数据 + */ + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java new file mode 100644 index 00000000..f89a98c7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java @@ -0,0 +1,41 @@ +package org.dromara.mechanical.jxaqgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 机械安全检查记录——问题详情对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl_wtxq") +public class JxAqjcglWtxq extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 主表ID + */ + private Long masterId; + + /** + * 问题详情 + */ + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java new file mode 100644 index 00000000..2340a1bf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java @@ -0,0 +1,24 @@ +package org.dromara.mechanical.jxaqgl.domain; + + +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class MonthDateRange { + + private LocalDate startDate; // 当月1号 + private LocalDate endDate; // 当月最后一天 + private String yearMonth; // 年月标识 + + + + + // 构造方法 + public MonthDateRange(LocalDate startDate, LocalDate endDate, String yearMonth) { + this.startDate = startDate; + this.endDate = endDate; + this.yearMonth = yearMonth; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java new file mode 100644 index 00000000..510a9425 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java @@ -0,0 +1,164 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +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.util.List; + +/** + * 机械安全检查记录业务对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcgl.class, reverseConvertGenerate = false) +public class JxAqjcglBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 检查单编号 + */ + private String inspectionOrderNo; + + /** + * 检查日期 + */ + @NotNull(message = "检查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + @NotBlank(message = "检查类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionType; + + /** + * 检查人 + */ + @NotNull(message = "检查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inspector; + + /** + * 参与人(多个用逗号分隔) + */ + private String participants; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 所属项目(如田东) + */ + @NotNull(message = "所属项目(如田东)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + @NotNull(message = "所属项目名称(如田东)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectName; + + /** + * 机械设备id + */ + @NotBlank(message = "机械设备id不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentId; + + /** + * 机械设备名称 + */ + @NotBlank(message = "机械设备名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 机械设备编号 + */ +// @NotBlank(message = "机械设备编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentCode; + + /** + * 设备类型(下拉选择项) + */ + @NotBlank(message = "设备类型(下拉选择项)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentType; + + /** + * 检查结果 + */ + @NotBlank(message = "检查结果不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionResult; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 风险等级 + */ + private String riskGrade; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改日期 + */ + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + + /** + * 检查内容 + */ + private List jcnrList; + /** + * 问题详情 + */ + private List wtxqBoList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java new file mode 100644 index 00000000..8f712e40 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java @@ -0,0 +1,47 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +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.*; + +/** + * 机械安全检查记录——检查内容业务对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcglJcnr.class, reverseConvertGenerate = false) +public class JxAqjcglJcnrBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 主表ID + */ + @NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 检查内容key + */ + @NotBlank(message = "检查内容value不能为空", groups = { AddGroup.class, EditGroup.class }) + private String examineValue; + /** + * 检查内容数据 + */ + @NotBlank(message = "检查内容数据不能为空", groups = { AddGroup.class, EditGroup.class }) + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java new file mode 100644 index 00000000..f9f8641b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java @@ -0,0 +1,42 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +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.*; + +/** + * 机械安全检查记录——问题详情业务对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcglWtxq.class, reverseConvertGenerate = false) +public class JxAqjcglWtxqBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 主表ID + */ + @NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 问题详情 + */ + @NotBlank(message = "问题详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java new file mode 100644 index 00000000..df75a781 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java @@ -0,0 +1,69 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxAnqjcgHeadVo implements Serializable { + + /** + * 月份 + */ + private String month = ""; + + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 未通过 + */ + private Long wtg = 0L; + + /** + * 通过 + */ + private Long tg = 0L; + + + /** + * 待检测 + */ + private Long djc = 0L; + + + /** + * 整改完成率 + */ +// private String wcl = "0%"; + + /** + * 日常巡检 + */ + private Long rcxj = 0L; + + /** + * 周检 + */ + private Long zj = 0L; + + /** + * 月检 + */ + private Long yj = 0L; + + /** + * 专项检查 + */ + private Long zxjc = 0L; + /** + * 复检 + */ + private Long fj = 0L; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java new file mode 100644 index 00000000..3490a512 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java @@ -0,0 +1,55 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +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.util.Date; + + + +/** + * 机械安全检查记录——检查内容视图对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcglJcnr.class) +public class JxAqjcglJcnrVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 主表ID + */ + @ExcelProperty(value = "主表ID") + private Long masterId; + + /** + * 检查内容key + */ + @ExcelProperty(value = "检查内容value") + private String examineValue; + /** + * 检查内容数据 + */ + @ExcelProperty(value = "检查内容数据") + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java new file mode 100644 index 00000000..932d1e35 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java @@ -0,0 +1,222 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +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 org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 机械安全检查记录视图对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcgl.class) +public class JxAqjcglVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 检查单编号 + */ + @ExcelProperty(value = "检查单编号") + private String inspectionOrderNo; + + /** + * 检查日期 + */ + @ExcelProperty(value = "检查日期") + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + @ExcelProperty(value = "检查类型") + private String inspectionType; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + private Long inspector; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 整改单位 + */ + private String rectificationName; + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector") + private String inspectorName; + + /** + * 参与人(多个用逗号分隔) + */ + @ExcelProperty(value = "参与人") + private String participants; + + /** + * 所属项目(如田东) + */ + @ExcelProperty(value = "所属项目(如田东)") + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + @ExcelProperty(value = "所属项目名称(如田东)") + private String projectName; + + /** + * 机械设备id + */ + @ExcelProperty(value = "机械设备id") + private String equipmentId; + + /** + * 机械设备名称 + */ + @ExcelProperty(value = "机械设备名称") + private String equipmentName; + + /** + * 机械设备编号 + */ + @ExcelProperty(value = "机械设备编号") + private String equipmentCode; + + /** + * 设备类型 + */ + @ExcelProperty(value = "设备类型") + private String equipmentType; + + /** + * 检查结果 + */ + @ExcelProperty(value = "检查结果") + private String inspectionResult; + + /** + * 风险等级 + */ + @ExcelProperty(value = "风险等级") + private String riskGrade; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + + + /** + * 整改日期 + */ + @ExcelProperty(value = "整改日期") + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + /** + * 检查内容 + */ + private List jcnrList; + /** + * 问题详情 + */ + private List wtxqBoList; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java new file mode 100644 index 00000000..ccd7acc9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java @@ -0,0 +1,50 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +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.util.Date; + + + +/** + * 机械安全检查记录——问题详情视图对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcglWtxq.class) +public class JxAqjcglWtxqVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 主表ID + */ + @ExcelProperty(value = "主表ID") + private Long masterId; + + /** + * 问题详情 + */ + @ExcelProperty(value = "问题详情") + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java new file mode 100644 index 00000000..89ec5c0b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录——检查内容Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglJcnrMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java new file mode 100644 index 00000000..5987f759 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java new file mode 100644 index 00000000..f3eb44c1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录——问题详情Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglWtxqMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java new file mode 100644 index 00000000..e2fb79c9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录——检查内容Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglJcnrService extends IService{ + + /** + * 查询机械安全检查记录——检查内容 + * + * @param id 主键 + * @return 机械安全检查记录——检查内容 + */ + JxAqjcglJcnrVo queryById(Long id); + + /** + * 分页查询机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——检查内容分页列表 + */ + TableDataInfo queryPageList(JxAqjcglJcnrBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——检查内容列表 + */ + List queryList(JxAqjcglJcnrBo bo); + + /** + * 新增机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglJcnrBo bo); + + /** + * 修改机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglJcnrBo bo); + + /** + * 校验并批量删除机械安全检查记录——检查内容信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java new file mode 100644 index 00000000..b376500d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java @@ -0,0 +1,76 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.common.core.domain.R; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglService extends IService{ + + /** + * 查询机械安全检查记录 + * + * @param id 主键 + * @return 机械安全检查记录 + */ + JxAqjcglVo queryById(Long id); + + /** + * 分页查询机械安全检查记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录分页列表 + */ + TableDataInfo queryPageList(JxAqjcglBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录列表 + */ + List queryList(JxAqjcglBo bo); + + /** + * 新增机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglBo bo); + + /** + * 修改机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglBo bo); + + /** + * 校验并批量删除机械安全检查记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery); + + List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java new file mode 100644 index 00000000..eaccc5bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录——问题详情Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglWtxqService extends IService{ + + /** + * 查询机械安全检查记录——问题详情 + * + * @param id 主键 + * @return 机械安全检查记录——问题详情 + */ + JxAqjcglWtxqVo queryById(Long id); + + /** + * 分页查询机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——问题详情分页列表 + */ + TableDataInfo queryPageList(JxAqjcglWtxqBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——问题详情列表 + */ + List queryList(JxAqjcglWtxqBo bo); + + /** + * 新增机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglWtxqBo bo); + + /** + * 修改机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglWtxqBo bo); + + /** + * 校验并批量删除机械安全检查记录——问题详情信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java new file mode 100644 index 00000000..0841cd3d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.mechanical.jxaqgl.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.springframework.stereotype.Service; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglJcnrMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械安全检查记录——检查内容Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglJcnrServiceImpl extends ServiceImpl implements IJxAqjcglJcnrService { + + private final JxAqjcglJcnrMapper baseMapper; + + /** + * 查询机械安全检查记录——检查内容 + * + * @param id 主键 + * @return 机械安全检查记录——检查内容 + */ + @Override + public JxAqjcglJcnrVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——检查内容分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglJcnrBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——检查内容列表 + */ + @Override + public List queryList(JxAqjcglJcnrBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglJcnrBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcglJcnr::getId); + lqw.eq(bo.getMasterId() != null, JxAqjcglJcnr::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getExamineContent()), JxAqjcglJcnr::getExamineContent, bo.getExamineContent()); + return lqw; + } + + /** + * 新增机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxAqjcglJcnrBo bo) { + JxAqjcglJcnr add = MapstructUtils.convert(bo, JxAqjcglJcnr.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxAqjcglJcnrBo bo) { + JxAqjcglJcnr update = MapstructUtils.convert(bo, JxAqjcglJcnr.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcglJcnr entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械安全检查记录——检查内容信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java new file mode 100644 index 00000000..ad85eb0c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java @@ -0,0 +1,363 @@ +package org.dromara.mechanical.jxaqgl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +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.enums.InspectionRectificationUnitType; +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.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.MonthDateRange; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.service.IBusProjectService; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械安全检查记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglServiceImpl extends ServiceImpl implements IJxAqjcglService { + + private final JxAqjcglMapper baseMapper; + + private final IJxAqjcglJcnrService jxAqjcglJcnrService; + + private final IJxAqjcglWtxqService jxAqjcglWtxqService; + + + private final SysOssServiceImpl sysOssService; + + @Resource + private ISubContractorService contractorService; + + @Resource + private IBusProjectTeamService projectTeamService; + + @Lazy + @Autowired + private IJxYhzgbhService jxYhzgbhService; + + + /** + * 查询机械安全检查记录 + * + * @param id 主键 + * @return 机械安全检查记录 + */ + @Override + public JxAqjcglVo queryById(Long id){ + JxAqjcglVo jxAqjcglVo = baseMapper.selectVoById(id); + saveValue(jxAqjcglVo); + return jxAqjcglVo; + } + + private void saveValue(JxAqjcglVo jxAqjcglVo) { + if (jxAqjcglVo != null) { + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxAqjcglVo.getId())); + List jxAqjcglJcnrs = jxAqjcglJcnrService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglJcnr::getMasterId, jxAqjcglVo.getId())); + jxAqjcglVo.setWtxqBoList(jxAqjcglWtxqs); + jxAqjcglVo.setJcnrList(jxAqjcglJcnrs); + + // 关联整改单位信息 + Long rectificationId = jxAqjcglVo.getRectificationId(); + String rectificationUnit = jxAqjcglVo.getRectificationUnit(); + if (rectificationId != null && rectificationUnit != null) { + if (rectificationUnit.equals(InspectionRectificationUnitType.CONTRACTOR.getValue())) { + SubContractor contractor = contractorService.getById(rectificationId); + jxAqjcglVo.setRectificationName(contractor.getName()); + } else if (rectificationUnit.equals(InspectionRectificationUnitType.TEAM.getValue())) { + BusProjectTeam team = projectTeamService.getById(rectificationId); + if (team != null) { + jxAqjcglVo.setRectificationName(team.getTeamName()); + } + } + } + + + } + } + + /** + * 分页查询机械安全检查记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械安全检查记录列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录列表 + */ + @Override + public List queryList(JxAqjcglBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcgl::getId); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionOrderNo()), JxAqjcgl::getInspectionOrderNo, bo.getInspectionOrderNo()); + lqw.eq(bo.getInspectionDate() != null, JxAqjcgl::getInspectionDate, bo.getInspectionDate()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionType()), JxAqjcgl::getInspectionType, bo.getInspectionType()); + lqw.eq(bo.getInspector() != null, JxAqjcgl::getInspector, bo.getInspector()); + lqw.eq(StringUtils.isNotBlank(bo.getParticipants()), JxAqjcgl::getParticipants, bo.getParticipants()); + lqw.eq(bo.getProjectStation() != null, JxAqjcgl::getProjectStation, bo.getProjectStation()); + lqw.like(bo.getProjectName() != null, JxAqjcgl::getProjectName, bo.getProjectName()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentId()), JxAqjcgl::getEquipmentId, bo.getEquipmentId()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxAqjcgl::getEquipmentName, bo.getEquipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentCode()), JxAqjcgl::getEquipmentCode, bo.getEquipmentCode()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentType()), JxAqjcgl::getEquipmentType, bo.getEquipmentType()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionResult()), JxAqjcgl::getInspectionResult, bo.getInspectionResult()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskGrade()), JxAqjcgl::getRiskGrade, bo.getRiskGrade()); + lqw.eq(bo.getAbarbeitung() != null, JxAqjcgl::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungDate() != null, JxAqjcgl::getAbarbeitungDate, bo.getAbarbeitungDate()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxAqjcgl::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxAqjcgl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(JxAqjcglBo bo) { + JxAqjcgl add = MapstructUtils.convert(bo, JxAqjcgl.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("JXAQJCJL-"); + add.setInspectionOrderNo(banBen); + + boolean flag = baseMapper.insert(add) > 0; +// 问题情况添加 + List wtxqBoList = bo.getWtxqBoList(); + if (wtxqBoList != null && wtxqBoList.size() > 0) { + wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId())); + jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class)); + } + +// 检查内容添加 + List jcnrList = bo.getJcnrList(); + if (jcnrList != null && jcnrList.size() > 0) { + jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId())); + jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class)); + } + + return flag; + } + + /** + * 修改机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(JxAqjcglBo bo) { + JxAqjcgl update = MapstructUtils.convert(bo, JxAqjcgl.class); + validEntityBeforeSave(update); + if ("2".equals(bo.getInspectionResult())){ + update.setAbarbeitungState("1"); + JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(JxYhzgbh::getMasterId, update.getId())); + if (jxYhzgbh != null) throw new ServiceException("该数据已存在整改数据"); +// 不通过转为整改数据 + JxYhzgbhBo jxYhzgbhBo = new JxYhzgbhBo(); + String banBen = BatchNumberGenerator.generateBatchNumber("JXZGBH-"); + jxYhzgbhBo.setInspectionOrderNo(banBen); + jxYhzgbhBo.setMasterId(bo.getId()); + jxYhzgbhBo.setInspectionJcdNo(bo.getInspectionOrderNo()); + jxYhzgbhBo.setInspector(bo.getInspector()); + jxYhzgbhBo.setRiskGrade(bo.getRiskGrade()); + jxYhzgbhBo.setAbarbeitung(bo.getAbarbeitung()); + jxYhzgbhBo.setYhly("1"); + jxYhzgbhBo.setReviewState("2"); + jxYhzgbhBo.setAbarbeitungState("1"); + jxYhzgbhBo.setEquipmentName(bo.getEquipmentName()); + jxYhzgbhBo.setDiscoverDate(bo.getInspectionDate()); + jxYhzgbhBo.setDiscoverId(bo.getCreateBy()); + jxYhzgbhService.insertByBo(jxYhzgbhBo); + + } + // 问题情况添加 + List wtxqBoList = bo.getWtxqBoList(); + jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, update.getId())); + if (wtxqBoList != null && wtxqBoList.size() > 0) { + wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId())); + jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class)); + } + +// 检查内容添加 + List jcnrList = bo.getJcnrList(); + jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper().eq(JxAqjcglJcnr::getMasterId, update.getId())); + if (jcnrList != null && jcnrList.size() > 0) { + jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId())); + jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class)); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcgl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械安全检查记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + + for (Long id : ids) { + JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(JxYhzgbh::getMasterId, id)); + if (jxYhzgbh != null) throw new ServiceException("隐患整改编号为"+jxYhzgbh.getInspectionOrderNo()+"已存在整改数据,无法删除"); + JxAqjcglVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + if (vo.getPdfId()!= null && !vo.getPdfId().isEmpty()){ + List list = Arrays.stream(vo.getPdfId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper().in(JxAqjcglWtxq::getMasterId, ids)); + jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper().in(JxAqjcglJcnr::getMasterId, ids)); + + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery) { + JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo(); + List jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxAqjcgl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxAqjcgl::getCreateTime, LocalDate.now().minusDays(29))); + if (jxAqjcgls != null && jxAqjcgls.size() > 0) { + jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size())); + jxAnqjcgHeadVo.setTg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("1")).count()); + jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count()); + jxAnqjcgHeadVo.setDjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("3")).count()); + + jxAnqjcgHeadVo.setRcxj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("1")).count()); + jxAnqjcgHeadVo.setZj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("2")).count()); + jxAnqjcgHeadVo.setYj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("3")).count()); + jxAnqjcgHeadVo.setZxjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("4")).count()); + jxAnqjcgHeadVo.setFj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("5")).count()); + } + return jxAnqjcgHeadVo; + } + + @Override + public List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) { + List monthRanges = getLast6MonthsRange(); + ArrayList jxAnqjcgHeadVos = new ArrayList<>(); + + for (MonthDateRange range : monthRanges) { + JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo(); + List jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxAqjcgl::getCreateTime, range.getEndDate()).ge(JxAqjcgl::getCreateTime, range.getStartDate())); + jxAnqjcgHeadVo.setMonth(range.getYearMonth()); + if (jxAqjcgls != null && jxAqjcgls.size() > 0) { + jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size())); + jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count()); + } + jxAnqjcgHeadVos.add(jxAnqjcgHeadVo); + } + + return jxAnqjcgHeadVos; + } + + + /** + * 获取近6个月的每月完整日期范围 + * @return 包含6个 MonthDateRange 对象的列表(按「当前月→最早月」排序) + */ + public static List getLast6MonthsRange() { + List monthRangeList = new ArrayList<>(); + LocalDate today = LocalDate.now(); + + // 循环6次:当前月(i=0)、前1月(i=1)...前5月(i=5) + for (int i = 0; i < 6; i++) { + // 1. 获取目标月的1号(核心:先减月份,再设为当月1号,避免日期异常) + LocalDate monthFirstDay = today.minusMonths(i).withDayOfMonth(1); + + // 2. 获取目标月的最后一天(下个月1号 - 1天) + LocalDate monthLastDay = monthFirstDay.plusMonths(1).minusDays(1); + + // 3. 生成年月标识(如 "2024-05") + String yearMonth = monthFirstDay.toString().substring(0, 7); // 截取 yyyy-MM 部分 + + // 4. 封装到对象并添加到列表 + monthRangeList.add(new MonthDateRange(monthFirstDay, monthLastDay, yearMonth)); + } + + return monthRangeList; + } +} + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java new file mode 100644 index 00000000..526b0046 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.mechanical.jxaqgl.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.springframework.stereotype.Service; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglWtxqMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械安全检查记录——问题详情Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglWtxqServiceImpl extends ServiceImpl implements IJxAqjcglWtxqService { + + private final JxAqjcglWtxqMapper baseMapper; + + /** + * 查询机械安全检查记录——问题详情 + * + * @param id 主键 + * @return 机械安全检查记录——问题详情 + */ + @Override + public JxAqjcglWtxqVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——问题详情分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglWtxqBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——问题详情列表 + */ + @Override + public List queryList(JxAqjcglWtxqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglWtxqBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcglWtxq::getId); + lqw.eq(bo.getMasterId() != null, JxAqjcglWtxq::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getIssueParticulars()), JxAqjcglWtxq::getIssueParticulars, bo.getIssueParticulars()); + return lqw; + } + + /** + * 新增机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxAqjcglWtxqBo bo) { + JxAqjcglWtxq add = MapstructUtils.convert(bo, JxAqjcglWtxq.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxAqjcglWtxqBo bo) { + JxAqjcglWtxq update = MapstructUtils.convert(bo, JxAqjcglWtxq.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcglWtxq entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械安全检查记录——问题详情信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java index 1c57d717..00e6c3bd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java @@ -10,6 +10,7 @@ import org.dromara.device.domain.bo.DeviceInfoBo; import org.dromara.device.domain.vo.DeviceInfoVo; import org.dromara.device.service.IDeviceInfoService; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; import org.dromara.system.service.impl.SysOssServiceImpl; import org.springframework.web.bind.annotation.*; @@ -68,6 +69,16 @@ public class JxGzwxController extends BaseController { return jxGzwxService.queryPageList(bo, pageQuery); } + + /** + * 根据故障id查询机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/getlistById/{id}") + public List getlistById(@PathVariable("id") Long id) { + return jxGzwxService.getlistById(id); + } + /** * 导出机械故障维修列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java index 22e39efd..48aa52ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java @@ -6,7 +6,10 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -37,6 +40,20 @@ public class JxGzwxJlController extends BaseController { private final IJxGzwxJlService jxGzwxJlService; + private final IJxGzwxService jxGzwxService; + + + + + /** + * 查询机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @GetMapping("/getlist") + public TableDataInfo list(JxGzwxBo bo, PageQuery pageQuery) { + return jxGzwxService.queryPageList(bo, pageQuery); + } + /** * 查询机械故障维修记录列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java index 06a067e9..fa1fbdb1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java @@ -9,7 +9,10 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import org.dromara.device.domain.bo.DeviceInfoBo; import org.dromara.device.domain.vo.DeviceInfoVo; import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxgl.domain.JxWhjl; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -40,6 +43,8 @@ public class JxWhjhController extends BaseController { private final IJxWhjhService jxWhjhService; + + private final IDeviceInfoService deviceInfoService; @@ -56,6 +61,16 @@ public class JxWhjhController extends BaseController { } + /** + * 根据计划id查询记录信息列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/getlistById/{id}") + public List getlistById(@PathVariable("id") Long id) { + return jxWhjhService.getlistById(id); + } + + /** * 查询机械维护计划列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java index 353ec7da..a41cfb38 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java @@ -45,11 +45,6 @@ public class JxWhjlController extends BaseController { private final IJxWhjhService jxWhjhService; - - - - - /** * 查询机械维护计划列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java index aa0cf93d..fdc079dc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java @@ -32,6 +32,12 @@ public class JxGzwx extends BaseEntity { @TableId(value = "fault_id") private Long faultId; + /** + * 故障名称 + */ + private String faultName; + + /** * 台账ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java index b06e8a2d..40c8839b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java @@ -38,6 +38,16 @@ public class JxGzwxJl extends BaseEntity { */ private Long faultId; + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + /** * 台账ID diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java index 076488d6..1cfdf36f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java @@ -39,6 +39,11 @@ public class JxWhjh extends BaseEntity { */ private String equipmentName; + /** + * 维修计划名称 + */ + private String wxjhName; + /** * 计划类型 字典 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java index 134cf973..c1be93f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java @@ -82,6 +82,16 @@ public class JxWhjl extends BaseEntity { */ private String maintenanceResult; + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java index dcb583e1..ecdf53dc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java @@ -91,5 +91,16 @@ public class JxGzwxBo extends BaseEntity { */ private String fileId; + /** + * 故障名称 + */ + private String faultName; + + + + private LocalDate startTime; + + private LocalDate endTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java index 65bdab3d..eb0fb729 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java @@ -9,6 +9,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -33,6 +34,17 @@ public class JxGzwxJlBo extends BaseEntity { @NotNull(message = "故障ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long faultId; + + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + /** * 台账ID */ @@ -108,4 +120,9 @@ public class JxGzwxJlBo extends BaseEntity { private String fileId; + private LocalDate startTime; + + private LocalDate endTime; + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java index b240229f..2eb20b66 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java @@ -56,6 +56,12 @@ public class JxWhjhBo extends BaseEntity { */ private String maintenanceItems; + + /** + * 维修计划名称 + */ + private String wxjhName; + /** * 周期类型 字典 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java index 28808e00..01e37a61 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java @@ -32,6 +32,16 @@ public class JxWhjlBo extends BaseEntity { */ private Long whjhId; + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + /** * 台账ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java index 22122ead..e96b2f0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java @@ -2,10 +2,14 @@ package org.dromara.mechanical.jxgl.domain.vo; import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.mechanical.jxgl.domain.JxGzwxJl; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -52,6 +56,16 @@ public class JxGzwxJlVo implements Serializable { */ private String equipmentName; + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + /** * 故障ID */ @@ -76,6 +90,14 @@ public class JxGzwxJlVo implements Serializable { @ExcelProperty(value = "维修人员") private Long repairPerson; + + /** + * 维修人员 + */ + @ExcelProperty(value = "维修人员") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "repairPerson") + private String repairPersonName; + /** * 维修内容 */ @@ -91,8 +113,8 @@ public class JxGzwxJlVo implements Serializable { /** * 维修费用(材料费 + 工时费) */ - @ExcelProperty(value = "维修费用", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "材=料费,+=,工=时费") + @ExcelProperty(value = "维修费用") +// @ExcelDictFormat(readConverterExp = "材料费和工时费") private BigDecimal repairCost; /** @@ -110,8 +132,8 @@ public class JxGzwxJlVo implements Serializable { /** * 状态 维修中 已恢复 关闭 */ - @ExcelProperty(value = "状态 维修中 已恢复 关闭", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "jx_gzwxzt") + @ExcelProperty(value = "状态 维修中 已恢复 关闭") +// @ExcelDictFormat(dictType = "jx_gzwxzt") private String status; /** @@ -133,5 +155,26 @@ public class JxGzwxJlVo implements Serializable { @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String fileId; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java index 74f4b586..32782d95 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java @@ -1,8 +1,12 @@ package org.dromara.mechanical.jxgl.domain.vo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import jakarta.validation.constraints.NotBlank; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.mechanical.jxgl.domain.JxGzwx; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -39,6 +43,11 @@ public class JxGzwxVo implements Serializable { @ExcelProperty(value = "故障ID") private Long faultId; + /** + * 故障名称 + */ + private String faultName; + /** * 台账ID */ @@ -109,4 +118,19 @@ public class JxGzwxVo implements Serializable { private String fileId; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java index 13c866eb..08ac5388 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java @@ -1,6 +1,11 @@ package org.dromara.mechanical.jxgl.domain.vo; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.mechanical.jxgl.domain.JxWhjh; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -102,6 +107,19 @@ public class JxWhjhVo implements Serializable { @ExcelProperty(value = "负责人员") private Long responsiblePerson; + + /** + * 负责人员 + */ + @ExcelProperty(value = "负责人员") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "responsiblePerson") + private String responsiblePersonname; + + /** + * 维修计划名称 + */ + private String wxjhName; + /** * 状态 (未开始/进行中/已完成/逾期) */ @@ -129,4 +147,19 @@ public class JxWhjhVo implements Serializable { private String fileId; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java index 805715b2..75cb3821 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java @@ -2,9 +2,13 @@ package org.dromara.mechanical.jxgl.domain.vo; import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import jakarta.validation.constraints.NotBlank; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.mechanical.jxgl.domain.JxWhjl; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -98,6 +102,13 @@ public class JxWhjlVo implements Serializable { @ExcelProperty(value = "执行人") private Long maintainer; + /** + * 执行人 + */ + @ExcelProperty(value = "执行人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "maintainer") + private String maintainername; + /** * 保养结果(正常/异常/需复检) */ @@ -118,5 +129,33 @@ public class JxWhjlVo implements Serializable { @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String fileId; + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java index f040ddc5..3fb209c0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java @@ -1,6 +1,7 @@ package org.dromara.mechanical.jxgl.service; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; import org.dromara.mechanical.jxgl.domain.JxGzwx; @@ -70,4 +71,6 @@ public interface IJxGzwxService extends IService{ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); JxGzwxHeadVo jxgzwx(); + + List getlistById(Long id); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java index 3c4127d1..da2c0b0d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java @@ -1,5 +1,6 @@ package org.dromara.mechanical.jxgl.service; +import org.dromara.mechanical.jxgl.domain.JxWhjl; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; @@ -8,6 +9,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.mechanical.jxgl.domain.vo.JxWhjlVo; + import java.util.Collection; import java.util.List; @@ -70,4 +73,6 @@ public interface IJxWhjhService extends IService{ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); JxWhjhHeadVo jxwhHead(); + + List getlistById(Long id); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java index 34ef2b9e..cf87c30f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java @@ -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 i private final JxGzwxJlMapper baseMapper; private final IJxGzwxService jxGzwxService; + private final ISysOssService sysOssService; /** * 查询机械故障维修记录 @@ -82,11 +85,14 @@ public class JxGzwxJlServiceImpl extends ServiceImpl i LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(JxGzwxJl::getId); lqw.eq(bo.getFaultId() != null, JxGzwxJl::getFaultId, bo.getFaultId()); + lqw.ge(bo.getStartTime() != null, JxGzwxJl::getCreateTime, bo.getStartTime()); + lqw.le(bo.getEndTime() != null, JxGzwxJl::getCreateTime, bo.getEndTime()); lqw.eq(bo.getRepairStartTime() != null, JxGzwxJl::getRepairStartTime, bo.getRepairStartTime()); lqw.eq(bo.getRepairEndTime() != null, JxGzwxJl::getRepairEndTime, bo.getRepairEndTime()); lqw.eq(bo.getRepairPerson() != null, JxGzwxJl::getRepairPerson, bo.getRepairPerson()); lqw.eq(StringUtils.isNotBlank(bo.getRepairContent()), JxGzwxJl::getRepairContent, bo.getRepairContent()); lqw.eq(StringUtils.isNotBlank(bo.getPartsUsed()), JxGzwxJl::getPartsUsed, bo.getPartsUsed()); + lqw.like(StringUtils.isNotBlank(bo.getFaultjlName()), JxGzwxJl::getFaultjlName, bo.getFaultjlName()); lqw.eq(bo.getRepairCost() != null, JxGzwxJl::getRepairCost, bo.getRepairCost()); lqw.eq(StringUtils.isNotBlank(bo.getFaultCause()), JxGzwxJl::getFaultCause, bo.getFaultCause()); lqw.eq(StringUtils.isNotBlank(bo.getPreventiveActions()), JxGzwxJl::getPreventiveActions, bo.getPreventiveActions()); @@ -151,13 +157,28 @@ public class JxGzwxJlServiceImpl extends ServiceImpl i if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxGzwxJlVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List 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 JxGzwxHeadVo jxgzwx() { JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo(); - List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxGzwxJl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxGzwxJl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwxJl::getCreateTime, LocalDate.now().minusDays(29))); if (jxGzwxes != null && jxGzwxes.size() > 0) { long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count(); long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java index 9f75c38d..7c3785b1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java @@ -9,10 +9,15 @@ 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.mechanical.jxgl.domain.JxGzwxJl; import org.dromara.mechanical.jxgl.domain.JxWhjh; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxJlService; import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; @@ -36,6 +41,10 @@ public class JxGzwxServiceImpl extends ServiceImpl impleme private final JxGzwxMapper baseMapper; + @Lazy + @Autowired + private IJxGzwxJlService jxGzwxJlService; + private final SysOssServiceImpl sysOssService; /** @@ -48,7 +57,6 @@ public class JxGzwxServiceImpl extends ServiceImpl impleme public JxGzwxVo queryById(Long faultId){ return baseMapper.selectVoById(faultId); } - /** * 分页查询机械故障维修列表 * @@ -81,6 +89,8 @@ public class JxGzwxServiceImpl extends ServiceImpl impleme lqw.orderByDesc(JxGzwx::getFaultId); lqw.eq(bo.getEquipmentId() != null, JxGzwx::getEquipmentId, bo.getEquipmentId()); lqw.eq(bo.getFaultTime() != null, JxGzwx::getFaultTime, bo.getFaultTime()); + lqw.gt(bo.getStartTime() != null, JxGzwx::getFaultTime, bo.getStartTime()); + lqw.le(bo.getEndTime() != null, JxGzwx::getFaultTime, bo.getEndTime()); lqw.eq(StringUtils.isNotBlank(bo.getFaultType()), JxGzwx::getFaultType, bo.getFaultType()); lqw.eq(StringUtils.isNotBlank(bo.getFaultDescription()), JxGzwx::getFaultDescription, bo.getFaultDescription()); lqw.eq(StringUtils.isNotBlank(bo.getSeverity()), JxGzwx::getSeverity, bo.getSeverity()); @@ -162,7 +172,7 @@ public class JxGzwxServiceImpl extends ServiceImpl impleme public JxGzwxHeadVo jxgzwx() { JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo(); - List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxGzwx::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxGzwx::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwx::getCreateTime, LocalDate.now().minusDays(29))); if (jxGzwxes != null && jxGzwxes.size() > 0) { long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count(); long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count(); @@ -175,4 +185,10 @@ public class JxGzwxServiceImpl extends ServiceImpl impleme return jxGzwxHeadVo; } + + @Override + public List getlistById(Long id) { + List jxGzwxJls = jxGzwxJlService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxGzwxJl::getFaultId, id)); + return MapstructUtils.convert(jxGzwxJls, JxGzwxJlVo.class); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java index cfe4bf09..fbf13b20 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java @@ -1,6 +1,8 @@ package org.dromara.mechanical.jxgl.service.impl; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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; @@ -9,15 +11,24 @@ 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.device.domain.DeviceInfo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxgl.domain.JxWhjl; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.settlement.domain.vo.XzdJsSjJungonVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; import org.dromara.mechanical.jxgl.domain.JxWhjh; import org.dromara.mechanical.jxgl.mapper.JxWhjhMapper; import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; @@ -34,6 +45,16 @@ import java.util.*; public class JxWhjhServiceImpl extends ServiceImpl implements IJxWhjhService { private final JxWhjhMapper baseMapper; + + @Lazy + @Autowired + private IJxWhjlService jxWhjlService; + + private final IDeviceInfoService deviceInfoService; + + + + private final SysOssServiceImpl sysOssService; /** @@ -100,9 +121,17 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(JxWhjhBo bo) { JxWhjh add = MapstructUtils.convert(bo, JxWhjh.class); validEntityBeforeSave(add); + //反查数据判断是都被添加过 + JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(JxWhjh::getEquipmentId, bo.getEquipmentId())); + if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划"); +// 修改设备状态 + deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId())); + + boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); @@ -120,6 +149,16 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme public Boolean updateByBo(JxWhjhBo bo) { JxWhjh update = MapstructUtils.convert(bo, JxWhjh.class); validEntityBeforeSave(update); + Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, bo.getId())); + if (l > 0) throw new ServiceException("该计划已添加保养记录,无法修改"); + +// //反查数据判断是都被添加过 +// JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(JxWhjh::getEquipmentId, bo.getEquipmentId())); +// if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划"); +// +// // 修改设备状态 +// deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId())); +// return baseMapper.updateById(update) > 0; } @@ -145,6 +184,9 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme List deleteIds = new ArrayList<>(); for (Long id : ids) { JxWhjhVo vo = baseMapper.selectVoById(id); +// 判断计划是否被引用 + Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, id)); + if (l > 0) throw new ServiceException("该计划被引用,请先删除计划下的记录"); if (vo != null){ //删除附件 if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ @@ -162,7 +204,7 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme @Override public JxWhjhHeadVo jxwhHead() { JxWhjhHeadVo jxWhjhHeadVo = new JxWhjhHeadVo(); - List jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxWhjh::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + List jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxWhjh::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjh::getCreateTime, LocalDate.now().minusDays(29))); if (jxWhjhs != null && jxWhjhs.size() > 0) { long countwwc = jxWhjhs.stream().filter(jxwhjh -> "1".equals(jxwhjh.getStatus()) || "2".equals(jxwhjh.getStatus())).count(); long countywc = jxWhjhs.stream().filter(jxwhjh -> "3".equals(jxwhjh.getStatus())).count(); @@ -174,4 +216,11 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme } return jxWhjhHeadVo; } + + @Override + public List getlistById(Long id) { + List jxWhjls = jxWhjlService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, id)); + + return MapstructUtils.convert(jxWhjls, JxWhjlVo.class); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java index 2b9ccf12..1ada9e73 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.mechanical.jxgl.service.impl; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.dromara.common.core.utils.MapstructUtils; @@ -10,6 +11,9 @@ 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.device.domain.DeviceInfo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; import org.dromara.mechanical.jxgl.domain.JxWhjh; import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; @@ -43,6 +47,8 @@ public class JxWhjlServiceImpl extends ServiceImpl impleme private final SysOssServiceImpl sysOssService; + private final IDeviceInfoService deviceInfoService; + /** * 查询机械维护记录 @@ -112,11 +118,16 @@ public class JxWhjlServiceImpl extends ServiceImpl impleme boolean flag = baseMapper.insert(add) > 0; if (bo != null){ if ("1".equals(bo.getMaintenanceResult())){ + // 修改设备状态 + deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"1").eq(DeviceInfo::getId,bo.getEquipmentId())); + jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","3")); }else { jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","2")); } + + } if (flag) { bo.setId(add.getId()); @@ -185,7 +196,7 @@ public class JxWhjlServiceImpl extends ServiceImpl impleme public JxWhjlHeadVo jxwhHead() { JxWhjlHeadVo jxWhjlHeadVo = new JxWhjlHeadVo(); - List jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxWhjl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + List jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxWhjl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjl::getCreateTime, LocalDate.now().minusDays(29))); if (jxWhjls != null && jxWhjls.size() > 0) { long zc = jxWhjls.stream().filter(jxwhjl -> "1".equals(jxwhjl.getMaintenanceResult())).count(); long yc = jxWhjls.stream().filter(jxwhjl -> "2".equals(jxwhjl.getMaintenanceResult())).count(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java new file mode 100644 index 00000000..7bbcf848 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java @@ -0,0 +1,137 @@ +package org.dromara.mechanical.jxsgjl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +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.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; +import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械事故信息记录 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxsgjl/sgxxjlb") +public class JxSgxxjlbController extends BaseController { + + private final IJxSgxxjlbService jxSgxxjlbService; + + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 查询机械事故信息记录列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/list") + public TableDataInfo list(JxSgxxjlbBo bo, PageQuery pageQuery) { + return jxSgxxjlbService.queryPageList(bo, pageQuery); + } + + /** + * 查询机械事故记录头部数据 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/getHeadData") + public R getHeadData() { + return R.ok(jxSgxxjlbService.getHeadData()); + } + + + /** + * 导出机械事故信息记录列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:export") + @Log(title = "机械事故信息记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxSgxxjlbBo bo, HttpServletResponse response) { + List list = jxSgxxjlbService.queryList(bo); + ExcelUtil.exportExcel(list, "机械事故信息记录", JxSgxxjlbVo.class, response); + } + + /** + * 获取机械事故信息记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxSgxxjlbService.queryById(id)); + } + + /** + * 新增机械事故信息记录 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:add") + @Log(title = "机械事故信息记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxSgxxjlbBo bo) { + return toAjax(jxSgxxjlbService.insertByBo(bo)); + } + + /** + * 修改机械事故信息记录 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:edit") + @Log(title = "机械事故信息记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxSgxxjlbBo bo) { + return toAjax(jxSgxxjlbService.updateByBo(bo)); + } + + /** + * 删除机械事故信息记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:remove") + @Log(title = "机械事故信息记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxSgxxjlbService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java new file mode 100644 index 00000000..1f264b92 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java @@ -0,0 +1,139 @@ +package org.dromara.mechanical.jxsgjl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械事故信息记录对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_sgxxjlb") +public class JxSgxxjlb extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + private String equipmentName; + + /** + * 设备台账id + */ + private Long equipmentId; + + /** + * 发生时间 + */ + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + private String casualtySituation; + + /** + * 应急处理措施 + */ + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + private String rectificationMeasures; + + /** + * 责任人 + */ + private Long responsiblePerson; + + /** + * 处理结果 + */ + private String handleResult; + + /** + * 记录人 + */ + private Long recorder; + + /** + * 记录日期 + */ + private LocalDate recordDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java new file mode 100644 index 00000000..1994501d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java @@ -0,0 +1,150 @@ +package org.dromara.mechanical.jxsgjl.domain.bo; + +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +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.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械事故信息记录业务对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxSgxxjlb.class, reverseConvertGenerate = false) +public class JxSgxxjlbBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + @NotBlank(message = "事故等级(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + @NotBlank(message = "事故类型(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + @NotBlank(message = "设备名称(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 设备台账id + */ + private Long equipmentId; + + /** + * 发生时间 + */ + @NotNull(message = "发生时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + @NotBlank(message = "发生地点不能为空", groups = { AddGroup.class, EditGroup.class }) + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + @NotBlank(message = "事故描述(详细经过)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + @NotNull(message = "直接损失金额(元)不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + @NotBlank(message = "事故原因分析不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + private String casualtySituation; + + /** + * 应急处理措施 + */ + @NotBlank(message = "应急处理措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + @NotBlank(message = "整改预防措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String rectificationMeasures; + + /** + * 责任人 + */ + private Long responsiblePerson; + + /** + * 处理结果 + */ + private String handleResult; + + /** + * 记录人 + */ + @NotNull(message = "记录人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long recorder; + + /** + * 记录日期 + */ + @NotNull(message = "记录日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate recordDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java new file mode 100644 index 00000000..525d1c03 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java @@ -0,0 +1,25 @@ +package org.dromara.mechanical.jxsgjl.domain.vo; + + +import lombok.Data; + +@Data +public class JxSgxxHead { + /** + * 总数 + */ + private Long zs = 0L; + /** + * 一般事故 + */ + private Long ybsg = 0L; + /** + * 重大事故 + */ + private Long zdsg = 0L; + /** + * 严重事故 + */ + private Long yzsg = 0L; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java new file mode 100644 index 00000000..c7599806 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java @@ -0,0 +1,169 @@ +package org.dromara.mechanical.jxsgjl.domain.vo; + +import java.math.BigDecimal; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +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; + + + +/** + * 机械事故信息记录视图对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxSgxxjlb.class) +public class JxSgxxjlbVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + @ExcelProperty(value = "事故编号") + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + @ExcelProperty(value = "事故等级") + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + @ExcelProperty(value = "事故类型") + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + @ExcelProperty(value = "设备名称") + private String equipmentName; + + /** + * 设备台账id + */ + @ExcelProperty(value = "设备台账id") + private Long equipmentId; + + /** + * 发生时间 + */ + @ExcelProperty(value = "发生时间") + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + @ExcelProperty(value = "发生地点") + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + @ExcelProperty(value = "事故描述") + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + @ExcelProperty(value = "直接损失金额") + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + @ExcelProperty(value = "间接损失金额") + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + @ExcelProperty(value = "事故原因分析") + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + @ExcelProperty(value = "人员伤亡情况") + private String casualtySituation; + + /** + * 应急处理措施 + */ + @ExcelProperty(value = "应急处理措施") + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + @ExcelProperty(value = "整改预防措施") + private String rectificationMeasures; + + /** + * 责任人 + */ + @ExcelProperty(value = "责任人") + private Long responsiblePerson; + + /** + * 处理结果 + */ + @ExcelProperty(value = "处理结果") + private String handleResult; + + /** + * 记录人 + */ + @ExcelProperty(value = "记录人") + private Long recorder; + + /** + * 记录日期 + */ + @ExcelProperty(value = "记录日期") + private LocalDate recordDate; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "照片文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java new file mode 100644 index 00000000..547d2c14 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxsgjl.mapper; + +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械事故信息记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface JxSgxxjlbMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java new file mode 100644 index 00000000..ff477a06 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxsgjl.service; + +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械事故信息记录Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IJxSgxxjlbService extends IService{ + + /** + * 查询机械事故信息记录 + * + * @param id 主键 + * @return 机械事故信息记录 + */ + JxSgxxjlbVo queryById(Long id); + + /** + * 分页查询机械事故信息记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械事故信息记录分页列表 + */ + TableDataInfo queryPageList(JxSgxxjlbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械事故信息记录列表 + * + * @param bo 查询条件 + * @return 机械事故信息记录列表 + */ + List queryList(JxSgxxjlbBo bo); + + /** + * 新增机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxSgxxjlbBo bo); + + /** + * 修改机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxSgxxjlbBo bo); + + /** + * 校验并批量删除机械事故信息记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxSgxxHead getHeadData(); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java new file mode 100644 index 00000000..c953c985 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java @@ -0,0 +1,192 @@ +package org.dromara.mechanical.jxsgjl.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.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; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.mechanical.jxsgjl.mapper.JxSgxxjlbMapper; +import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械事故信息记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class JxSgxxjlbServiceImpl extends ServiceImpl implements IJxSgxxjlbService { + + private final JxSgxxjlbMapper baseMapper; + + private final ISysOssService sysOssService; + + + /** + * 查询机械事故信息记录 + * + * @param id 主键 + * @return 机械事故信息记录 + */ + @Override + public JxSgxxjlbVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械事故信息记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械事故信息记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxSgxxjlbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械事故信息记录列表 + * + * @param bo 查询条件 + * @return 机械事故信息记录列表 + */ + @Override + public List queryList(JxSgxxjlbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxSgxxjlbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxSgxxjlb::getId); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentCode()), JxSgxxjlb::getAccidentCode, bo.getAccidentCode()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentLevel()), JxSgxxjlb::getAccidentLevel, bo.getAccidentLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentType()), JxSgxxjlb::getAccidentType, bo.getAccidentType()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxSgxxjlb::getEquipmentName, bo.getEquipmentName()); + lqw.eq(bo.getOccurrenceTime() != null, JxSgxxjlb::getOccurrenceTime, bo.getOccurrenceTime()); + lqw.eq(StringUtils.isNotBlank(bo.getOccurrencePlace()), JxSgxxjlb::getOccurrencePlace, bo.getOccurrencePlace()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentDescription()), JxSgxxjlb::getAccidentDescription, bo.getAccidentDescription()); + lqw.eq(bo.getDirectLoss() != null, JxSgxxjlb::getDirectLoss, bo.getDirectLoss()); + lqw.eq(bo.getIndirectLoss() != null, JxSgxxjlb::getIndirectLoss, bo.getIndirectLoss()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentCause()), JxSgxxjlb::getAccidentCause, bo.getAccidentCause()); + lqw.eq(StringUtils.isNotBlank(bo.getCasualtySituation()), JxSgxxjlb::getCasualtySituation, bo.getCasualtySituation()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyMeasures()), JxSgxxjlb::getEmergencyMeasures, bo.getEmergencyMeasures()); + lqw.eq(StringUtils.isNotBlank(bo.getRectificationMeasures()), JxSgxxjlb::getRectificationMeasures, bo.getRectificationMeasures()); + lqw.eq(bo.getResponsiblePerson() != null, JxSgxxjlb::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getHandleResult()), JxSgxxjlb::getHandleResult, bo.getHandleResult()); + lqw.eq(bo.getRecorder() != null, JxSgxxjlb::getRecorder, bo.getRecorder()); + lqw.eq(bo.getRecordDate() != null, JxSgxxjlb::getRecordDate, bo.getRecordDate()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxSgxxjlb::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxSgxxjlb::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), JxSgxxjlb::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxSgxxjlbBo bo) { + JxSgxxjlb add = MapstructUtils.convert(bo, JxSgxxjlb.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("JXAQSGJL-"); + add.setAccidentCode(banBen); + + + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxSgxxjlbBo bo) { + JxSgxxjlb update = MapstructUtils.convert(bo, JxSgxxjlb.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxSgxxjlb entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械事故信息记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxSgxxjlbVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List 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 JxSgxxHead getHeadData() { + JxSgxxHead jxSgxxHead = new JxSgxxHead(); + List jxSgxxjlbs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxSgxxjlb::getCreateTime, LocalDate.now().plusDays(1)).ge(JxSgxxjlb::getCreateTime, LocalDate.now().minusDays(29))); + if (jxSgxxjlbs != null && jxSgxxjlbs.size() > 0) { + long ybsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("1")).count(); + long yzsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("2")).count(); + long zdsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("3")).count(); + jxSgxxHead.setZs(Long.valueOf(jxSgxxjlbs.size())); + jxSgxxHead.setYbsg(ybsg); + jxSgxxHead.setYzsg(yzsg); + jxSgxxHead.setZdsg(zdsg); + } + return jxSgxxHead; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java new file mode 100644 index 00000000..f0b08b58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java @@ -0,0 +1,153 @@ +package org.dromara.mechanical.jxzgbh.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.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; +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.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械隐患整改与闭环 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxzgbh/yhzgbh") +public class JxYhzgbhController extends BaseController { + + private final IJxYhzgbhService jxYhzgbhService; + + + /** + * 头部数据返回 + */ + @SaCheckPermission("jxzgbh:yhzgbh:list") + @GetMapping("/getListHead") + public R getListHead(JxYhzgbhBo bo, PageQuery pageQuery) { + return R.ok(jxYhzgbhService.getListHead(bo, pageQuery)); + } + + /** + * 整改接口 + */ + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @PutMapping("/zgPutBo") + public R zgPutBo(@RequestBody JxZgxxBo bo) { + return toAjax(jxYhzgbhService.zgPutBo(bo)); + } + + + + /** + * 复查,整改接口详情查询 1整改 2 复查 + */ + + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @GetMapping("/zgxxorfcxx/{type}/{id}") + public R zgxxorfcxx(@PathVariable String type, @PathVariable Long id) { + return R.ok(jxYhzgbhService.zgxxorfcxx(type,id)); + } + + + + /** + *复查 + */ + + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @PutMapping("/fcPutBo") + public R fcPutBo(@RequestBody JxFcxxBo bo) { + return toAjax(jxYhzgbhService.fcPutBo(bo)); + } + + /** + * 查询机械隐患整改与闭环列表 + */ + @SaCheckPermission("jxzgbh:yhzgbh:list") + @GetMapping("/list") + public TableDataInfo list(JxYhzgbhBo bo, PageQuery pageQuery) { + return jxYhzgbhService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械隐患整改与闭环列表 + */ + @SaCheckPermission("jxzgbh:yhzgbh:export") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxYhzgbhBo bo, HttpServletResponse response) { + List list = jxYhzgbhService.queryList(bo); + ExcelUtil.exportExcel(list, "机械隐患整改与闭环", JxYhzgbhVo.class, response); + } + + /** + * 获取机械隐患整改与闭环详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxzgbh:yhzgbh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxYhzgbhService.queryById(id)); + } + + /** + * 新增机械隐患整改与闭环 + */ + @SaCheckPermission("jxzgbh:yhzgbh:add") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxYhzgbhBo bo) { + return toAjax(jxYhzgbhService.insertByBo(bo)); + } + + /** + * 修改机械隐患整改与闭环 + */ + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxYhzgbhBo bo) { + return toAjax(jxYhzgbhService.updateByBo(bo)); + } + + /** + * 删除机械隐患整改与闭环 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxzgbh:yhzgbh:remove") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxYhzgbhService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java new file mode 100644 index 00000000..d92105f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java @@ -0,0 +1,79 @@ +package org.dromara.mechanical.jxzgbh.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; + +/** + * 机械隐患复查信息对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_fcxx") +public class JxFcxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 机械隐患ID + */ + private Long masterId; + + /** + * 复查人 + */ + private Long review; + + /** + * 复查日期 + */ + private LocalDate reviewDate; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java new file mode 100644 index 00000000..5489fb06 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java @@ -0,0 +1,110 @@ +package org.dromara.mechanical.jxzgbh.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +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; + +/** + * 机械隐患整改与闭环对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_yhzgbh") +public class JxYhzgbh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 隐患编号 + */ + private String inspectionOrderNo; + + /** + * 检查单编号 + */ + private String inspectionJcdNo; + + /** + * 检查人 + */ + private Long inspector; + + + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 机械安全检查记录表ID + */ + private Long masterId; + + /** + * 隐患等级 + */ + private String riskGrade; + + /** + * 隐患来源 + */ + private String yhly; + + /** + * 对应设备 + */ + private String equipmentName; + + /** + * 发现时间 + */ + private LocalDate discoverDate; + + /** + * 发现人 + */ + private Long discoverId; + + /** + * 整改人 + */ + private Long abarbeitung; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java new file mode 100644 index 00000000..ef000fa9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java @@ -0,0 +1,82 @@ +package org.dromara.mechanical.jxzgbh.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +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; + +/** + * 机械隐患整改信息对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_zgxx") +public class JxZgxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 机械隐患ID + */ + private Long masterId; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改开始日期 + */ + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java new file mode 100644 index 00000000..dc8d0c58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java @@ -0,0 +1,85 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +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; + +/** + * 机械隐患复查信息业务对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxFcxx.class, reverseConvertGenerate = false) +public class JxFcxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 机械隐患ID + */ + @NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 复查人 + */ + @NotNull(message = "复查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long review; + + /** + * 复查日期 + */ + @NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate reviewDate; + + /** + * 复查意见 + */ + @NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + @NotBlank(message = "最终闭环状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + @NotBlank(message = "复查意见详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java new file mode 100644 index 00000000..32490a12 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java @@ -0,0 +1,113 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +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; + +/** + * 机械隐患整改与闭环业务对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxYhzgbh.class, reverseConvertGenerate = false) +public class JxYhzgbhBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 隐患编号 + */ + private String inspectionOrderNo; + + /** + * 检查单编号 + */ + private String inspectionJcdNo; + + /** + * 检查人 + */ + private Long inspector; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 整改人 + */ + private Long abarbeitung; + + /** + * 机械安全检查记录表ID + */ + @NotNull(message = "机械安全检查记录表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 隐患等级 + */ + @NotBlank(message = "隐患等级不能为空", groups = { AddGroup.class, EditGroup.class }) + private String riskGrade; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 隐患来源 + */ + @NotBlank(message = "隐患来源不能为空", groups = { AddGroup.class, EditGroup.class }) + private String yhly; + + /** + * 对应设备 + */ + @NotBlank(message = "对应设备不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 发现时间 + */ + @NotNull(message = "发现时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate discoverDate; + + /** + * 发现人 + */ + @NotNull(message = "发现人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long discoverId; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java new file mode 100644 index 00000000..07ce0959 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java @@ -0,0 +1,86 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +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; + +/** + * 机械隐患整改信息业务对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxZgxx.class, reverseConvertGenerate = false) +public class JxZgxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 机械隐患ID + */ + @NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改责任人 + */ + @NotNull(message = "整改责任人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long abarbeitung; + + /** + * 整改开始日期 + */ + @NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// @NotNull(message = "整改期限不能为空", groups = { AddGroup.class, EditGroup.class }) +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + @NotBlank(message = "整改措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @NotBlank(message = "整改完成情况不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java new file mode 100644 index 00000000..8eff49c5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java @@ -0,0 +1,119 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +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; + + + +/** + * 机械隐患复查信息视图对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxFcxx.class) +public class JxFcxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 机械隐患ID + */ + @ExcelProperty(value = "机械隐患ID") + private Long masterId; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long review; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review") + private String reviewName; + + /** + * 复查日期 + */ + @ExcelProperty(value = "复查日期") + private LocalDate reviewDate; + + /** + * 复查意见 + */ + @ExcelProperty(value = "复查意见") + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + @ExcelProperty(value = "最终闭环状态") + private String reviewState; + + /** + * 不通过原因 + */ + @ExcelProperty(value = "不通过原因") + private String notPassCause; + + /** + * 复查意见详情 + */ + @ExcelProperty(value = "复查意见详情") + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + private Integer sort; + + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java new file mode 100644 index 00000000..73f5ddcb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java @@ -0,0 +1,168 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +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 org.dromara.mechanical.jxzgbh.domain.JxZgxx; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 机械隐患整改与闭环视图对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxYhzgbh.class) +public class JxYhzgbhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 隐患编号 + */ + @ExcelProperty(value = "隐患编号") + private String inspectionOrderNo; + /** + * 检查单编号 + */ + @ExcelProperty(value = "检查单编号") + private String inspectionJcdNo; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + private Long inspector; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector") + private String inspectorName; + + + /** + * 机械安全检查记录表ID + */ + @ExcelProperty(value = "机械安全检查记录表ID") + private Long masterId; + + /** + * 隐患等级 + */ + @ExcelProperty(value = "隐患等级") + private String riskGrade; + + /** + * 隐患来源 + */ + @ExcelProperty(value = "隐患来源") + private String yhly; + + /** + * 对应设备 + */ + @ExcelProperty(value = "对应设备") + private String equipmentName; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 发现时间 + */ + @ExcelProperty(value = "发现时间") + private LocalDate discoverDate; + + /** + * 发现人 + */ + @ExcelProperty(value = "发现人") + private Long discoverId; + + /** + * 发现人 + */ + @ExcelProperty(value = "发现人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId") + private String discoverName; + + /** + * 整改人 + */ + private Long abarbeitung; + + + /** + * 整改人 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId") + private String abarbeitungName; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + /** + * 整改信息 + */ + private List zgxxList; + /** + * 复查信息 + */ + private List fcxxList; + + + /** + * 问题详情 + */ + private List wtxqList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java new file mode 100644 index 00000000..2350137a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java @@ -0,0 +1,30 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + + +import lombok.Data; + +@Data +public class JxZgxxHeadVo { + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 已整改 + */ + private Long yzg = 0L; + + /** + * 未整改 + */ + private Long wzg = 0L; + + + /** + * 已闭环 + */ + private Long ybh = 0L; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java new file mode 100644 index 00000000..36a92c59 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java @@ -0,0 +1,38 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + + +import lombok.Data; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; + +import java.util.List; + +@Data +public class JxZgxxOrFcxxVo { + + /** + * 隐患整改与闭环 + */ + private JxYhzgbhVo yhzgbhVo; + + + /** + * 复查数据 + */ + private JxFcxx fcxxVo; + + /** + * 整改数据 + */ + private JxZgxx zgxxVo; + + + /** + * 问题详情 + */ + private List wtxqList; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java new file mode 100644 index 00000000..1b176486 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java @@ -0,0 +1,108 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +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; + + + +/** + * 机械隐患整改信息视图对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxZgxx.class) +public class JxZgxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 机械隐患ID + */ + @ExcelProperty(value = "机械隐患ID") + private Long masterId; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + + /** + * 整改开始日期 + */ + @ExcelProperty(value = "整改开始日期") + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @ExcelProperty(value = "整改结束日期") + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// @ExcelProperty(value = "整改期限") +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + @ExcelProperty(value = "整改措施") + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @ExcelProperty(value = "整改完成情况") + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java new file mode 100644 index 00000000..60e7d723 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患复查信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxFcxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java new file mode 100644 index 00000000..d272693a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患整改与闭环Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxYhzgbhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java new file mode 100644 index 00000000..21b80769 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患整改信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxZgxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java new file mode 100644 index 00000000..34e1aa86 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患复查信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxFcxxService extends IService{ + + /** + * 查询机械隐患复查信息 + * + * @param id 主键 + * @return 机械隐患复查信息 + */ + JxFcxxVo queryById(Long id); + + /** + * 分页查询机械隐患复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患复查信息分页列表 + */ + TableDataInfo queryPageList(JxFcxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患复查信息列表 + * + * @param bo 查询条件 + * @return 机械隐患复查信息列表 + */ + List queryList(JxFcxxBo bo); + + /** + * 新增机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否新增成功 + */ + Boolean insertByBo(JxFcxxBo bo); + + /** + * 修改机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否修改成功 + */ + Boolean updateByBo(JxFcxxBo bo); + + /** + * 校验并批量删除机械隐患复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java new file mode 100644 index 00000000..209027ad --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java @@ -0,0 +1,84 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +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.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; + +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患整改与闭环Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxYhzgbhService extends IService{ + + /** + * 查询机械隐患整改与闭环 + * + * @param id 主键 + * @return 机械隐患整改与闭环 + */ + JxYhzgbhVo queryById(Long id); + + /** + * 分页查询机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改与闭环分页列表 + */ + TableDataInfo queryPageList(JxYhzgbhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @return 机械隐患整改与闭环列表 + */ + List queryList(JxYhzgbhBo bo); + + /** + * 新增机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否新增成功 + */ + Boolean insertByBo(JxYhzgbhBo bo); + + /** + * 修改机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否修改成功 + */ + Boolean updateByBo(JxYhzgbhBo bo); + + /** + * 校验并批量删除机械隐患整改与闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + JxZgxxHeadVo getListHead(JxYhzgbhBo bo, PageQuery pageQuery); + + Boolean zgPutBo(JxZgxxBo bo); + + Boolean fcPutBo(JxFcxxBo bo); + + JxZgxxOrFcxxVo zgxxorfcxx(String type, Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java new file mode 100644 index 00000000..a523fd70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患整改信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxZgxxService extends IService{ + + /** + * 查询机械隐患整改信息 + * + * @param id 主键 + * @return 机械隐患整改信息 + */ + JxZgxxVo queryById(Long id); + + /** + * 分页查询机械隐患整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改信息分页列表 + */ + TableDataInfo queryPageList(JxZgxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患整改信息列表 + * + * @param bo 查询条件 + * @return 机械隐患整改信息列表 + */ + List queryList(JxZgxxBo bo); + + /** + * 新增机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否新增成功 + */ + Boolean insertByBo(JxZgxxBo bo); + + /** + * 修改机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否修改成功 + */ + Boolean updateByBo(JxZgxxBo bo); + + /** + * 校验并批量删除机械隐患整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java new file mode 100644 index 00000000..b677a5e3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java @@ -0,0 +1,138 @@ +package org.dromara.mechanical.jxzgbh.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.springframework.stereotype.Service; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.mapper.JxFcxxMapper; +import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械隐患复查信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxFcxxServiceImpl extends ServiceImpl implements IJxFcxxService { + + private final JxFcxxMapper baseMapper; + + /** + * 查询机械隐患复查信息 + * + * @param id 主键 + * @return 机械隐患复查信息 + */ + @Override + public JxFcxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械隐患复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患复查信息分页列表 + */ + @Override + public TableDataInfo queryPageList(JxFcxxBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械隐患复查信息列表 + * + * @param bo 查询条件 + * @return 机械隐患复查信息列表 + */ + @Override + public List queryList(JxFcxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxFcxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxFcxx::getId); + lqw.eq(bo.getMasterId() != null, JxFcxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getReview() != null, JxFcxx::getReview, bo.getReview()); + lqw.eq(bo.getReviewDate() != null, JxFcxx::getReviewDate, bo.getReviewDate()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinion()), JxFcxx::getReviewOpinion, bo.getReviewOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), JxFcxx::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getNotPassCause()), JxFcxx::getNotPassCause, bo.getNotPassCause()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinionParticulars()), JxFcxx::getReviewOpinionParticulars, bo.getReviewOpinionParticulars()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxFcxx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxFcxxBo bo) { + JxFcxx add = MapstructUtils.convert(bo, JxFcxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxFcxxBo bo) { + JxFcxx update = MapstructUtils.convert(bo, JxFcxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxFcxx entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械隐患复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java new file mode 100644 index 00000000..d9e4c3bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java @@ -0,0 +1,286 @@ +package org.dromara.mechanical.jxzgbh.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +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.mechanical.jxaqgl.domain.JxAqjcgl; +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; +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; +import org.dromara.mechanical.jxzgbh.mapper.JxYhzgbhMapper; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械隐患整改与闭环Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxYhzgbhServiceImpl extends ServiceImpl implements IJxYhzgbhService { + + private final JxYhzgbhMapper baseMapper; + + private final IJxZgxxService jxZgxxService; + + private final IJxFcxxService jxFcxxService; + + private final IJxAqjcglWtxqService jxAqjcglWtxqService; + + private final IJxAqjcglService jxAqjcglService; + + private final ISysOssService sysOssService; + + + /** + * 查询机械隐患整改与闭环 + * + * @param id 主键 + * @return 机械隐患整改与闭环 + */ + @Override + public JxYhzgbhVo queryById(Long id){ + JxYhzgbhVo jxYhzgbhVo = baseMapper.selectVoById(id); + saveValue(jxYhzgbhVo); + return jxYhzgbhVo; + } + + private void saveValue(JxYhzgbhVo jxYhzgbhVo) { + if (jxYhzgbhVo != null){ + // 回填整改数据 + List jxZgxxes = jxZgxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, jxYhzgbhVo.getId())); + if (jxZgxxes != null){ + jxYhzgbhVo.setZgxxList(MapstructUtils.convert(jxZgxxes, JxZgxxVo.class)); + } + // 回填复查数据 + List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, jxYhzgbhVo.getId())); + if (jxFcxxes != null){ + jxYhzgbhVo.setFcxxList(MapstructUtils.convert(jxFcxxes, JxFcxxVo.class)); + } +// 问题详情 + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); + if (jxAqjcglWtxqs != null){ + jxYhzgbhVo.setWtxqList(jxAqjcglWtxqs); + } + } + + } + + /** + * 分页查询机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改与闭环分页列表 + */ + @Override + public TableDataInfo queryPageList(JxYhzgbhBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(this::saveValue); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @return 机械隐患整改与闭环列表 + */ + @Override + public List queryList(JxYhzgbhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxYhzgbhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxYhzgbh::getId); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionOrderNo()), JxYhzgbh::getInspectionOrderNo, bo.getInspectionOrderNo()); + lqw.eq(bo.getMasterId() != null, JxYhzgbh::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskGrade()), JxYhzgbh::getRiskGrade, bo.getRiskGrade()); + lqw.eq(StringUtils.isNotBlank(bo.getYhly()), JxYhzgbh::getYhly, bo.getYhly()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinion()), JxYhzgbh::getReviewOpinion, bo.getReviewOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), JxYhzgbh::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungState()), JxYhzgbh::getAbarbeitungState, bo.getAbarbeitungState()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxYhzgbh::getEquipmentName, bo.getEquipmentName()); + lqw.eq(bo.getDiscoverDate() != null, JxYhzgbh::getDiscoverDate, bo.getDiscoverDate()); + lqw.eq(bo.getDiscoverId() != null, JxYhzgbh::getDiscoverId, bo.getDiscoverId()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxYhzgbh::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxYhzgbh::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxYhzgbhBo bo) { + JxYhzgbh add = MapstructUtils.convert(bo, JxYhzgbh.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxYhzgbhBo bo) { + JxYhzgbh update = MapstructUtils.convert(bo, JxYhzgbh.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxYhzgbh entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械隐患整改与闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxYhzgbhVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List 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 JxZgxxHeadVo getListHead(JxYhzgbhBo bo, PageQuery pageQuery) { + JxZgxxHeadVo jxZgxxHeadVo = new JxZgxxHeadVo(); + List jxYhzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxYhzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(JxYhzgbh::getCreateTime, LocalDate.now().minusDays(29))); + if ( jxYhzgbhs != null && jxYhzgbhs.size() > 0) { + jxZgxxHeadVo.setZs(Long.valueOf(jxYhzgbhs.size())); + jxZgxxHeadVo.setYzg(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getAbarbeitungState().equals("2")).count()); + jxZgxxHeadVo.setWzg(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getAbarbeitungState().equals("1")).count()); + jxZgxxHeadVo.setYbh(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getReviewState().equals("1")).count()); + } + return jxZgxxHeadVo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean zgPutBo(JxZgxxBo bo) { +// 安全检查记录 + if (bo.getMasterId() == null) throw new RuntimeException("主表id不能为空"); + JxYhzgbhVo jxYhzgbhVo = this.getBaseMapper().selectVoOne(new LambdaQueryWrapper().eq(JxYhzgbh::getId, bo.getMasterId())); + jxAqjcglService.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxAqjcgl::getId, jxYhzgbhVo.getMasterId()).set(JxAqjcgl::getAbarbeitungState, "2")); + + Long l = jxZgxxService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, bo.getMasterId())); + bo.setSort(Integer.parseInt(l+"") + 1); +// 将状态修改为已整改 + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getAbarbeitungState,"2")); + return jxZgxxService.insertByBo(bo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean fcPutBo(JxFcxxBo bo) { +// 不通过修改整改信息状态 + if (bo.getReviewOpinion().equals("2")) { + if (bo.getMasterId() == null) throw new RuntimeException("主表id不能为空"); + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getAbarbeitungState,"1")); + // 安全检查记录 + JxYhzgbhVo jxYhzgbhVo = this.getBaseMapper().selectVoOne(new LambdaQueryWrapper().eq(JxYhzgbh::getId, bo.getMasterId())); + jxAqjcglService.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxAqjcgl::getId, jxYhzgbhVo.getMasterId()).set(JxAqjcgl::getAbarbeitungState, "1")); + + } + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getReviewOpinion,bo.getReviewOpinion())); + + Long l = jxFcxxService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, bo.getMasterId())); + bo.setSort(Integer.parseInt(l+"") + 1); +// 修改闭环状态 + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getReviewState,bo.getReviewState())); + return jxFcxxService.insertByBo(bo); + } + + @Override + public JxZgxxOrFcxxVo zgxxorfcxx(String type, Long id) { + JxZgxxOrFcxxVo jxZgxxOrFcxxVo = new JxZgxxOrFcxxVo(); + JxYhzgbhVo jxYhzgbhVo = this.queryById(id); + if (jxYhzgbhVo != null) { + jxZgxxOrFcxxVo.setYhzgbhVo(jxYhzgbhVo); + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); + if (jxAqjcglWtxqs != null) { + jxZgxxOrFcxxVo.getYhzgbhVo().setWtxqList(jxAqjcglWtxqs); + } + } +// 回填整改信息 + if ("2".equals(type)) { + List jxZgxxes = jxZgxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, id).orderByDesc(JxZgxx::getSort)); + if (jxZgxxes != null && jxZgxxes.size() > 0) { + jxZgxxOrFcxxVo.setZgxxVo(jxZgxxes.get(0)); + } + } + // 回填复查信息 + if ("1".equals(type)) { + List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, id).orderByDesc(JxFcxx::getSort)); + if (jxFcxxes != null && jxFcxxes.size() > 0) { + jxZgxxOrFcxxVo.setFcxxVo(jxFcxxes.get(0)); + } + } + return jxZgxxOrFcxxVo; + } + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java new file mode 100644 index 00000000..4b7b2f32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java @@ -0,0 +1,137 @@ +package org.dromara.mechanical.jxzgbh.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.springframework.stereotype.Service; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.mechanical.jxzgbh.mapper.JxZgxxMapper; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械隐患整改信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxZgxxServiceImpl extends ServiceImpl implements IJxZgxxService { + + private final JxZgxxMapper baseMapper; + + /** + * 查询机械隐患整改信息 + * + * @param id 主键 + * @return 机械隐患整改信息 + */ + @Override + public JxZgxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械隐患整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改信息分页列表 + */ + @Override + public TableDataInfo queryPageList(JxZgxxBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械隐患整改信息列表 + * + * @param bo 查询条件 + * @return 机械隐患整改信息列表 + */ + @Override + public List queryList(JxZgxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxZgxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxZgxx::getId); + lqw.eq(bo.getMasterId() != null, JxZgxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getAbarbeitung() != null, JxZgxx::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungKsdate() != null, JxZgxx::getAbarbeitungKsdate, bo.getAbarbeitungKsdate()); + lqw.eq(bo.getAbarbeitungJsdate() != null, JxZgxx::getAbarbeitungJsdate, bo.getAbarbeitungJsdate()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungMeasure()), JxZgxx::getAbarbeitungMeasure, bo.getAbarbeitungMeasure()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungAccomplish()), JxZgxx::getAbarbeitungAccomplish, bo.getAbarbeitungAccomplish()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxZgxx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxZgxxBo bo) { + JxZgxx add = MapstructUtils.convert(bo, JxZgxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxZgxxBo bo) { + JxZgxx update = MapstructUtils.convert(bo, JxZgxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxZgxx entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械隐患整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java index f8ef5fdb..cdfedce0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java @@ -9,6 +9,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -18,9 +19,20 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.manager.ys7manager.Ys7Manager; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.other.domain.dto.ys7device.*; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; +import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; +import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; +import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo; +import org.dromara.other.service.IOthYs7DeviceImgService; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; +import org.dromara.safety.service.IHseViolationRecordService; +import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -47,6 +59,73 @@ public class OthYs7DeviceController extends BaseController { @Resource private Ys7Manager ys7Manager; + @Resource + private IOthYs7DeviceImgService othYs7DeviceImgService; + @Lazy + @Resource + private IHseViolationRecordService hseViolationRecordService; + + /** + * 获取违规记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("other:ys7Device:list") +// @GetMapping("/getViolationRecordInfo/{id}") +// public R getViolationRecordInfo(@NotNull(message = "主键不能为空") +// @PathVariable Long id) { +// return R.ok(hseViolationRecordService.queryById(id)); +// } + + + /** + * 萤石摄像头图片抓图 + */ + @SaCheckPermission("other:ys7Device:list") + @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) + @PostMapping("/capture") + public R capture(@RequestBody OthYs7DeviceImgCaptureReq req) { + return toAjax(othYs7DeviceImgService.capturePic(req)); + } + /** + * 萤石摄像头图片识别 + */ +// @SaCheckPermission("other:ys7Device:list") +// @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) +// @PostMapping("/discernImg") +// public R discernImg(@RequestBody OthYs7DeviceImgCaptureReq req) { +// return toAjax(othYs7DeviceImgService.discernImg(req)); +// } + + /** + * 下发工单 + */ +// @SaCheckPermission("other:ys7Device:list") +// @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) +// @PostMapping("/addViolationRecord") +// public R addViolationRecord(@RequestBody AddViolattionRecordReq req) { +// return toAjax(othYs7DeviceImgService.addViolationRecord(req)); +// } + /** + * 查询萤石摄像头图片列表 + */ + @SaCheckPermission("other:ys7Device:list") + @GetMapping("/getImgList") + public TableDataInfo list(OthYs7DeviceImgQueryReq req, PageQuery pageQuery) { + return othYs7DeviceImgService.queryPageList(req, pageQuery); + } + /** + * 删除萤石摄像头图片 + * + * @param ids 主键串 + */ + @SaCheckPermission("other:ys7Device:remove") + @Log(title = "萤石摄像头图片", businessType = BusinessType.DELETE) + @DeleteMapping("/img/{ids}") + public R imgRemove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(othYs7DeviceImgService.deleteWithValidByIds(List.of(ids))); + } /** * 查询萤石摄像头列表 @@ -160,4 +239,50 @@ public class OthYs7DeviceController extends BaseController { return ResponseEntity.ok(JSONUtil.toJsonStr(result)); } + + /** + * 获取回放录像播放地址 + * @return + */ + @GetMapping("/getPlayBackUrl") + public R getPlayBackUrl(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getPlayBackUrl(req)); + } + + /** + * 查询设备本地录像 + * @return + */ + @GetMapping("/getDeviceLocalVideo") + public R> getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getDeviceLocalVideo(req)); + } + + /** + * 查询范围日期和设备本地录像列表 + * @return + */ + @GetMapping("/getDateAndDeviceLocalVideo") + public R getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getDateAndDeviceLocalVideo(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java index 4f193d10..d9085ca5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java @@ -72,6 +72,12 @@ public class OthYs7DeviceImg implements Serializable { */ private String recognizeUrl; + + /** + * 图片状态(0、未识别,1、已识别未违规,2、已识别有违规,3、已下发工单) + */ + private String imgStatus; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java new file mode 100644 index 00000000..eaeda4a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java @@ -0,0 +1,31 @@ +package org.dromara.other.domain.dto.ys7device; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author lilemy + * @date 2025/6/13 10:19 + */ +@Data +public class OthYs7DevicePlayBackUrlReq implements Serializable { + + /** + * 设备序列号 + */ + private String deviceSerial; + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java new file mode 100644 index 00000000..a64567ee --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java @@ -0,0 +1,36 @@ +package org.dromara.other.domain.dto.ys7deviceimg; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-10 19:14 + */ +@Data +public class AddViolattionRecordReq implements Serializable { + + + /** + * 项目id + */ + @NotNull(message = "图片id不能为空") + private Long projectId; + + + /** + * 设备序列号 + */ + @NotBlank(message = "设备序列号不能为空") + private String deviceSerial; + /** + * 图片id + */ + @NotNull(message = "图片id不能为空") + private Long originalUrlId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java index 69bdb7e9..bf01a9b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java @@ -21,4 +21,8 @@ public class OthYs7DeviceImgCaptureReq implements Serializable { */ @NotBlank(message = "设备序列号不能为空") private String deviceSerial; + /** + * 图片id + */ + private Long imgId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java new file mode 100644 index 00000000..e8e9e25f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java @@ -0,0 +1,29 @@ +package org.dromara.other.domain.vo.ys7device; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; +import org.dromara.other.domain.OthYs7Device; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 查询范围日期和设备本地录像列表 + */ +@Data +public class DateAndDeviceLocalVideoVo implements Serializable { + + private List dateList; + + private List deviceList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java index 9ebb39d6..772ce1ea 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java @@ -55,6 +55,11 @@ public class OthYs7DeviceImgVo implements Serializable { @ExcelProperty(value = "图片地址") private String url; + /** + * 识别结果图片地址 + */ + private String recognizeUrl; + /** * 识别算法模型 */ @@ -77,4 +82,9 @@ public class OthYs7DeviceImgVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 图片状态(0、未识别,1、已识别,2、已下发工单) + */ + private String imgStatus; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java index 70ffcc30..e49b07b0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.other.domain.OthYs7DeviceImg; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; @@ -102,4 +103,25 @@ public interface IOthYs7DeviceImgService extends IService { * @return 是否抓拍成功 */ Boolean capturePic(OthYs7DeviceImgCaptureReq req); + + /** + * 手动抓拍(不需要识别) + * @param req + * @return + */ + int addHMCapturePic(OthYs7DeviceImgCaptureReq req); + + /** + * 识别抓拍图片 + * @param req + * @return + */ + int discernImg(OthYs7DeviceImgCaptureReq req); + + /** + * 手动下发安全工单 + * @param req + * @return + */ + int addViolationRecord(AddViolattionRecordReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java index 5997d7a8..fbeb8637 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java @@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.dto.ys7device.*; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; import java.util.Collection; @@ -143,4 +145,24 @@ public interface IOthYs7DeviceService extends IService { */ void webhook(WebhookMessage receiveMessage); + /** + * 获取回放录像播放地址 + * @param req + * @return + */ + String getPlayBackUrl(OthYs7DevicePlayBackUrlReq req); + + /** + * 查询设备本地录像 + * @param req + * @return + */ + List getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req); + + /** + * 查询范围日期和设备本地录像列表 + * @param req + * @return + */ + DateAndDeviceLocalVideoVo getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java index ca5e65a7..96912960 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java @@ -24,6 +24,7 @@ import org.dromara.manager.ys7manager.Ys7Manager; import org.dromara.other.constant.Ys7DeviceImgConstant; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.OthYs7DeviceImg; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; @@ -31,14 +32,18 @@ import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo; import org.dromara.other.mapper.OthYs7DeviceImgMapper; import org.dromara.other.service.IOthYs7DeviceImgService; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.safety.domain.HseRecognizeRecord; import org.dromara.safety.domain.HseViolationLevel; import org.dromara.safety.domain.dto.recognizerecord.HseRecognizeRecordCreateDto; +import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateDto; import org.dromara.safety.domain.enums.HseRecordCategoryEnum; import org.dromara.safety.service.IHseRecognizeRecordService; import org.dromara.safety.service.IHseViolationLevelService; +import org.dromara.safety.service.IHseViolationRecordService; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -79,6 +84,10 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl levelList = violationLevelService.lambdaQuery() + .eq(HseViolationLevel::getProjectId, img.getProjectId()) + .list(); + Map> level = new HashMap<>(); + if (CollUtil.isNotEmpty(levelList)) { + Map> levelMap = levelList.stream() + .collect(Collectors.groupingBy(HseViolationLevel::getProjectId)); + for (Map.Entry> entry : levelMap.entrySet()) { + List recognizerTypeEnums = entry.getValue().stream().map(l -> { + List levels = StringUtils.splitList(l.getViolationType()); + return RecognizerTypeEnum.listFromCodes(levels); + }).filter(CollUtil::isNotEmpty) + .flatMap(Collection::stream) + .distinct() + .toList(); + level.put(entry.getKey(), recognizerTypeEnums); + } + } + if (CollUtil.isEmpty(level)) { + log.error("未设置安全等级"); + } + // 将抓取的图片进行识别 + List recTypes = new ArrayList<>(); + if (CollUtil.isNotEmpty(level)) { + recTypes = level.get(img.getProjectId()); + } + if (CollUtil.isEmpty(recTypes)) { + log.error("项目:{},未设置安全等级", img.getProjectId()); + throw new ServiceException("项目未设置安全等级无法识别,请设置安全等级之后再进行识别"); + } + RecognizeVo recognizeVo = null; + try { + recognizeVo = recognizerManager.recognize(img.getUrl(), recTypes); + } catch (Exception e) { + log.error("图片识别异常", e); + } + if (recognizeVo != null && recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue())) { + // 记录识别信息 + HseRecognizeRecord record = new HseRecognizeRecord(); + record.setOriginalPicture(img.getUrl()); + record.setOriginalUrlId(img.getId()); + record.setCreateTime(new Date()); + List targets = recognizeVo.getTargets(); + img.setTargets(JSONUtil.toJsonStr(targets)); + img.setImgSize(JSONUtil.toJsonStr(recognizeVo.getOriginalImgSize())); + img.setIsRecognize(RecognizerHasTargetEnum.YES.getValue()); + List recTypeList = targets.stream().map(RecognizeTargetVo::getType).distinct().toList(); + img.setRecType(JSONUtil.toJsonStr(recTypeList)); + String targetUrl = null; + try { + RecognizeImageStreamResult imageStreamResult = RecognizerManager.drawImageToStream(img.getUrl(), targets); + InputStream inputStream = imageStreamResult.getInputStream(); + String contentType = imageStreamResult.getContentType(); + String originalFilename = extractFilename(img.getUrl()); + long length = imageStreamResult.getLength(); + String targetImgPath = Ys7DeviceImgConstant.getTargetImgOssPath(originalFilename, img.getDeviceSerial()); + SysOssUploadVo drawImageUploadVo = ossService.uploadFileUrlWithNoSave(inputStream, targetImgPath, contentType, length); + targetUrl = drawImageUploadVo.getUrl(); + if (StringUtils.isNotBlank(targetUrl)) { + img.setRecognizeUrl(targetUrl); + } + } catch (Exception e) { + log.error("图片绘制失败", e); + } + List codeList = targets.stream() + .map(RecognizeTargetVo::getType).distinct() + .map(RecognizerTypeEnum::fromValue).filter(Objects::nonNull) + .map(RecognizerTypeEnum::getCode).filter(Objects::nonNull) + .toList(); + String codeStr = String.join(",", codeList); + record.setViolationType(codeStr); + record.setNum(targets.size()); + record.setDeviceSerial(img.getDeviceSerial()); + record.setDeviceName(img.getDeviceName()); + record.setPicture(targetUrl); + record.setOriginalPicture(img.getUrl()); + record.setRecordCategory(HseRecordCategoryEnum.MONITOR.getValue()); + record.setProjectId(img.getProjectId()); + // 保存识别记录 + boolean result = recognizeRecordService.save(record); + if (!result) { + throw new ServiceException("保存识别记录失败"); + } + } + img.setImgStatus(recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue()) ? "2" : "1"); + img.setUpdateTime(new Date()); + + return baseMapper.updateById(img); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int addViolationRecord(AddViolattionRecordReq req) { + HseRecognizeRecord recognizeRecord = recognizeRecordService.getBaseMapper().selectOne(new LambdaQueryWrapper() + .eq(HseRecognizeRecord::getDeviceSerial, req.getDeviceSerial()) + .eq(HseRecognizeRecord::getProjectId, req.getProjectId()) + .eq(HseRecognizeRecord::getOriginalUrlId, req.getOriginalUrlId())); + if (recognizeRecord == null) { + throw new ServiceException("找不到识别记录!"); + } + List violationRecordList = new ArrayList<>(); + + String violationType = recognizeRecord.getViolationType(); + if (StringUtils.isNotBlank(violationType)) { + List list = StringUtils.splitList(violationType); + for (String s : list) { + if (recognizeRecord.getProjectId() != null) { + HseViolationRecordCreateDto violationRecord = new HseViolationRecordCreateDto(); + violationRecord.setProjectId(recognizeRecord.getProjectId()); + violationRecord.setRecognizeId(recognizeRecord.getId()); + violationRecord.setViolationType(s); + violationRecord.setViolationTime(recognizeRecord.getCreateTime()); + violationRecordList.add(violationRecord); + } + } + } + if (CollUtil.isNotEmpty(violationRecordList)) { + violationRecordService.insertByMonitor(violationRecordList); + } + OthYs7DeviceImg img = baseMapper.selectById(req.getOriginalUrlId()); + if (img != null) { + img.setImgStatus("3"); + return baseMapper.updateById(img); + } + return 1; + } + /** * 提取文件名 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java index dd7ca865..ff26b69b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; @@ -16,15 +17,21 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.manager.ys7manager.Ys7Constant; import org.dromara.manager.ys7manager.Ys7Manager; +import org.dromara.manager.ys7manager.Ys7RequestUtils; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.dto.DevicePlayBackUrlRequstDto; import org.dromara.manager.ys7manager.enums.DeviceOnOffLineEnum; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.dto.ys7device.*; import org.dromara.other.domain.enums.OthDeviceStatusEnum; import org.dromara.other.domain.enums.OthVideoEncryptedEnum; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; import org.dromara.other.mapper.OthYs7DeviceMapper; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.other.utils.DateRangeUtils; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; import org.springframework.beans.BeanUtils; @@ -433,6 +440,53 @@ public class OthYs7DeviceServiceImpl extends ServiceImpl getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req) { + String token = ys7Manager.getToken(); + DeviceLocalVideoRequstDto dto = new DeviceLocalVideoRequstDto(); + dto.setAccessToken(token); + dto.setDeviceSerial(req.getDeviceSerial()); + dto.setStartTime(req.getStartTime()); + dto.setEndTime(req.getEndTime()); + return Ys7RequestUtils.getDeviceLocalVideo(dto); + } + + /** + * 查询范围日期和设备本地录像列表 + * @param req + * @return + */ + @Override + public DateAndDeviceLocalVideoVo getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req) { + DateAndDeviceLocalVideoVo vo = new DateAndDeviceLocalVideoVo(); + List dateList = DateRangeUtils.getDatesBetweenStrings(req.getStartTime(), req.getEndTime()); + vo.setDateList(dateList); + if (CollectionUtils.isNotEmpty(dateList) && dateList.size() > 1) { + String first = dateList.getFirst(); + req.setStartTime(first+" 00:00:00"); + req.setEndTime(first+" 23:59:59"); + } + List deviceLocalVideo = getDeviceLocalVideo(req); + vo.setDeviceList(deviceLocalVideo); + return vo; + } + /** * 验证萤石摄像对象是否发生更改 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java new file mode 100644 index 00000000..c4fce995 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java @@ -0,0 +1,166 @@ +package org.dromara.other.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +/** + * 日期范围工具类 + */ +public class DateRangeUtils { + + // 默认时区(东八区) + private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8"); + + // 日期格式 + private static final String DATE_FORMAT = "yyyy-MM-dd"; + + // 完整日期时间格式 + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + /** + * 获取两个时间戳之间的所有日期(包含起止日期) + * @param startTimestamp 开始时间戳(秒级/毫秒级字符串或数字) + * @param endTimestamp 结束时间戳(秒级/毫秒级字符串或数字) + * @return 日期列表(格式:yyyy-MM-dd) + */ + public static List getDatesBetweenTimestamps(Object startTimestamp, Object endTimestamp) { + // 转换为毫秒级时间戳 + long start = convertToMilliseconds(startTimestamp); + long end = convertToMilliseconds(endTimestamp); + + return getDatesBetweenDates(new Date(start), new Date(end)); + } + + /** + * 获取两个日期之间的所有日期(包含起止日期) + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 日期列表(格式:yyyy-MM-dd) + */ + public static List getDatesBetweenDates(Date startDate, Date endDate) { + List dates = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + + // 设置开始日期 + calendar.setTime(startDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + // 循环添加日期直到结束日期 + while (!calendar.getTime().after(endDate)) { + dates.add(DateUtil.format(calendar.getTime(), DATE_FORMAT)); + + // 日期加1天 + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + + return dates; + } + + /** + * 获取两个日期字符串之间的所有日期 + * @param startDateStr 开始日期(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) + * @param endDateStr 结束日期(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) + * @return 日期列表 + */ + public static List getDatesBetweenStrings(String startDateStr, String endDateStr) { + Date startDate = parseDateString(startDateStr); + Date endDate = parseDateString(endDateStr); + + return getDatesBetweenDates(startDate, endDate); + } + + /** + * 将时间戳转换为日期(yyyy-MM-dd) + */ + public static String timestampToDate(Object timestamp) { + long time = convertToMilliseconds(timestamp); + return DateUtil.format(new Date(time), DATE_FORMAT); + } + + /** + * 解析日期字符串为Date对象 + */ + private static Date parseDateString(String dateStr) { + try { + if (dateStr.contains(" ")) { + SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.parse(dateStr); + } else { + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.parse(dateStr); + } + } catch (ParseException e) { + throw new IllegalArgumentException("日期格式错误:" + dateStr); + } + } + + /** + * 将各种时间戳格式转换为毫秒级时间戳 + */ + private static long convertToMilliseconds(Object timestamp) { + if (timestamp == null) { + throw new IllegalArgumentException("时间戳不能为空"); + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + throw new IllegalArgumentException("时间戳不能为空"); + } + + try { + long time = Long.parseLong(timestampStr); + + // 10位秒级时间戳转为13位毫秒级 + if (timestampStr.length() == 10) { + time *= 1000; + } + + return time; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("时间戳格式错误:" + timestampStr); + } + } + + /** + * 获取指定日期的开始时间戳(当天00:00:00) + */ + public static long getStartOfDayTimestamp(Object timestamp) { + long time = convertToMilliseconds(timestamp); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + calendar.setTime(new Date(time)); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + return calendar.getTimeInMillis() / 1000; // 返回秒级时间戳 + } + + /** + * 获取指定日期的结束时间戳(当天23:59:59) + */ + public static long getEndOfDayTimestamp(Object timestamp) { + long time = convertToMilliseconds(timestamp); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + calendar.setTime(new Date(time)); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + + return calendar.getTimeInMillis() / 1000; // 返回秒级时间戳 + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java index d5af5a34..eebc97b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java @@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor; 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.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -18,6 +17,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.vo.OutConstructionAllValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.service.IOutConstructionValueService; import org.springframework.validation.annotation.Validated; @@ -49,14 +49,13 @@ public class OutConstructionValueController extends BaseController { } /** - * 导出施工产值列表 + * 查询施工产值合计列表 */ - @SaCheckPermission("out:constructionValue:export") - @Log(title = "施工产值", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(OutConstructionValueBo bo, HttpServletResponse response) { - List list = outConstructionValueService.queryList(bo); - ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response); + @SaCheckPermission("out:constructionValue:list") + @GetMapping("/totalList") + public R> totalList(OutConstructionValueBo bo) { + List list = outConstructionValueService.queryTotalList(bo); + return R.ok(list); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java index adceed0f..a160cc15 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java @@ -109,5 +109,9 @@ public class OutConstructionValueBo extends BaseEntity { */ private LocalDate endDate; + /** + * 项目类型 + */ + private String projectType; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java index b4950efb..25f24a20 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvalue; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 10:09 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueMatrixVo { /** @@ -57,6 +59,21 @@ public class OutConstructionValueMatrixVo { @ExcelProperty(value = "数量") private BigDecimal number; + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + /** * 对甲产值 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java index 28da0f08..23f53bd6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvalue; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 10:08 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueProjectVo { /** @@ -45,6 +47,21 @@ public class OutConstructionValueProjectVo { @ExcelProperty(value = "数量") private BigDecimal number; + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + /** * 对甲产值 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java index 991ec8bf..9616edf7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvalue; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 10:08 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueSubProjectVo { /** @@ -51,6 +53,21 @@ public class OutConstructionValueSubProjectVo { @ExcelProperty(value = "数量") private BigDecimal number; + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + /** * 对甲产值 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java new file mode 100644 index 00000000..70b25d58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java @@ -0,0 +1,73 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-03 11:24 + */ +@Data +public class OutConstructionValueTotalVo { + + /** + * 项目名 + */ + private String projectName; + + /** + * 子项目名 + */ + private String subProjectName; + + /** + * 方阵名称 + */ + private String matrixName; + + /** + * 分项工程名称 + */ + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 单位 + */ + private String unit; + + /** + * 数量 + */ + private BigDecimal number; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 产值 + */ + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java index 6356a7eb..0cf517b3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvaluerange; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 11:31 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueRangeMatrixVo { /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java index 5e3d741f..c559e578 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvaluerange; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 11:30 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueRangeProjectVo { /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java index d1d9cfa1..189e616e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java @@ -1,5 +1,6 @@ package org.dromara.out.domain.vo.outconstructionvaluerange; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -12,6 +13,7 @@ import java.math.BigDecimal; * @date 2025-12-01 11:30 */ @Data +@ExcelIgnoreUnannotated public class OutConstructionValueRangeSubProjectVo { /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java index 3f11aa5b..bb01ffa1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java @@ -9,6 +9,7 @@ import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.vo.OutConstructionAllValueVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueCategoryVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.progress.domain.PgsProgressCategory; @@ -41,6 +42,14 @@ public interface IOutConstructionValueService extends IService queryPageList(OutConstructionValueBo bo, PageQuery pageQuery); + /** + * 查询符合条件的施工产值列表 + * + * @param bo 查询条件 + * @return 施工产值列表 + */ + List queryTotalList(OutConstructionValueBo bo); + /** * 查询符合条件的施工产值列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java index 3c43cdf3..9dcc7e13 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java @@ -40,7 +40,6 @@ import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressPlanDetail; -import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; @@ -111,6 +110,7 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl list, - Summary summary) { + private OutConstructionValueRangeProjectVo buildProjectVo(BusProject project, String name, String childName, + List list, Summary summary) { OutConstructionValueRangeProjectVo vo = new OutConstructionValueRangeProjectVo(); vo.setProjectName(project.getProjectName()); vo.setProgressCategoryName(name + "/" + childName); @@ -499,13 +495,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl> entry, - Map projectNameMap, - Summary summary) { + private OutConstructionValueRangeSubProjectVo buildSubProjectVo(BusProject project, String name, String childName, + Map.Entry> entry, + Map projectNameMap, Summary summary) { OutConstructionValueRangeSubProjectVo vo = new OutConstructionValueRangeSubProjectVo(); vo.setProjectName(project.getProjectName()); vo.setSubProjectName(projectNameMap.get(entry.getKey())); @@ -529,13 +521,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl> entry, - Map projectNameMap, - Summary summary) { + private OutConstructionValueRangeMatrixVo buildMatrixVo(BusProject project, String name, String childName, + Map.Entry> entry, + Map projectNameMap, Summary summary) { List list = entry.getValue(); OutConstructionValueRangeMatrixVo vo = new OutConstructionValueRangeMatrixVo(); vo.setProjectName(project.getProjectName()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index b5c8c5f8..0b86c31e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -36,6 +36,7 @@ import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailFinishedCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailRemoveReq; +import org.dromara.progress.domain.enums.PgsRelevancyStructureEnum; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressPlanDetailService; @@ -108,6 +109,188 @@ public class OutConstructionValueServiceImpl extends ServiceImpl queryTotalList(OutConstructionValueBo bo) { + Long projectId = bo.getProjectId(); + if (projectId == null) { + throw new ServiceException("请选择项目"); + } + BusProject project = projectService.getById(projectId); + if (project == null) { + throw new ServiceException("项目不存在"); + } + // 获取子项目 + List projectList = projectService.lambdaQuery() + .eq(BusProject::getPId, projectId) + .list(); + projectList.add(project); + Map projectNameMap = projectList.stream() + .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List valueList = this.list(lqw); + if (CollUtil.isEmpty(valueList)) { + return Collections.emptyList(); + } + if (StringUtils.isNotBlank(bo.getProjectType())) { + List valueCategoryList = new ArrayList<>(); + List topList = new ArrayList<>(); + this.buildExportData(valueList, valueCategoryList, topList); + // 汇总数据 + List projectVoList = new ArrayList<>(); + List subProjectVoList = new ArrayList<>(); + List matrixVoList = new ArrayList<>(); + // 合计 + BigDecimal totalNumber = BigDecimal.ZERO; + Integer totalArtificialNum = 0; + Integer totalUavNum = 0; + Integer totalConfirmNum = 0; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + Integer subTotalArtificialNum = 0; + Integer subTotalUavNum = 0; + Integer subTotalConfirmNum = 0; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + Integer matrixTotalArtificialNum = 0; + Integer matrixTotalUavNum = 0; + Integer matrixTotalConfirmNum = 0; + BigDecimal matrixTotalOwnerValue = BigDecimal.ZERO; + BigDecimal matrixTotalOutValue = BigDecimal.ZERO; + // 根据名称+结构分类 + Map> topNameMap = + topList.stream().collect(Collectors.groupingBy(item -> item.getName() + "_" + item.getRelevancyStructure())); + for (Map.Entry> entry : topNameMap.entrySet()) { + String[] keys = entry.getKey().split("_"); + String name = keys[0]; + String structure = keys[1]; + List topNodes = entry.getValue(); + List topIds = topNodes.stream().map(PgsProgressCategory::getId).toList(); + // 找出全部子孙节点 + List children = findChildren(valueCategoryList, topIds); + // 子类按名称分组 + Map> childrenMap = + children.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getName)); + for (Map.Entry> childrenEntry : childrenMap.entrySet()) { + String childName = childrenEntry.getKey(); + List childrenEntryValue = childrenEntry.getValue(); + // ======= 构建项目级数据 ======= + Summary summary = calculateSummary(childrenEntryValue); + OutConstructionValueProjectVo projectVo = + buildProjectVo(project, name, childName, childrenEntryValue, summary); + projectVoList.add(projectVo); + totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number)); + totalArtificialNum += summary.artificialNum; + totalUavNum += summary.uavNum; + totalConfirmNum += summary.confirmNum; + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if ((structure.equals("1") || structure.equals("2")) && bo.getProjectType().equals("1")) { + Map> subMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId)); + for (Map.Entry> subEntry : subMap.entrySet()) { + Summary subSummary = calculateSummary(subEntry.getValue()); + OutConstructionValueSubProjectVo subVo = + buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); + subProjectVoList.add(subVo); + subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number)); + subTotalArtificialNum += subSummary.artificialNum; + subTotalUavNum += subSummary.uavNum; + subTotalConfirmNum += subSummary.confirmNum; + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.equals("2") && bo.getProjectType().equals("2")) { + Map> matrixMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName)); + for (Map.Entry> matrixEntry : matrixMap.entrySet()) { + Summary matrixSummary = calculateSummary(matrixEntry.getValue()); + OutConstructionValueMatrixVo matrixVo = + buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); + matrixVoList.add(matrixVo); + matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number)); + matrixTotalArtificialNum += matrixSummary.artificialNum; + matrixTotalUavNum += matrixSummary.uavNum; + matrixTotalConfirmNum += matrixSummary.confirmNum; + matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); + matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); + } + } + } + } + // 排序 + projectVoList.sort(Comparator.comparing(OutConstructionValueProjectVo::getProgressCategoryName)); + subProjectVoList.sort(Comparator.comparing(OutConstructionValueSubProjectVo::getSubProjectName) + .thenComparing(OutConstructionValueSubProjectVo::getProgressCategoryName)); + matrixVoList.sort(Comparator.comparing(OutConstructionValueMatrixVo::getSubProjectName) + .thenComparing(OutConstructionValueMatrixVo::getMatrixName) + .thenComparing(OutConstructionValueMatrixVo::getProgressCategoryName)); + // 填充合计 + OutConstructionValueProjectVo rangeProjectVo = new OutConstructionValueProjectVo(); + rangeProjectVo.setProjectName("合计"); + rangeProjectVo.setNumber(totalNumber); + rangeProjectVo.setArtificialNum(totalArtificialNum); + rangeProjectVo.setUavNum(totalUavNum); + rangeProjectVo.setConfirmNum(totalConfirmNum); + rangeProjectVo.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueSubProjectVo rangeSubProjectVo = new OutConstructionValueSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setArtificialNum(subTotalArtificialNum); + rangeSubProjectVo.setUavNum(subTotalUavNum); + rangeSubProjectVo.setConfirmNum(subTotalConfirmNum); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueMatrixVo rangeMatrixVo = new OutConstructionValueMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setArtificialNum(matrixTotalArtificialNum); + rangeMatrixVo.setUavNum(matrixTotalUavNum); + rangeMatrixVo.setConfirmNum(matrixTotalConfirmNum); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + return switch (bo.getProjectType()) { + case "3" -> projectVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case "1" -> subProjectVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case "2" -> matrixVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case null, default -> Collections.emptyList(); + }; + } + return valueList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + } + /** * 查询符合条件的施工产值列表 * @@ -150,13 +333,16 @@ public class OutConstructionValueServiceImpl extends ServiceImpl categoryLqw = new LambdaQueryWrapper<>(); categoryLqw.select(PgsProgressCategory::getId); - categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType()); + categoryLqw.eq(StringUtils.isNotBlank(bo.getUnitType()), PgsProgressCategory::getUnitType, bo.getUnitType()); categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId()); - if (CollUtil.isNotEmpty(ids)) { - categoryLqw.in(PgsProgressCategory::getProjectId, ids); + categoryLqw.in(CollUtil.isNotEmpty(ids), PgsProgressCategory::getProjectId, ids); + if (StringUtils.isNotBlank(bo.getProjectType())) { + categoryLqw.in(bo.getProjectType().equals("1"), PgsProgressCategory::getRelevancyStructure, + PgsRelevancyStructureEnum.SUB_PROJECT.getValue(), PgsRelevancyStructureEnum.MATRIX.getValue()); + categoryLqw.eq(bo.getProjectType().equals("2"), PgsProgressCategory::getRelevancyStructure, PgsRelevancyStructureEnum.MATRIX.getValue()); } List progressCategories = pgsProgressCategoryService.list(categoryLqw); if (CollUtil.isNotEmpty(progressCategories)) { @@ -441,7 +627,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl list) { Summary s = new Summary(); - s.number = BigDecimal.ZERO; + s.number = 0; + s.artificialNum = 0; + s.uavNum = 0; + s.confirmNum = 0; s.ownerValue = BigDecimal.ZERO; s.outValue = BigDecimal.ZERO; for (OutConstructionValueCategoryVo c : list) { @@ -608,7 +800,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl> teamList(BusProjectTeamQueryReq req) { + return R.ok(busProjectTeamService.queryList(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java index 8b976f97..3bf54a6d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java @@ -4,12 +4,17 @@ import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; import org.dromara.common.web.core.BaseController; +import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq; +import org.dromara.contractor.domain.vo.contractor.SubContractorVo; +import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.domain.vo.projectteam.TeamManageVo; import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -32,6 +37,12 @@ public class BusProjectTeamAppController extends BaseController { @Resource private IBusProjectTeamService projectTeamService; + @Resource + private ISysUserService userService; + + @Resource + private ISubContractorService contractorService; + /** * 根据id查询项目班组班组长信息列表 */ @@ -76,4 +87,21 @@ public class BusProjectTeamAppController extends BaseController { return R.ok(projectTeamService.getManager(teamId)); } + /** + * 查询分包单位列表 + */ + @GetMapping("/contractorList") + public R> contractorList(SubContractorQueryReq req) { + return R.ok(contractorService.queryList(req)); + } + + + /** + * 获取所有分包管理人员 + */ + @GetMapping("/listSubContractor") + public R> listSubContractor(Long projectId, Long contractorId) { + return R.ok(userService.selectUserListByAppUserType("2",projectId,contractorId)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java index d10555ff..e07031e4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java @@ -35,4 +35,9 @@ public class BusProjectTeamQueryReq implements Serializable { */ private String remark; + /** + * 分包公司Id + */ + private Long contractorId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java index 344cc68b..1cecba85 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java @@ -395,10 +395,12 @@ public class BusProjectTeamServiceImpl extends ServiceImpl { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java new file mode 100644 index 00000000..13dcbe08 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java @@ -0,0 +1,51 @@ +package org.dromara.rabbitmq.producer; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.dromara.rabbitmq.config.RabbitProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +/** + * @author lilemy + * @date 2025-12-05 11:40 + */ +@Slf4j +@Component +public class RabbitProducer { + + @Resource + private RabbitTemplate rabbitTemplate; + + @Resource + private RabbitProperties rabbitProperties; + + /** + * 发送消息 + * + * @param message 消息 + */ + public void send(String message) { + rabbitTemplate.convertAndSend(rabbitProperties.getExchangeName(), rabbitProperties.getRoutingKey(), message); + log.info("【生产者】Message send: {}", message); + } + + /** + * 发送延迟消息 + * + * @param message 消息 + * @param delayMs 延迟时间(毫秒) + */ + public void sendDelayMessage(String message, long delayMs) { + rabbitTemplate.convertAndSend( + rabbitProperties.getDelayExchangeName(), + rabbitProperties.getDelayRoutingKey(), + message, + message1 -> { + message1.getMessageProperties().setDelayLong(delayMs); + return message1; + } + ); + log.info("【生产者】Delay Message send: {} delay: {}ms", message, delayMs); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java new file mode 100644 index 00000000..5842da36 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java @@ -0,0 +1,27 @@ +package org.dromara.rabbitmq.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.rabbitmq.domain.MqDelayTask; + +/** + * 延迟任务Service接口 + * + * @author lilemy + * @date 2025-12-05 + */ +public interface IMqDelayTaskService extends IService { + + /** + * 添加延迟任务 + * + * @param task 延迟任务 + */ + void addDelayTask(MqDelayTask task); + + /** + * 执行任务 + * + * @param id 主键id + */ + void executeTask(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java new file mode 100644 index 00000000..54bdfe83 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java @@ -0,0 +1,114 @@ +package org.dromara.rabbitmq.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.enums.MqDelayTaskTypeEnum; +import org.dromara.rabbitmq.mapper.MqDelayTaskMapper; +import org.dromara.rabbitmq.producer.RabbitProducer; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; + +/** + * 延迟任务Service业务层处理 + * + * @author lilemy + * @date 2025-12-05 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class MqDelayTaskServiceImpl extends ServiceImpl + implements IMqDelayTaskService { + + @Resource + private RabbitProducer rabbitProducer; + + @Lazy + @Resource + private IHazardHiddenDangerRectifyService hazardHiddenDangerRectifyService; + + /** + * 添加延迟任务 + * + * @param task 延迟任务 + */ + @Override + public void addDelayTask(MqDelayTask task) { + String bizType = task.getBizType(); + Long bizId = task.getBizId(); + LocalDateTime executeTime = task.getExecuteTime(); + if (StringUtils.isBlank(bizType) || bizId == null || executeTime == null) { + throw new ServiceException("参数错误"); + } + // 保存延迟任务 + boolean save = this.save(task); + if (!save) { + throw new ServiceException("添加延迟任务失败"); + } + // 计算超时时间 + ZoneId zone = ZoneId.systemDefault(); + long diffMillis = Duration.between( + LocalDateTime.now().atZone(zone), + executeTime.atZone(zone) + ).toMillis(); + if (diffMillis <= 0) { + throw new ServiceException("延迟时间不能小于当前时间"); + } + // 添加延迟任务 + rabbitProducer.sendDelayMessage(String.valueOf(task.getId()), diffMillis); + } + + /** + * 执行任务 + * + * @param id 主键id + */ + @Override + public void executeTask(Long id) { + MqDelayTask task = this.getById(id); + if (task == null) { + return; + } + if (task.getStatus() == 1 || task.getStatus() == 2) { + return; + } + try { + // 执行中 + task.setStatus(1); + this.updateById(task); + // 业务逻辑:发送通知 + String bizType = task.getBizType(); + MqDelayTaskTypeEnum type = MqDelayTaskTypeEnum.getByType(bizType); + switch (type) { + case HIDDEN_DANGER -> hazardHiddenDangerRectifyService.sendTimeoutNotify(task.getBizId()); + case null, default -> { + } + } + // 成功 + task.setStatus(2); + this.updateById(task); + } catch (Exception e) { + // 更新失败状态 + task.setRetryCount(task.getRetryCount() + 1); + task.setFailReason(e.getMessage()); + task.setStatus(3); + this.updateById(task); + // 重试机制 + if (task.getRetryCount() < task.getMaxRetry()) { + // 1分钟后重试 + rabbitProducer.sendDelayMessage(String.valueOf(id), 60 * 1000); + } + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java new file mode 100644 index 00000000..0743423b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java @@ -0,0 +1,105 @@ +package org.dromara.safety.accident.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.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.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.service.IHseSafetySgdanjlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故档案记录 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgdanjl") +public class HseSafetySgdanjlController extends BaseController { + + private final IHseSafetySgdanjlService hseSafetySgdanjlService; + + /** + * 查询安全-事故档案记录列表 + */ + @SaCheckPermission("accident:safetySgdanjl:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgdanjlBo bo, PageQuery pageQuery) { + return hseSafetySgdanjlService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故档案记录列表 + */ + @SaCheckPermission("accident:safetySgdanjl:export") + @Log(title = "安全-事故档案记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgdanjlBo bo, HttpServletResponse response) { + List list = hseSafetySgdanjlService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故档案记录", HseSafetySgdanjlVo.class, response); + } + + /** + * 获取安全-事故档案记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgdanjl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgdanjlService.queryById(id)); + } + + /** + * 新增安全-事故档案记录 + */ + @SaCheckPermission("accident:safetySgdanjl:add") + @Log(title = "安全-事故档案记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgdanjlBo bo) { + return toAjax(hseSafetySgdanjlService.insertByBo(bo)); + } + + /** + * 修改安全-事故档案记录 + */ + @SaCheckPermission("accident:safetySgdanjl:edit") + @Log(title = "安全-事故档案记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgdanjlBo bo) { + return toAjax(hseSafetySgdanjlService.updateByBo(bo)); + } + + /** + * 删除安全-事故档案记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgdanjl:remove") + @Log(title = "安全-事故档案记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgdanjlService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java new file mode 100644 index 00000000..c328b22c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java @@ -0,0 +1,105 @@ +package org.dromara.safety.accident.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.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.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故调查 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgdc") +public class HseSafetySgdcController extends BaseController { + + private final IHseSafetySgdcService hseSafetySgdcService; + + /** + * 查询安全-事故调查列表 + */ + @SaCheckPermission("accident:safetySgdc:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgdcBo bo, PageQuery pageQuery) { + return hseSafetySgdcService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故调查列表 + */ + @SaCheckPermission("accident:safetySgdc:export") + @Log(title = "安全-事故调查", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgdcBo bo, HttpServletResponse response) { + List list = hseSafetySgdcService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故调查", HseSafetySgdcVo.class, response); + } + + /** + * 获取安全-事故调查详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgdc:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgdcService.queryById(id)); + } + + /** + * 新增安全-事故调查 + */ + @SaCheckPermission("accident:safetySgdc:add") + @Log(title = "安全-事故调查", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgdcBo bo) { + return toAjax(hseSafetySgdcService.insertByBo(bo)); + } + + /** + * 修改安全-事故调查 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @Log(title = "安全-事故调查", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgdcBo bo) { + return toAjax(hseSafetySgdcService.updateByBo(bo)); + } + + /** + * 删除安全-事故调查 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgdc:remove") + @Log(title = "安全-事故调查", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgdcService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java new file mode 100644 index 00000000..f8fc286b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.accident.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.service.IHseSafetySgsbService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 安全-事故上报 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgsb") +public class HseSafetySgsbController extends BaseController { + + private final IHseSafetySgsbService hseSafetySgsbService; + + /** + * 查询安全-事故上报列表 + */ + @SaCheckPermission("accident:safetySgsb:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgsbBo bo, PageQuery pageQuery) { + return hseSafetySgsbService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故上报列表 + */ + @SaCheckPermission("accident:safetySgsb:export") + @Log(title = "安全-事故上报", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgsbBo bo, HttpServletResponse response) { + List list = hseSafetySgsbService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故上报", HseSafetySgsbVo.class, response); + } + + /** + * 获取安全-事故上报详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgsb:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgsbService.queryById(id)); + } + + /** + * 新增安全-事故上报 + */ + @SaCheckPermission("accident:safetySgsb:add") + @Log(title = "安全-事故上报", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgsbBo bo) { + return toAjax(hseSafetySgsbService.insertByBo(bo)); + } + + /** + * 修改安全-事故上报 + */ + @SaCheckPermission("accident:safetySgsb:edit") + @Log(title = "安全-事故上报", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgsbBo bo) { + return toAjax(hseSafetySgsbService.updateByBo(bo)); + } + + /** + * 删除安全-事故上报 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgsb:remove") + @Log(title = "安全-事故上报", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgsbService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 获取统计数据 + */ + @GetMapping("/getCount/{projectId}") + @SaCheckPermission("accident:safetySgsb:list") + public R getCount(@PathVariable Long projectId) { + return R.ok(hseSafetySgsbService.getCount(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java new file mode 100644 index 00000000..ad30bb8e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java @@ -0,0 +1,144 @@ +package org.dromara.safety.accident.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.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +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.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.service.IHseSafetySgzgbhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故整改闭环 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgzgbh") +public class HseSafetySgzgbhController extends BaseController { + + private final IHseSafetySgzgbhService hseSafetySgzgbhService; + + /** + * 头部数据返回 + */ + @SaCheckPermission("jxzgbh:yhzgbh:list") + @GetMapping("/getListHead") + public R getListHead(HseSafetySgzgbhBo bo) { + return R.ok(hseSafetySgzgbhService.getListHead(bo)); + } + /** + * 查询安全-事故整改闭环列表 + */ + @SaCheckPermission("accident:safetySgzgbh:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgzgbhBo bo, PageQuery pageQuery) { + return hseSafetySgzgbhService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故整改闭环列表 + */ +// @SaCheckPermission("accident:safetySgzgbh:export") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HseSafetySgzgbhBo bo, HttpServletResponse response) { +// List list = hseSafetySgzgbhService.queryList(bo); +// ExcelUtil.exportExcel(list, "安全-事故整改闭环", HseSafetySgzgbhVo.class, response); +// } + + /** + * 获取安全-事故整改闭环详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgzgbh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgzgbhService.queryById(id)); + } + + /** + * 新增安全-事故整改闭环 + */ +// @SaCheckPermission("accident:safetySgzgbh:add") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) +// @RepeatSubmit() +// @PostMapping() +// public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgzgbhBo bo) { +// return toAjax(hseSafetySgzgbhService.insertByBo(bo)); +// } + + /** + * 新增整改信息 + * @param bo + * @return + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addZGxx") + public R addZGxx(@Validated(AddGroup.class) @RequestBody HseSafetyZgxxBo bo) { + return toAjax(hseSafetySgzgbhService.addZGxx(bo)); + } + + /** + * 新增复查信息 + * @param bo + * @return + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addFCxx") + public R addFCxx(@Validated(AddGroup.class) @RequestBody HseSafetyFcxxBo bo) { + return toAjax(hseSafetySgzgbhService.addFCxx(bo)); + } + + /** + * 修改安全-事故整改闭环 + */ +// @SaCheckPermission("accident:safetySgzgbh:edit") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.UPDATE) +// @RepeatSubmit() +// @PutMapping() +// public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgzgbhBo bo) { +// return toAjax(hseSafetySgzgbhService.updateByBo(bo)); +// } + + /** + * 删除安全-事故整改闭环 + * + * @param ids 主键串 + */ +// @SaCheckPermission("accident:safetySgzgbh:remove") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.DELETE) +// @DeleteMapping("/{ids}") +// public R remove(@NotEmpty(message = "主键不能为空") +// @PathVariable Long[] ids) { +// return toAjax(hseSafetySgzgbhService.deleteWithValidByIds(List.of(ids), true)); +// } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java new file mode 100644 index 00000000..d023720a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java @@ -0,0 +1,83 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 安全事故复查信息对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_fcxx") +public class HseSafetyFcxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + private Long masterId; + + /** + * 整改ID + */ + private Long zgId; + + /** + * 复查人 + */ + private Long review; + + /** + * 复查日期 + */ + private Date reviewDate; + + /** + * 复查意见 + */ + private String reviewOpinion; + + /** + * 复查状态 + */ + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java new file mode 100644 index 00000000..47dc66f3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java @@ -0,0 +1,123 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 安全-事故档案记录对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgdanjl") +public class HseSafetySgdanjl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 档案编号 + */ + private String danbh; + + /** + * 关联项目 + */ + private String project; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 事故详情 + */ + private String sgxq; + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + private String dcxq; + + /** + * 整改与复查详情 + */ + private String zgfcxq; + + /** + * 档案管理人 + */ + private String danglr; + + /** + * 档案保存期限 + */ + private String storageLife; + + /** + * 电子档案存储位置 + */ + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + private String zzdancfwz; + + /** + * 档案备注 + */ + private String remarks; + + /** + * 审核状态 + */ + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java new file mode 100644 index 00000000..e41906a7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java @@ -0,0 +1,162 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 安全-事故调查对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgdc") +public class HseSafetySgdc extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 调查编号 + */ + private String dcbh; + + /** + * 关联事故id + */ + private Long sgId; + + /** + * 调查小组 + */ + private String dcxz; + + /** + * 调查开始时间 + */ + private Date dckssj; + + /** + * 调查结束时间 + */ + private Date dcjssj; + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + + /** + * 主要负责人 + */ + private Long zyfzr; + + /** + * 次要负责人 + */ + private Long cyfzr; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + /** + * 整改措施内容 + */ + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + private String zgfzrType; + + /** + * 整改负责人 + */ + private Long zgfzr; + + /** + * 整改优先级(暂时废弃) + */ + private String zgyxj; + + /** + * 整改时限 + */ + private Date zgsx; + + /** + * 复查人员 + */ + private Long fcry; + + /** + * 整改验收标准 + */ + private String zgysbz; + + /** + * 处理意见 + */ + private String clyj; + + /** + * 调查负责人 + */ + private Long dcfzr; + + /** + * 多文件逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java new file mode 100644 index 00000000..18496754 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java @@ -0,0 +1,129 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 安全-事故上报对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgsb") +public class HseSafetySgsb extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private BigDecimal cbgs; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 联系方式 + */ + private String lxfs; + + /** + * 上报渠道 + */ + private String sbqd; + + /** + * 接收人 + */ + private Long jsr; + + /** + * 紧急措施 + */ + private String jjcs; + + /** + * 文件id逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 事故状态(已上报,待调查,待整改,已整改,,已闭环) + */ + private String sgzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java new file mode 100644 index 00000000..b3e96557 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java @@ -0,0 +1,132 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 安全-事故整改闭环对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgzgbh") +public class HseSafetySgzgbh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 整改闭环编号 + */ + private String zgbhbh; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 调查人 + */ + private Long jsr; + + /** + * 上报人 + */ + private Long sbr; + + /** + * 上报时间 + */ + private Date sbsj; + + /** + * 整改状态 + */ + private String zgStatus; + + /** + * 整改人 + */ + private Long zgr; + + /** + * 复查状态 + */ + private String fcStatus; + + /** + * 复查人 + */ + private Long fcr; + + /** + * 最终闭环状态 + */ + private String reviewStatus; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java new file mode 100644 index 00000000..d3507dd9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java @@ -0,0 +1,74 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 安全事故整改信息对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_zgxx") +public class HseSafetyZgxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + private Long masterId; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改开始日期 + */ + private Date abarbeitungKsdate; + + /** + * 整改结束日期 + */ + private Date abarbeitungJsdate; + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java new file mode 100644 index 00000000..a8887262 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java @@ -0,0 +1,89 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetyFcxx; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全事故复查信息业务对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetyFcxx.class, reverseConvertGenerate = false) +public class HseSafetyFcxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @NotNull(message = "安全事故整改与闭环ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改ID + */ + @NotNull(message = "整改ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long zgId; + + /** + * 复查人 + */ + @NotNull(message = "复查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long review; + + /** + * 复查日期 + */ + @NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date reviewDate; + + /** + * 复查意见 + */ + @NotBlank(message = "复查意见不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinion; + + /** + * 复查状态 + */ + @NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + @NotBlank(message = "复查意见详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java new file mode 100644 index 00000000..7a079d5d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java @@ -0,0 +1,123 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全-事故档案记录业务对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgdanjl.class, reverseConvertGenerate = false) +public class HseSafetySgdanjlBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 档案编号 + */ + private String danbh; + + /** + * 关联项目 + */ + private String project; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 事故详情 + */ + private String sgxq; + + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + private String dcxq; + + /** + * 整改与复查详情 + */ + private String zgfcxq; + + /** + * 档案管理人 + */ + private String danglr; + + /** + * 档案保存期限 + */ + private String storageLife; + + /** + * 电子档案存储位置 + */ + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + private String zzdancfwz; + + /** + * 档案备注 + */ + private String remarks; + + /** + * 审核状态 + */ + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java new file mode 100644 index 00000000..aefa6543 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java @@ -0,0 +1,160 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.util.Date; + +/** + * 安全-事故调查业务对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgdc.class, reverseConvertGenerate = false) +public class HseSafetySgdcBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 调查编号 + */ + private String dcbh; + + /** + * 关联事故id + */ + private Long sgId; + + /** + * 调查小组 + */ + private String dcxz; + + /** + * 调查开始时间 + */ + private Date dckssj; + + /** + * 调查结束时间 + */ + private Date dcjssj; + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + + /** + * 主要负责人 + */ + private Long zyfzr; + + /** + * 次要负责人 + */ + private Long cyfzr; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + /** + * 整改措施内容 + */ + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + private String zgfzrType; + + /** + * 整改负责人 + */ + private Long zgfzr; + + /** + * 整改优先级(暂时废弃) + */ + private String zgyxj; + + /** + * 整改时限 + */ + private Date zgsx; + + /** + * 复查人员 + */ + private Long fcry; + + /** + * 整改验收标准 + */ + private String zgysbz; + + /** + * 处理意见 + */ + private String clyj; + + /** + * 调查负责人 + */ + private Long dcfzr; + + /** + * 多文件逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java new file mode 100644 index 00000000..c834da62 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java @@ -0,0 +1,69 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.io.Serializable; +import java.util.Date; + +/** + * 安全-事故调查业务对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgdcxqReq implements Serializable { + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + + /** + * 主要负责人 + */ + private Long zyfzr; + + /** + * 次要负责人 + */ + private Long cyfzr; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java new file mode 100644 index 00000000..83ac1042 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java @@ -0,0 +1,127 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 安全-事故上报业务对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgsb.class, reverseConvertGenerate = false) +public class HseSafetySgsbBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private BigDecimal cbgs; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 联系方式 + */ + private String lxfs; + + /** + * 上报渠道 + */ + private String sbqd; + + /** + * 接收人 + */ + private Long jsr; + + /** + * 紧急措施 + */ + private String jjcs; + + /** + * 文件id逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 事故状态(已上报,待调查,待整改,已整改,,已闭环) + */ + private String sgzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java new file mode 100644 index 00000000..17d0a9a6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java @@ -0,0 +1,49 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serializable; +import java.util.Date; + +/** + * 安全-事故上报业务对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgssqkReq implements Serializable { + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private Long cbgs; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java new file mode 100644 index 00000000..531ed2ed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java @@ -0,0 +1,40 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serializable; +import java.util.Date; + +/** + * 安全-事故上报业务对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgxqReq implements Serializable { + + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 紧急措施 + */ + private String jjcs; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java new file mode 100644 index 00000000..903f3c82 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java @@ -0,0 +1,131 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.util.Date; + +/** + * 安全-事故整改闭环业务对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgzgbh.class, reverseConvertGenerate = false) +public class HseSafetySgzgbhBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 整改闭环编号 + */ + private String zgbhbh; + + /** + * 关联项目 + */ + private Long projectId; + + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 调查人 + */ + private Long jsr; + + /** + * 上报人 + */ + private Long sbr; + + /** + * 上报时间 + */ + private Date sbsj; + + /** + * 整改状态 + */ + private String zgStatus; + + /** + * 整改人 + */ + private Long zgr; + + /** + * 复查状态 + */ + private String fcStatus; + + /** + * 复查人 + */ + private Long fcr; + + /** + * 最终闭环状态 + */ + private String reviewStatus; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java new file mode 100644 index 00000000..26076867 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java @@ -0,0 +1,40 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.io.Serializable; +import java.util.Date; + +/** + * 安全-事故整改闭环业务对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgzgfcxqReq implements Serializable { + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java new file mode 100644 index 00000000..0a41e7a4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java @@ -0,0 +1,79 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetyZgxx; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全事故整改信息业务对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetyZgxx.class, reverseConvertGenerate = false) +public class HseSafetyZgxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @NotNull(message = "安全事故整改与闭环ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改责任人 + */ + @NotNull(message = "整改责任人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long abarbeitung; + + /** + * 整改开始日期 + */ + @NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date abarbeitungJsdate; + + /** + * 整改措施 + */ + @NotBlank(message = "整改措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @NotBlank(message = "整改完成情况不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java new file mode 100644 index 00000000..ebef3a91 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java @@ -0,0 +1,102 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +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.util.Date; + + + +/** + * 安全事故复查信息视图对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetyFcxx.class) +public class HseSafetyFcxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @ExcelProperty(value = "安全事故整改与闭环ID") + private Long masterId; + + /** + * 整改ID + */ + @ExcelProperty(value = "整改ID") + private Long zgId; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long review; + + /** + * 复查日期 + */ + @ExcelProperty(value = "复查日期") + private Date reviewDate; + + /** + * 复查意见 + */ + @ExcelProperty(value = "复查意见") + private String reviewOpinion; + + /** + * 复查状态 + */ + @ExcelProperty(value = "复查状态") + private String reviewState; + + /** + * 不通过原因 + */ + @ExcelProperty(value = "不通过原因") + private String notPassCause; + + /** + * 复查意见详情 + */ + @ExcelProperty(value = "复查意见详情") + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * pdf文件(多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java new file mode 100644 index 00000000..1d87e90d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java @@ -0,0 +1,148 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +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.util.Date; + + + +/** + * 安全-事故档案记录视图对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgdanjl.class) +public class HseSafetySgdanjlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 档案编号 + */ + @ExcelProperty(value = "档案编号") + private String danbh; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private String project; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级 + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 事故详情 + */ + @ExcelProperty(value = "事故详情") + private String sgxq; + + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + @ExcelProperty(value = "调查详情") + private String dcxq; + + /** + * 整改与复查详情 + */ + @ExcelProperty(value = "整改与复查详情") + private String zgfcxq; + + /** + * 档案管理人 + */ + @ExcelProperty(value = "档案管理人") + private String danglr; + + /** + * 档案保存期限 + */ + @ExcelProperty(value = "档案保存期限") + private String storageLife; + + /** + * 电子档案存储位置 + */ + @ExcelProperty(value = "电子档案存储位置") + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + @ExcelProperty(value = "纸质档案存放位置") + private String zzdancfwz; + + /** + * 档案备注 + */ + @ExcelProperty(value = "档案备注") + private String remarks; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java new file mode 100644 index 00000000..ecb09e33 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java @@ -0,0 +1,190 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 安全-事故调查视图对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgdc.class) +public class HseSafetySgdcVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 调查编号 + */ + @ExcelProperty(value = "调查编号") + private String dcbh; + + /** + * 关联事故id + */ + @ExcelProperty(value = "关联事故id") + private Long sgId; + + /** + * 调查小组 + */ + @ExcelProperty(value = "调查小组") + private String dcxz; + + /** + * 调查开始时间 + */ + @ExcelProperty(value = "调查开始时间") + private Date dckssj; + + /** + * 调查结束时间 + */ + @ExcelProperty(value = "调查结束时间") + private Date dcjssj; + + /** + * 事故详细经过 + */ + @ExcelProperty(value = "事故详细经过") + private String sgxxjg; + + /** + * 直接原因 + */ + @ExcelProperty(value = "直接原因") + private String zjjy; + + /** + * 间接原因 + */ + @ExcelProperty(value = "间接原因") + private String jjyy; + + /** + * 证据材料说明 + */ + @ExcelProperty(value = "证据材料说明") + private String zjcl; + + /** + * 责任部门 + */ + @ExcelProperty(value = "责任部门") + private Long zrbm; + + /** + * 主要负责人 + */ + @ExcelProperty(value = "主要负责人") + private Long zyfzr; + + /** + * 次要负责人 + */ + @ExcelProperty(value = "次要负责人") + private Long cyfzr; + + /** + * 责任划分 + */ + @ExcelProperty(value = "责任划分") + private String zrhf; + + /** + * 责任认定说明 + */ + @ExcelProperty(value = "责任认定说明") + private String zrrdsm; + + /** + * 整改措施内容 + */ + @ExcelProperty(value = "整改措施内容") + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + @ExcelProperty(value = "1班组长2分包人") + private String zgfzrType; + + /** + * 整改负责人 + */ + @ExcelProperty(value = "整改负责人") + private Long zgfzr; + + /** + * 整改优先级(暂时废弃) + */ + @ExcelProperty(value = "整改优先级(暂时废弃)") + private String zgyxj; + + /** + * 整改时限 + */ + @ExcelProperty(value = "整改时限") + private Date zgsx; + + /** + * 复查人员 + */ + @ExcelProperty(value = "复查人员") + private Long fcry; + + /** + * 整改验收标准 + */ + @ExcelProperty(value = "整改验收标准") + private String zgysbz; + + /** + * 处理意见 + */ + @ExcelProperty(value = "处理意见") + private String clyj; + + /** + * 调查负责人 + */ + @ExcelProperty(value = "调查负责人") + private Long dcfzr; + + /** + * 多文件逗号分隔 + */ + @ExcelProperty(value = "多文件逗号分隔") + private String file; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java new file mode 100644 index 00000000..bdf61821 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java @@ -0,0 +1,156 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + + +/** + * 安全-事故上报视图对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgsb.class) +public class HseSafetySgsbVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private Long projectId; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级 + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 死亡人数 + */ + @ExcelProperty(value = "死亡人数") + private Long swrs; + + /** + * 重伤人数 + */ + @ExcelProperty(value = "重伤人数") + private Long zsrs; + + /** + * 轻伤人数 + */ + @ExcelProperty(value = "轻伤人数") + private Long qsrs; + + /** + * 人员信息 + */ + @ExcelProperty(value = "人员信息") + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + @ExcelProperty(value = "初步估算(万元-角分)") + private BigDecimal cbgs; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 联系方式 + */ + @ExcelProperty(value = "联系方式") + private String lxfs; + + /** + * 上报渠道 + */ + @ExcelProperty(value = "上报渠道") + private String sbqd; + + /** + * 接收人 + */ + @ExcelProperty(value = "接收人") + private Long jsr; + + /** + * 接收人名称 + */ + private String jsrmc; + + /** + * 紧急措施 + */ + @ExcelProperty(value = "紧急措施") + private String jjcs; + + /** + * 文件id逗号分隔 + */ + @ExcelProperty(value = "文件id逗号分隔") + private String file; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 事故状态(待上报,已上报,待调查,待整改,已整改,需整改,已闭环) + */ + @ExcelProperty(value = "事故状态(已上报,待调查,待整改,已整改,,已闭环)") + private String sgzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java new file mode 100644 index 00000000..d30313ac --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java @@ -0,0 +1,30 @@ +package org.dromara.safety.accident.domain.vo; + + +import lombok.Data; + +@Data +public class HseSafetySgzgbhHeadVo { + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 待整改 + */ + private Long dzg = 0L; + + /** + * 待验收 + */ + private Long dys = 0L; + + + /** + * 已闭环 + */ + private Long ybh = 0L; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java new file mode 100644 index 00000000..b1d087ff --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java @@ -0,0 +1,157 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 安全-事故整改闭环视图对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgzgbh.class) +public class HseSafetySgzgbhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 整改闭环编号 + */ + @ExcelProperty(value = "整改闭环编号") + private String zgbhbh; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private Long projectId; + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级 + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 调查人 + */ + @ExcelProperty(value = "调查人") + private Long jsr; + + /** + * 上报人 + */ + @ExcelProperty(value = "上报人") + private Long sbr; + + /** + * 上报时间 + */ + @ExcelProperty(value = "上报时间") + private Date sbsj; + + /** + * 整改状态 + */ + @ExcelProperty(value = "整改状态") + private String zgStatus; + + /** + * 整改人 + */ + @ExcelProperty(value = "整改人") + private Long zgr; + + /** + * 复查状态 + */ + @ExcelProperty(value = "复查状态") + private String fcStatus; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long fcr; + + /** + * 最终闭环状态 + */ + @ExcelProperty(value = "最终闭环状态") + private String reviewStatus; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 整改与复查记录 + */ + private List zgxxVos; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java new file mode 100644 index 00000000..eb3e1c99 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java @@ -0,0 +1,96 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +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.util.Date; + + + +/** + * 安全事故整改信息视图对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetyZgxx.class) +public class HseSafetyZgxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @ExcelProperty(value = "安全事故整改与闭环ID") + private Long masterId; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + + /** + * 整改开始日期 + */ + @ExcelProperty(value = "整改开始日期") + private Date abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @ExcelProperty(value = "整改结束日期") + private Date abarbeitungJsdate; + + /** + * 整改措施 + */ + @ExcelProperty(value = "整改措施") + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @ExcelProperty(value = "整改完成情况") + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + /** + * pdf文件(多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + /** + * 关联复查信息 + */ + private HseSafetyFcxxVo fcxxVo; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java new file mode 100644 index 00000000..b7d529be --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java @@ -0,0 +1,30 @@ +package org.dromara.safety.accident.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class SgsbCountVo { + + /** + * 本月上报事故 + */ + private Long bysbsg; + + /** + * 待处理事故 + */ + private Long dclsg; + + /** + * 已闭环事故 + */ + private Long ybhsg; + + /** + * 事故整改完成率 + */ + private BigDecimal sgzgwcl; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java new file mode 100644 index 00000000..18c1e547 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全事故复查信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetyFcxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java new file mode 100644 index 00000000..a8db1412 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故档案记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgdanjlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java new file mode 100644 index 00000000..92ca2084 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故调查Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgdcMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java new file mode 100644 index 00000000..fe52737a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故上报Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgsbMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java new file mode 100644 index 00000000..3d6dc8a6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故整改闭环Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgzgbhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java new file mode 100644 index 00000000..9c422dd7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全事故整改信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetyZgxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java new file mode 100644 index 00000000..a0a10d8f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java @@ -0,0 +1,81 @@ +package org.dromara.safety.accident.menu; + +import lombok.Getter; + +/** + * 消息类型枚举 + * + * @author may + */ +@Getter +public enum SGStatusEnum { + + //事故状态 主数据 + /** + * 已上报 + */ + REPORTED("1", "已上报"), + + /** + * 待调查 + */ + UNDER_INVESTIGATION("5", "待调查"), + /** + * 待整改 + */ + SG_TO_BE_RECTIFIED("9", "待整改"), + /** + * 已整改 + */ + SG_HAS_BEEN_RECTIFIED("14", "已整改"), + + /** + * 已闭环 + */ + SG_CLOSED_LOOP_OPERATION("19", "已闭环"), + + //整改状态 + /** + * 待整改 + */ + TO_BE_RECTIFIED("1", "待整改"), + + /** + * 整改中 + */ + UNDER_RECTIFICATION("2", "整改中"), + /** + * 已整改 + */ + HAS_BEEN_RECTIFIED("3", "已整改"), + + //复查状态 + /** + * 通过 + */ + PASS("1", "通过"), + /** + * 不通过 + */ + NO_PASS("2", "不通过"), + //闭环状态 + /** + * 已闭环 + */ + CLOSED_LOOP_OPERATION("2", "已闭环"), + /** + * 未闭环 + */ + OPEN_LOOP("1", "未闭环"); + + private final String code; + + private final String desc; + + SGStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + +} + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java new file mode 100644 index 00000000..c8ca83b9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java @@ -0,0 +1,77 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全事故复查信息Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetyFcxxService extends IService{ + + /** + * 查询安全事故复查信息 + * + * @param id 主键 + * @return 安全事故复查信息 + */ + HseSafetyFcxxVo queryById(Long id); + + /** + * 分页查询安全事故复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故复查信息分页列表 + */ + TableDataInfo queryPageList(HseSafetyFcxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全事故复查信息列表 + * + * @param bo 查询条件 + * @return 安全事故复查信息列表 + */ + List queryList(HseSafetyFcxxBo bo); + + /** + * 新增安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetyFcxxBo bo); + + /** + * 修改安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetyFcxxBo bo); + + /** + * 校验并批量删除安全事故复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过整改id获取对应的复查信息 + * @param id + * @return + */ + HseSafetyFcxxVo getInfoVoById(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java new file mode 100644 index 00000000..11d083d5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故档案记录Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgdanjlService extends IService{ + + /** + * 查询安全-事故档案记录 + * + * @param id 主键 + * @return 安全-事故档案记录 + */ + HseSafetySgdanjlVo queryById(Long id); + + /** + * 分页查询安全-事故档案记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故档案记录分页列表 + */ + TableDataInfo queryPageList(HseSafetySgdanjlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故档案记录列表 + * + * @param bo 查询条件 + * @return 安全-事故档案记录列表 + */ + List queryList(HseSafetySgdanjlBo bo); + + /** + * 新增安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgdanjlBo bo); + + /** + * 修改安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgdanjlBo bo); + + /** + * 校验并批量删除安全-事故档案记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java new file mode 100644 index 00000000..595b7dca --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故调查Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgdcService extends IService{ + + /** + * 查询安全-事故调查 + * + * @param id 主键 + * @return 安全-事故调查 + */ + HseSafetySgdcVo queryById(Long id); + + /** + * 分页查询安全-事故调查列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故调查分页列表 + */ + TableDataInfo queryPageList(HseSafetySgdcBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故调查列表 + * + * @param bo 查询条件 + * @return 安全-事故调查列表 + */ + List queryList(HseSafetySgdcBo bo); + + /** + * 新增安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgdcBo bo); + + /** + * 修改安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgdcBo bo); + + /** + * 校验并批量删除安全-事故调查信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java new file mode 100644 index 00000000..ed332757 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java @@ -0,0 +1,78 @@ +package org.dromara.safety.accident.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; + +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故上报Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgsbService extends IService{ + + /** + * 查询安全-事故上报 + * + * @param id 主键 + * @return 安全-事故上报 + */ + HseSafetySgsbVo queryById(Long id); + + /** + * 分页查询安全-事故上报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故上报分页列表 + */ + TableDataInfo queryPageList(HseSafetySgsbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故上报列表 + * + * @param bo 查询条件 + * @return 安全-事故上报列表 + */ + List queryList(HseSafetySgsbBo bo); + + /** + * 新增安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgsbBo bo); + + /** + * 修改安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgsbBo bo); + + /** + * 校验并批量删除安全-事故上报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取统计信息 + * @param projectId + * @return + */ + SgsbCountVo getCount(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java new file mode 100644 index 00000000..b4a9a910 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java @@ -0,0 +1,96 @@ +package org.dromara.safety.accident.service; + +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故整改闭环Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgzgbhService extends IService{ + + /** + * 查询安全-事故整改闭环 + * + * @param id 主键 + * @return 安全-事故整改闭环 + */ + HseSafetySgzgbhVo queryById(Long id); + + /** + * 分页查询安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故整改闭环分页列表 + */ + TableDataInfo queryPageList(HseSafetySgzgbhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @return 安全-事故整改闭环列表 + */ + List queryList(HseSafetySgzgbhBo bo); + + /** + * 新增安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgzgbhBo bo); + + /** + * 修改安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgzgbhBo bo); + + /** + * 校验并批量删除安全-事故整改闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 新增整改信息 + * + * @param bo + * @return + */ + Boolean addZGxx(HseSafetyZgxxBo bo); + + /** + * 新增复查信息 + * @param bo + * @return + */ + Boolean addFCxx(HseSafetyFcxxBo bo); + + /** + * 查询头部信息 + * @param bo + * @return + */ + HseSafetySgzgbhHeadVo getListHead(HseSafetySgzgbhBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java new file mode 100644 index 00000000..95277a7f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java @@ -0,0 +1,77 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全事故整改信息Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetyZgxxService extends IService{ + + /** + * 查询安全事故整改信息 + * + * @param id 主键 + * @return 安全事故整改信息 + */ + HseSafetyZgxxVo queryById(Long id); + + /** + * 分页查询安全事故整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故整改信息分页列表 + */ + TableDataInfo queryPageList(HseSafetyZgxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全事故整改信息列表 + * + * @param bo 查询条件 + * @return 安全事故整改信息列表 + */ + List queryList(HseSafetyZgxxBo bo); + + /** + * 新增安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetyZgxxBo bo); + + /** + * 修改安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetyZgxxBo bo); + + /** + * 校验并批量删除安全事故整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过主数据id获取整改记录列表 + * @param id + * @return + */ + List getZGBGInfoVoByIdList(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java new file mode 100644 index 00000000..eec03625 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.safety.accident.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.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.safety.accident.mapper.HseSafetyFcxxMapper; +import org.dromara.safety.accident.service.IHseSafetyFcxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全事故复查信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetyFcxxServiceImpl extends ServiceImpl implements IHseSafetyFcxxService { + + private final HseSafetyFcxxMapper baseMapper; + + /** + * 查询安全事故复查信息 + * + * @param id 主键 + * @return 安全事故复查信息 + */ + @Override + public HseSafetyFcxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全事故复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故复查信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetyFcxxBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全事故复查信息列表 + * + * @param bo 查询条件 + * @return 安全事故复查信息列表 + */ + @Override + public List queryList(HseSafetyFcxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetyFcxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetyFcxx::getId); + lqw.eq(bo.getMasterId() != null, HseSafetyFcxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getZgId() != null, HseSafetyFcxx::getZgId, bo.getZgId()); + lqw.eq(bo.getReview() != null, HseSafetyFcxx::getReview, bo.getReview()); + lqw.eq(bo.getReviewDate() != null, HseSafetyFcxx::getReviewDate, bo.getReviewDate()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinion()), HseSafetyFcxx::getReviewOpinion, bo.getReviewOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), HseSafetyFcxx::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getNotPassCause()), HseSafetyFcxx::getNotPassCause, bo.getNotPassCause()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinionParticulars()), HseSafetyFcxx::getReviewOpinionParticulars, bo.getReviewOpinionParticulars()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseSafetyFcxx::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), HseSafetyFcxx::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetyFcxxBo bo) { + HseSafetyFcxx add = MapstructUtils.convert(bo, HseSafetyFcxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetyFcxxBo bo) { + HseSafetyFcxx update = MapstructUtils.convert(bo, HseSafetyFcxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetyFcxx entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全事故复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseSafetyFcxxVo getInfoVoById(Long id) { + return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(HseSafetyFcxx::getZgId, id)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java new file mode 100644 index 00000000..21da4595 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java @@ -0,0 +1,147 @@ +package org.dromara.safety.accident.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.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.safety.accident.mapper.HseSafetySgdanjlMapper; +import org.dromara.safety.accident.service.IHseSafetySgdanjlService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故档案记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgdanjlServiceImpl extends ServiceImpl implements IHseSafetySgdanjlService { + + private final HseSafetySgdanjlMapper baseMapper; + + /** + * 查询安全-事故档案记录 + * + * @param id 主键 + * @return 安全-事故档案记录 + */ + @Override + public HseSafetySgdanjlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-事故档案记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故档案记录分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgdanjlBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故档案记录列表 + * + * @param bo 查询条件 + * @return 安全-事故档案记录列表 + */ + @Override + public List queryList(HseSafetySgdanjlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgdanjlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgdanjl::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDanbh()), HseSafetySgdanjl::getDanbh, bo.getDanbh()); + lqw.eq(StringUtils.isNotBlank(bo.getProject()), HseSafetySgdanjl::getProject, bo.getProject()); + lqw.eq(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgdanjl::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgdanjl::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgdanjl::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgdanjl::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgdanjl::getSgdj, bo.getSgdj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgdanjl::getSgyy, bo.getSgyy()); + lqw.eq(StringUtils.isNotBlank(bo.getSgxq()), HseSafetySgdanjl::getSgxq, bo.getSgxq()); + lqw.eq(StringUtils.isNotBlank(bo.getDcxq()), HseSafetySgdanjl::getDcxq, bo.getDcxq()); + lqw.eq(StringUtils.isNotBlank(bo.getZgfcxq()), HseSafetySgdanjl::getZgfcxq, bo.getZgfcxq()); + lqw.eq(StringUtils.isNotBlank(bo.getDanglr()), HseSafetySgdanjl::getDanglr, bo.getDanglr()); + lqw.eq(StringUtils.isNotBlank(bo.getStorageLife()), HseSafetySgdanjl::getStorageLife, bo.getStorageLife()); + lqw.eq(StringUtils.isNotBlank(bo.getDzdanccwz()), HseSafetySgdanjl::getDzdanccwz, bo.getDzdanccwz()); + lqw.eq(StringUtils.isNotBlank(bo.getZzdancfwz()), HseSafetySgdanjl::getZzdancfwz, bo.getZzdancfwz()); + lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), HseSafetySgdanjl::getRemarks, bo.getRemarks()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgdanjl::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgdanjlBo bo) { + HseSafetySgdanjl add = MapstructUtils.convert(bo, HseSafetySgdanjl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgdanjlBo bo) { + HseSafetySgdanjl update = MapstructUtils.convert(bo, HseSafetySgdanjl.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgdanjl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故档案记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java new file mode 100644 index 00000000..e35dc5b9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java @@ -0,0 +1,155 @@ +package org.dromara.safety.accident.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.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.mapper.HseSafetySgdcMapper; +import org.dromara.safety.accident.service.IHseSafetySgdcService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故调查Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgdcServiceImpl extends ServiceImpl implements IHseSafetySgdcService { + + private final HseSafetySgdcMapper baseMapper; + + /** + * 查询安全-事故调查 + * + * @param id 主键 + * @return 安全-事故调查 + */ + @Override + public HseSafetySgdcVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-事故调查列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故调查分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgdcBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故调查列表 + * + * @param bo 查询条件 + * @return 安全-事故调查列表 + */ + @Override + public List queryList(HseSafetySgdcBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgdcBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgdc::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDcbh()), HseSafetySgdc::getDcbh, bo.getDcbh()); + lqw.eq(bo.getSgId() != null, HseSafetySgdc::getSgId, bo.getSgId()); + lqw.eq(StringUtils.isNotBlank(bo.getDcxz()), HseSafetySgdc::getDcxz, bo.getDcxz()); + lqw.eq(bo.getDckssj() != null, HseSafetySgdc::getDckssj, bo.getDckssj()); + lqw.eq(bo.getDcjssj() != null, HseSafetySgdc::getDcjssj, bo.getDcjssj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgxxjg()), HseSafetySgdc::getSgxxjg, bo.getSgxxjg()); + lqw.eq(StringUtils.isNotBlank(bo.getZjjy()), HseSafetySgdc::getZjjy, bo.getZjjy()); + lqw.eq(StringUtils.isNotBlank(bo.getJjyy()), HseSafetySgdc::getJjyy, bo.getJjyy()); + lqw.eq(StringUtils.isNotBlank(bo.getZjcl()), HseSafetySgdc::getZjcl, bo.getZjcl()); + lqw.eq(bo.getZrbm() != null, HseSafetySgdc::getZrbm, bo.getZrbm()); + lqw.eq(bo.getZyfzr() != null, HseSafetySgdc::getZyfzr, bo.getZyfzr()); + lqw.eq(bo.getCyfzr() != null, HseSafetySgdc::getCyfzr, bo.getCyfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getZrhf()), HseSafetySgdc::getZrhf, bo.getZrhf()); + lqw.eq(StringUtils.isNotBlank(bo.getZrrdsm()), HseSafetySgdc::getZrrdsm, bo.getZrrdsm()); + lqw.eq(StringUtils.isNotBlank(bo.getZgcsnr()), HseSafetySgdc::getZgcsnr, bo.getZgcsnr()); + lqw.eq(StringUtils.isNotBlank(bo.getZgfzrType()), HseSafetySgdc::getZgfzrType, bo.getZgfzrType()); + lqw.eq(bo.getZgfzr() != null, HseSafetySgdc::getZgfzr, bo.getZgfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getZgyxj()), HseSafetySgdc::getZgyxj, bo.getZgyxj()); + lqw.eq(bo.getZgsx() != null, HseSafetySgdc::getZgsx, bo.getZgsx()); + lqw.eq(bo.getFcry() != null, HseSafetySgdc::getFcry, bo.getFcry()); + lqw.eq(StringUtils.isNotBlank(bo.getZgysbz()), HseSafetySgdc::getZgysbz, bo.getZgysbz()); + lqw.eq(StringUtils.isNotBlank(bo.getClyj()), HseSafetySgdc::getClyj, bo.getClyj()); + lqw.eq(bo.getDcfzr() != null, HseSafetySgdc::getDcfzr, bo.getDcfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseSafetySgdc::getFile, bo.getFile()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgdc::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgdcBo bo) { + HseSafetySgdc add = MapstructUtils.convert(bo, HseSafetySgdc.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgdcBo bo) { + HseSafetySgdc update = MapstructUtils.convert(bo, HseSafetySgdc.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgdc entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故调查信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java new file mode 100644 index 00000000..c6430c38 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java @@ -0,0 +1,302 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.mapper.HseSafetySgsbMapper; +import org.dromara.safety.accident.menu.SGStatusEnum; +import org.dromara.safety.accident.service.IHseSafetySgsbService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.impl.SysUserServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.TemporalAdjusters; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 安全-事故上报Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgsbServiceImpl extends ServiceImpl implements IHseSafetySgsbService { + + private final HseSafetySgsbMapper baseMapper; + @Autowired + private SysUserServiceImpl sysUserService; +// @Autowired +// private HseSafetyZgxxServiceImpl zgxxService; + @Autowired + private HseSafetySgdcServiceImpl sgdcService; + @Autowired + private HseSafetySgzgbhServiceImpl sgzgbhService; + + /** + * 查询安全-事故上报 + * + * @param id 主键 + * @return 安全-事故上报 + */ + @Override + public HseSafetySgsbVo queryById(Long id){ + HseSafetySgsbVo hseSafetySgsbVo = baseMapper.selectVoById(id); + if (hseSafetySgsbVo != null) { + List hseSafetySgsbVo1 = List.of(hseSafetySgsbVo); + setValue(hseSafetySgsbVo1); + return hseSafetySgsbVo1.getFirst(); + }else { + return null; + } + } + + /** + * 分页查询安全-事故上报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故上报分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgsbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + setValue(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故上报列表 + * + * @param bo 查询条件 + * @return 安全-事故上报列表 + */ + @Override + public List queryList(HseSafetySgsbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgsbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgsb::getId); + lqw.eq(bo.getProjectId() != null, HseSafetySgsb::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgsb::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgsb::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgsb::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgsb::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgsb::getSgdj, bo.getSgdj()); + lqw.eq(bo.getSwrs() != null, HseSafetySgsb::getSwrs, bo.getSwrs()); + lqw.eq(bo.getZsrs() != null, HseSafetySgsb::getZsrs, bo.getZsrs()); + lqw.eq(bo.getQsrs() != null, HseSafetySgsb::getQsrs, bo.getQsrs()); + lqw.eq(StringUtils.isNotBlank(bo.getRyxx()), HseSafetySgsb::getRyxx, bo.getRyxx()); + lqw.eq(bo.getCbgs() != null, HseSafetySgsb::getCbgs, bo.getCbgs()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgsb::getSgyy, bo.getSgyy()); + lqw.eq(StringUtils.isNotBlank(bo.getLxfs()), HseSafetySgsb::getLxfs, bo.getLxfs()); + lqw.eq(StringUtils.isNotBlank(bo.getSbqd()), HseSafetySgsb::getSbqd, bo.getSbqd()); + lqw.eq(bo.getJsr() != null, HseSafetySgsb::getJsr, bo.getJsr()); + lqw.eq(StringUtils.isNotBlank(bo.getJjcs()), HseSafetySgsb::getJjcs, bo.getJjcs()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseSafetySgsb::getFile, bo.getFile()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgsb::getShzt, bo.getShzt()); + lqw.eq(StringUtils.isNotBlank(bo.getSgzt()), HseSafetySgsb::getSgzt, bo.getSgzt()); + return lqw; + } + + /** + * 新增安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgsbBo bo) { + HseSafetySgsb add = MapstructUtils.convert(bo, HseSafetySgsb.class); + add.setSgzt(SGStatusEnum.REPORTED.getCode()); + add.setSgbh(BatchNumberGenerator.generateBatchNumber("SGBH-")); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + addDcxx( bo); + return flag; + } + + /** + * 修改安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgsbBo bo) { + HseSafetySgsb update = MapstructUtils.convert(bo, HseSafetySgsb.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgsb entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故上报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 获取统计信息 + */ + @Override + public SgsbCountVo getCount(Long projectId){ + //获取对应列表 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(HseSafetySgsb::getProjectId, projectId); + List list = this.list(lambdaQueryWrapper); + //获取整改对应列表 + List zgxxes = sgzgbhService.list(); + //获取调查列表 + List dcList = sgdcService.list(); + //初始化统计信息 + SgsbCountVo sgsbCountVo = new SgsbCountVo(); + sgsbCountVo.setSgzgwcl(BigDecimal.ZERO); + + long sbsg = 0; + long dclsg = 0; + long ybhsg = 0; + long zgwc = 0; + //获取时间 + Date firstDay = getFirstDayOfMonth(); + Date lastDay = getLastDayOfMonth(); + for (HseSafetySgsb hseSafetySgsb : list) { + //本月上报事故 + if (hseSafetySgsb.getCreateTime().after(firstDay) && hseSafetySgsb.getCreateTime().before(lastDay)){ + sbsg++; + //本月完成数量 + for (HseSafetySgdc safetySgdc : dcList) { + if (hseSafetySgsb.getId() == safetySgdc.getSgId()){ + //事故找到 调查 调查寻找整改 + for (HseSafetySgzgbh zgxx : zgxxes) { + if (zgxx.getSgId() == safetySgdc.getId()){ + //如果调查找到了整改 则查看状态 + if (zgxx.getIsFinish().equals("1") || zgxx.getIsFinish().equals("3")){ + zgwc++; + break; + } + } + } + break; + } + } + } + //待处理事故 新增后为已上报 审核通过后向调查新增 状态为草稿 原数据状态改为待调查 + if (hseSafetySgsb.getSgzt().equals(SGStatusEnum.REPORTED.getCode())){ + dclsg++; + } + //已闭环事故 + if (hseSafetySgsb.getSgzt().equals(SGStatusEnum.CLOSED_LOOP_OPERATION.getCode())){ + ybhsg++; + } + } + sgsbCountVo.setBysbsg(sbsg); + sgsbCountVo.setDclsg(dclsg); + sgsbCountVo.setYbhsg(ybhsg); + + BigDecimal wcl; + if (sbsg == 0){ + wcl = BigDecimal.ZERO; + }else { + wcl = new BigDecimal(zgwc).divide(new BigDecimal(sbsg), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); + } + sgsbCountVo.setSgzgwcl(wcl); + + return sgsbCountVo; + } + + /** + * 装填信息 + */ + public void setValue(List vos){ + for (HseSafetySgsbVo vo : vos) { + if (vo.getJsr() != null){ + SysUserVo sysUserVo = sysUserService.selectUserById(vo.getJsr()); + if (sysUserVo != null){ + vo.setJsrmc(sysUserVo.getNickName()); + } + } + } + } + + /** + * 获取本月第一天 + * @return 本月第一天的Date对象 + */ + public static Date getFirstDayOfMonth() { + LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); + return Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + /** + * 获取本月最后一天 + * @return 本月最后一天的Date对象 + */ + public static Date getLastDayOfMonth() { + LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); + return Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + } + + /** + * 对调查进行新增一条数据 有审核后放在审核后进行 现在放在新增里 + */ + public void addDcxx(HseSafetySgsbBo bo){ + HseSafetySgdcBo dcBo = new HseSafetySgdcBo(); + dcBo.setDcbh(BatchNumberGenerator.generateBatchNumber("SGDC-")); + dcBo.setSgId(bo.getId()); + dcBo.setBczt("0"); + sgdcService.insertByBo(dcBo); + //更新事故上报的状态 + HseSafetySgsb byId = getById(bo.getId()); + if (byId != null){ + byId.setSgzt(SGStatusEnum.UNDER_INVESTIGATION.getCode()); + updateById(byId); + } + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java new file mode 100644 index 00000000..752053ab --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java @@ -0,0 +1,282 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +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; +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.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.project.domain.vo.project.BusProjectVo; +import org.dromara.project.service.IBusProjectService; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.safety.accident.menu.SGStatusEnum; +import org.dromara.safety.accident.service.*; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.mapper.HseSafetySgzgbhMapper; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故整改闭环Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgzgbhServiceImpl extends ServiceImpl implements IHseSafetySgzgbhService { + + private final HseSafetySgzgbhMapper baseMapper; + @Resource + private IHseSafetyZgxxService zgxxService; + @Resource + private IHseSafetyFcxxService fcxxService; + @Lazy + @Resource + private IHseSafetySgsbService sgsbService; + @Lazy + @Resource + private IHseSafetySgdanjlService sgdanjlService; + @Lazy + @Resource + private IBusProjectService projectService; + + /** + * 查询安全-事故整改闭环 + * + * @param id 主键 + * @return 安全-事故整改闭环 + */ + @Override + public HseSafetySgzgbhVo queryById(Long id){ + HseSafetySgzgbhVo vo = baseMapper.selectVoById(id); + if (null != vo){ + List zgxxVos =zgxxService.getZGBGInfoVoByIdList(vo.getId()); + if(!zgxxVos.isEmpty()){ + vo.setZgxxVos(zgxxVos); + } + } + return vo; + } + + /** + * 分页查询安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故整改闭环分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgzgbhBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @return 安全-事故整改闭环列表 + */ + @Override + public List queryList(HseSafetySgzgbhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgzgbhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgzgbh::getId); + lqw.eq(StringUtils.isNotBlank(bo.getZgbhbh()), HseSafetySgzgbh::getZgbhbh, bo.getZgbhbh()); + lqw.eq(bo.getProjectId() != null, HseSafetySgzgbh::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgzgbh::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgzgbh::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgzgbh::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgzgbh::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgzgbh::getSgdj, bo.getSgdj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgzgbh::getSgyy, bo.getSgyy()); + lqw.eq(bo.getJsr() != null, HseSafetySgzgbh::getJsr, bo.getJsr()); + lqw.eq(bo.getSbr() != null, HseSafetySgzgbh::getSbr, bo.getSbr()); + lqw.eq(bo.getSbsj() != null, HseSafetySgzgbh::getSbsj, bo.getSbsj()); + lqw.eq(StringUtils.isNotBlank(bo.getZgStatus()), HseSafetySgzgbh::getZgStatus, bo.getZgStatus()); + lqw.eq(bo.getZgr() != null, HseSafetySgzgbh::getZgr, bo.getZgr()); + lqw.eq(StringUtils.isNotBlank(bo.getFcStatus()), HseSafetySgzgbh::getFcStatus, bo.getFcStatus()); + lqw.eq(bo.getFcr() != null, HseSafetySgzgbh::getFcr, bo.getFcr()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewStatus()), HseSafetySgzgbh::getReviewStatus, bo.getReviewStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgzgbh::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgzgbhBo bo) { + HseSafetySgzgbh add = MapstructUtils.convert(bo, HseSafetySgzgbh.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgzgbhBo bo) { + HseSafetySgzgbh update = MapstructUtils.convert(bo, HseSafetySgzgbh.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgzgbh entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故整改闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 新增整改信息 + * + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addZGxx(HseSafetyZgxxBo bo) { + HseSafetySgzgbh sgzgbh = baseMapper.selectById(bo.getId()); + if(sgzgbh == null){ + throw new ServiceException("找不到整改与闭环信息数据!!!"); + } + if (SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(sgzgbh.getReviewStatus())){ + throw new ServiceException("已闭环,不需要再新增整改信息"); + } + if (!SGStatusEnum.TO_BE_RECTIFIED.getCode().equals(sgzgbh.getZgStatus())){ + throw new ServiceException("已整改,不需要再新增整改信息"); + } + HseSafetySgsb hseSafetySgsb = sgsbService.getBaseMapper().selectById(sgzgbh.getSgId()); + if (hseSafetySgsb == null){ + throw new ServiceException("找不到事故信息"); + } + hseSafetySgsb.setSgzt(SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode()); + sgsbService.getBaseMapper().updateById(hseSafetySgsb); + //保存整改信息 + Boolean b = zgxxService.insertByBo(bo); + //主数据修改整改状态 + sgzgbh.setZgStatus(SGStatusEnum.HAS_BEEN_RECTIFIED.getCode()); + baseMapper.updateById(sgzgbh); + return b; + } + + /** + * 新增复查信息 + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addFCxx(HseSafetyFcxxBo bo) { + HseSafetySgzgbh sgzgbh = baseMapper.selectById(bo.getId()); + if(sgzgbh == null){ + throw new ServiceException("找不到整改与闭环信息数据!!!"); + } + if (SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(sgzgbh.getReviewStatus())){ + throw new ServiceException("已闭环,不需要再新增复查信息"); + } + if (!SGStatusEnum.HAS_BEEN_RECTIFIED.getCode().equals(sgzgbh.getZgStatus())){ + throw new ServiceException("未整改,不能添加复查信息"); + } + HseSafetySgsb hseSafetySgsb = sgsbService.getBaseMapper().selectById(sgzgbh.getSgId()); + if (hseSafetySgsb == null){ + throw new ServiceException("找不到事故信息"); + } + Boolean b = fcxxService.insertByBo(bo); + //修改主数据整改状态合复查状态 + sgzgbh.setFcStatus(bo.getReviewState()); + if (SGStatusEnum.PASS.getCode().equals(bo.getReviewState())){ + sgzgbh.setReviewStatus(SGStatusEnum.CLOSED_LOOP_OPERATION.getCode()); + hseSafetySgsb.setSgzt(SGStatusEnum.SG_CLOSED_LOOP_OPERATION.getCode()); + HseSafetySgdanjlBo sgdanjlBo = new HseSafetySgdanjlBo(); + String banBen = BatchNumberGenerator.generateBatchNumber("ANQSGDANJL-"); + sgdanjlBo.setDanbh(banBen); + BusProjectVo projectVo = projectService.selectById(hseSafetySgsb.getProjectId()); + if (projectVo != null){ + sgdanjlBo.setProject(projectVo.getProjectName()); + } + sgdanjlBo.setSgbh(hseSafetySgsb.getSgbh()); + sgdanjlBo.setSfsj(hseSafetySgsb.getSfsj()); + sgdanjlBo.setSfdd(hseSafetySgsb.getSfdd()); + sgdanjlBo.setSgdj(hseSafetySgsb.getSgdj()); + sgdanjlBo.setSgyy(hseSafetySgsb.getSgyy()); + + + }else { + hseSafetySgsb.setSgzt(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode()); + sgzgbh.setZgStatus(SGStatusEnum.TO_BE_RECTIFIED.getCode()); + } + sgsbService.getBaseMapper().updateById(hseSafetySgsb); + baseMapper.updateById(sgzgbh); + return b; + } + + @Override + public HseSafetySgzgbhHeadVo getListHead(HseSafetySgzgbhBo bo) { + HseSafetySgzgbhHeadVo sgzgbhHeadVo = new HseSafetySgzgbhHeadVo(); + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(HseSafetySgzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgzgbh::getCreateTime, LocalDate.now().minusDays(29))); + if ( sgzgbhs != null && !sgzgbhs.isEmpty()) { + sgzgbhHeadVo.setZs((long) sgzgbhs.size()); + sgzgbhHeadVo.setDzg(sgzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getZgStatus().equals(SGStatusEnum.TO_BE_RECTIFIED.getCode())).count()); + sgzgbhHeadVo.setDys(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.HAS_BEEN_RECTIFIED.getCode().equals(jxYhzgbh.getZgStatus()) && SGStatusEnum.OPEN_LOOP.getCode().equals(jxYhzgbh.getReviewStatus())).count()); + sgzgbhHeadVo.setYbh(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(jxYhzgbh.getReviewStatus())).count()); + } + return sgzgbhHeadVo; + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java new file mode 100644 index 00000000..8a1572b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java @@ -0,0 +1,158 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +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.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.service.IHseSafetyFcxxService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.safety.accident.mapper.HseSafetyZgxxMapper; +import org.dromara.safety.accident.service.IHseSafetyZgxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全事故整改信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetyZgxxServiceImpl extends ServiceImpl implements IHseSafetyZgxxService { + + private final HseSafetyZgxxMapper baseMapper; + + @Lazy + @Resource + private IHseSafetyFcxxService fcxxService; + + /** + * 查询安全事故整改信息 + * + * @param id 主键 + * @return 安全事故整改信息 + */ + @Override + public HseSafetyZgxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全事故整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故整改信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetyZgxxBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全事故整改信息列表 + * + * @param bo 查询条件 + * @return 安全事故整改信息列表 + */ + @Override + public List queryList(HseSafetyZgxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetyZgxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetyZgxx::getId); + lqw.eq(bo.getMasterId() != null, HseSafetyZgxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getAbarbeitung() != null, HseSafetyZgxx::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungKsdate() != null, HseSafetyZgxx::getAbarbeitungKsdate, bo.getAbarbeitungKsdate()); + lqw.eq(bo.getAbarbeitungJsdate() != null, HseSafetyZgxx::getAbarbeitungJsdate, bo.getAbarbeitungJsdate()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungMeasure()), HseSafetyZgxx::getAbarbeitungMeasure, bo.getAbarbeitungMeasure()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungAccomplish()), HseSafetyZgxx::getAbarbeitungAccomplish, bo.getAbarbeitungAccomplish()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseSafetyZgxx::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), HseSafetyZgxx::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetyZgxxBo bo) { + HseSafetyZgxx add = MapstructUtils.convert(bo, HseSafetyZgxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetyZgxxBo bo) { + HseSafetyZgxx update = MapstructUtils.convert(bo, HseSafetyZgxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetyZgxx entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全事故整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public List getZGBGInfoVoByIdList(Long id) { + List zgxxVos = baseMapper.selectVoList(new LambdaQueryWrapper().eq(HseSafetyZgxx::getMasterId, id)); + if (zgxxVos != null && !zgxxVos.isEmpty()) { + zgxxVos.forEach(vo -> { + HseSafetyFcxxVo fcxxVo= fcxxService.getInfoVoById(vo.getId()); + vo.setFcxxVo(fcxxVo); + }); + } + return zgxxVos; + } +} 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 new file mode 100644 index 00000000..5b6efca6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java @@ -0,0 +1,212 @@ +package org.dromara.safety.controller; + +import java.util.List; + +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.domain.dto.projectteammember.BusProjectTeamMemberQueryReq; +import org.dromara.project.domain.vo.projectteammember.BusProjectTeamMemberVo; +import org.dromara.project.service.IBusProjectTeamMemberService; +import org.dromara.project.service.IBusProjectTeamService; +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.dromara.system.domain.SysUser; +import org.dromara.system.service.ISysUserService; +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.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 隐患信息 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/hiddenDanger") +public class HazardHiddenDangerController extends BaseController { + + private final IHazardHiddenDangerService hazardHiddenDangerService; + + private final IHazardRuleService hazardRuleService; + + private final ISubContractorService contractorService; + + private final ISysUserService userService; + + private final IBusProjectTeamService projectTeamService; + + private final IBusProjectTeamMemberService projectTeamMemberService; + + /** + * 查询隐患信息列表 + */ + @SaCheckPermission("safety:hiddenDanger:list") + @GetMapping("/list") + public TableDataInfo list(HazardHiddenDangerBo bo, PageQuery pageQuery) { + return hazardHiddenDangerService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患信息列表 + */ + @SaCheckPermission("safety:hiddenDanger:export") + @Log(title = "隐患信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardHiddenDangerBo bo, HttpServletResponse response) { + List list = hazardHiddenDangerService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患信息", HazardHiddenDangerVo.class, response); + } + + /** + * 获取隐患信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:hiddenDanger:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hazardHiddenDangerService.queryById(id)); + } + + /** + * 新增隐患信息 + */ + @SaCheckPermission("safety:hiddenDanger:add") + @Log(title = "隐患信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardHiddenDangerBo bo) { + return toAjax(hazardHiddenDangerService.insertByBo(bo)); + } + + /** + * 修改隐患信息 + */ + @SaCheckPermission("safety:hiddenDanger:edit") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HazardHiddenDangerBo bo) { + return toAjax(hazardHiddenDangerService.updateByBo(bo)); + } + + /** + * 删除隐患信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:hiddenDanger:remove") + @Log(title = "隐患信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @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:evaluate") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/evaluate") + public R evaluate(@RequestBody EvaluateDto dto) { + return toAjax(hazardHiddenDangerService.evaluate(dto)); + } + + + /** + * 分包单位列表 + * @param projectId 项目ID + */ + @GetMapping("/contractorList") + public R> contractorList(Long projectId) { + List list = contractorService.lambdaQuery() + .select(SubContractor::getId, SubContractor::getName) + .eq(SubContractor::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 分包人员列表 + * @param contractorId 分包ID + */ + @GetMapping("/contractorUserList") + public R> contractorUserList(Long contractorId) { + List sysUsers = userService.selectUserListByContractorId(contractorId); + return R.ok(sysUsers); + } + + /** + * 班组列表 + * @param projectId 项目ID + */ + @GetMapping("/teamList") + public R> teamList(Long projectId) { + List list = projectTeamService.lambdaQuery() + .select(BusProjectTeam::getId, BusProjectTeam::getTeamName) + .eq(BusProjectTeam::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 班组长列表 + * @param teamId 班组ID + */ + @GetMapping("/teamUserList") + public R> teamUserList(Long teamId) { + BusProjectTeamMemberQueryReq req = new BusProjectTeamMemberQueryReq(); + req.setTeamId(teamId); + req.setPostId("1"); + List busProjectTeamMemberVos = projectTeamMemberService.queryList(req); + return R.ok(busProjectTeamMemberVos); + } + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java new file mode 100644 index 00000000..0ffad25e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java @@ -0,0 +1,120 @@ +package org.dromara.safety.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 隐患整改情况 + * + * @author lilemy + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/hiddenDangerRectify") +public class HazardHiddenDangerRectifyController extends BaseController { + + private final IHazardHiddenDangerRectifyService hazardHiddenDangerRectifyService; + + /** + * 查询隐患整改情况列表 + */ + @SaCheckPermission("safety:hiddenDangerRectify:list") + @GetMapping("/list") + public TableDataInfo list(HazardHiddenDangerBo bo, PageQuery pageQuery) { + return hazardHiddenDangerRectifyService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患整改情况列表 + */ + @SaCheckPermission("safety:hiddenDangerRectify:export") + @Log(title = "隐患整改情况", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardHiddenDangerRectifyBo bo, HttpServletResponse response) { + List list = hazardHiddenDangerRectifyService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患整改情况", HazardHiddenDangerRectifyVo.class, response); + } + + /** + * 获取隐患整改情况详细信息 + * + * @param hiddenDangerId 主键 + */ + @SaCheckPermission("safety:hiddenDangerRectify:query") + @GetMapping("/{hiddenDangerId}") + public R getInfo(@NotNull(message = "隐患主键不能为空") + @PathVariable Long hiddenDangerId) { + return R.ok(hazardHiddenDangerRectifyService.queryById(hiddenDangerId)); + } + + /** + * 新增隐患整改情况 + */ + @SaCheckPermission("safety:hiddenDangerRectify:add") + @Log(title = "隐患整改情况", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardHiddenDangerRectifyBo bo) { + return toAjax(hazardHiddenDangerRectifyService.insertByBo(bo)); + } + + /** + * 隐患整改 + */ + @SaCheckPermission("safety:hiddenDangerRectify:edit") + @Log(title = "隐患整改情况", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/rectification") + public R rectification(@Validated @RequestBody HazardHiddenDangerRectifyRectificationReq req) { + return toAjax(hazardHiddenDangerRectifyService.rectification(req)); + } + + /** + * 隐患复查 + */ + @SaCheckPermission("safety:hiddenDangerRectify:edit") + @Log(title = "隐患整改情况", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/review") + public R review(@Validated @RequestBody HazardHiddenDangerRectifyReviewReq req) { + return toAjax(hazardHiddenDangerRectifyService.review(req)); + } + + /** + * 删除隐患整改情况 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:hiddenDangerRectify:remove") + @Log(title = "隐患整改情况", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hazardHiddenDangerRectifyService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java new file mode 100644 index 00000000..b109175d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java @@ -0,0 +1,106 @@ +package org.dromara.safety.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 隐患分级通知规则 + * + * @author lilemy + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rule") +public class HazardRuleController extends BaseController { + + private final IHazardRuleService hazardRuleService; + + /** + * 查询隐患分级通知规则列表 + */ + @SaCheckPermission("safety:rule:list") + @GetMapping("/list") + public TableDataInfo list(HazardRuleBo bo, PageQuery pageQuery) { + return hazardRuleService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患分级通知规则列表 + */ + @SaCheckPermission("safety:rule:export") + @Log(title = "隐患分级通知规则", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardRuleBo bo, HttpServletResponse response) { + List list = hazardRuleService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患分级通知规则", HazardRuleVo.class, response); + } + + /** + * 获取隐患分级通知规则详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:rule:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hazardRuleService.queryById(id)); + } + + /** + * 新增隐患分级通知规则 + */ + @SaCheckPermission("safety:rule:add") + @Log(title = "隐患分级通知规则", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardRuleBo bo) { + return toAjax(hazardRuleService.insertByBo(bo)); + } + + /** + * 修改隐患分级通知规则 + */ + @SaCheckPermission("safety:rule:edit") + @Log(title = "隐患分级通知规则", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HazardRuleBo bo) { + return toAjax(hazardRuleService.updateByBo(bo)); + } + + /** + * 删除隐患分级通知规则 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rule:remove") + @Log(title = "隐患分级通知规则", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hazardRuleService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java new file mode 100644 index 00000000..6571c294 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java @@ -0,0 +1,116 @@ +package org.dromara.safety.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.vo.HseJsjdYuJkjcVo; +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.domain.vo.HseDangerArchiveVo; +import org.dromara.safety.domain.bo.HseDangerArchiveBo; +import org.dromara.safety.service.IHseDangerArchiveService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程档案 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/dangerArchive") +public class HseDangerArchiveController extends BaseController { + + private final IHseDangerArchiveService hseDangerArchiveService; + + /** + * 查询危大工程档案列表 + */ + @SaCheckPermission("safety:dangerArchive:list") + @GetMapping("/list") + public TableDataInfo list(HseDangerArchiveBo bo, PageQuery pageQuery) { + return hseDangerArchiveService.queryPageList(bo, pageQuery); + } + + + /** + * 查询技术交底和过程监控文件 + * @param id 危大工程id + */ + @GetMapping("/getJsjdYGcjk/{id}") + public R list(@PathVariable Long id) { + return R.ok(hseDangerArchiveService.getJsjdYGcjk(id)); + } + + /** + * 导出危大工程档案列表 + */ + @SaCheckPermission("safety:dangerArchive:export") + @Log(title = "危大工程档案", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseDangerArchiveBo bo, HttpServletResponse response) { + List list = hseDangerArchiveService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程档案", HseDangerArchiveVo.class, response); + } + + /** + * 获取危大工程档案详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:dangerArchive:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseDangerArchiveService.queryById(id)); + } + + /** + * 新增危大工程档案 + */ + @SaCheckPermission("safety:dangerArchive:add") + @Log(title = "危大工程档案", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseDangerArchiveBo bo) { + return toAjax(hseDangerArchiveService.insertByBo(bo)); + } + + /** + * 修改危大工程档案 + */ + @SaCheckPermission("safety:dangerArchive:edit") + @Log(title = "危大工程档案", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseDangerArchiveBo bo) { + return toAjax(hseDangerArchiveService.updateByBo(bo)); + } + + /** + * 删除危大工程档案 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:dangerArchive:remove") + @Log(title = "危大工程档案", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseDangerArchiveService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java new file mode 100644 index 00000000..349b73f9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.controller; + +import java.lang.annotation.Target; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonGetter; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +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.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.service.IHseDangerousEngineeringService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程信息 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/dangerousEngineering") +public class HseDangerousEngineeringController extends BaseController { + + private final IHseDangerousEngineeringService hseDangerousEngineeringService; + + /** + * 查询危大工程信息列表 + */ + @SaCheckPermission("safety:dangerousEngineering:list") + @GetMapping("/list") + public TableDataInfo list(HseDangerousEngineeringBo bo, PageQuery pageQuery) { + return hseDangerousEngineeringService.queryPageList(bo, pageQuery); + } + + /** + * 导出危大工程信息列表 + */ + @SaCheckPermission("safety:dangerousEngineering:export") + @Log(title = "危大工程信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseDangerousEngineeringBo bo, HttpServletResponse response) { + List list = hseDangerousEngineeringService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程信息", HseDangerousEngineeringVo.class, response); + } + + /** + * 获取危大工程信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:dangerousEngineering:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseDangerousEngineeringService.queryById(id)); + } + + /** + * 新增危大工程信息 + */ + @SaCheckPermission("safety:dangerousEngineering:add") + @Log(title = "危大工程信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseDangerousEngineeringBo bo) { + return toAjax(hseDangerousEngineeringService.insertByBo(bo)); + } + + /** + * 修改危大工程信息 + */ + @SaCheckPermission("safety:dangerousEngineering:edit") + @Log(title = "危大工程信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseDangerousEngineeringBo bo) { + return toAjax(hseDangerousEngineeringService.updateByBo(bo)); + } + + /** + * 删除危大工程信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:dangerousEngineering:remove") + @Log(title = "危大工程信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseDangerousEngineeringService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 危大工程信息列表 + */ + @GetMapping("/engineeringList") + public R> engineerList(HseDangerousEngineeringBo bo) { + List list = hseDangerousEngineeringService.queryList(bo); + return R.ok(list); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java new file mode 100644 index 00000000..1f6b045a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java @@ -0,0 +1,210 @@ +package org.dromara.safety.controller; + +import java.util.List; +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.safety.domain.HseViolationRecord; +import org.dromara.safety.domain.dto.safetyinspection.HseSafetyInspectionQueryReq; +import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq; +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo; +import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; +import org.dromara.safety.service.IHseSafetyInspectionService; +import org.dromara.safety.service.IHseViolationRecordService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.service.ISysUserService; +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.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.service.IHseRewardsPunishmentsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 奖惩记录 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rewardsPunishments") +public class HseRewardsPunishmentsController extends BaseController { + + private final IHseRewardsPunishmentsService hseRewardsPunishmentsService; + + private final ISubContractorService contractorService; + + private final IBusProjectTeamService projectTeamService; + + private final ISubConstructionUserService constructionUserService; + + private final IHseSafetyInspectionService safetyInspectionService; + + private final IHseViolationRecordService hseViolationRecordService; + /** + * 查询奖惩记录列表 + */ + @SaCheckPermission("safety:rewardsPunishments:list") + @GetMapping("/list") + public TableDataInfo list(HseRewardsPunishmentsBo bo, PageQuery pageQuery) { + return hseRewardsPunishmentsService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖惩记录列表 + */ + @SaCheckPermission("safety:rewardsPunishments:export") + @Log(title = "奖惩记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseRewardsPunishmentsBo bo, HttpServletResponse response) { + List list = hseRewardsPunishmentsService.queryList(bo); + ExcelUtil.exportExcel(list, "奖惩记录", HseRewardsPunishmentsVo.class, response); + } + + /** + * 获取奖惩记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:rewardsPunishments:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseRewardsPunishmentsService.queryById(id)); + } + + /** + * 新增奖惩记录 + */ + @SaCheckPermission("safety:rewardsPunishments:add") + @Log(title = "奖惩记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseRewardsPunishmentsBo bo) { + return toAjax(hseRewardsPunishmentsService.insertByBo(bo)); + } + + /** + * 修改奖惩记录 + */ + @SaCheckPermission("safety:rewardsPunishments:edit") + @Log(title = "奖惩记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseRewardsPunishmentsBo bo) { + return toAjax(hseRewardsPunishmentsService.updateByBo(bo)); + } + + /** + * 删除奖惩记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rewardsPunishments:remove") + @Log(title = "奖惩记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseRewardsPunishmentsService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 金额统计 + */ + @GetMapping("/amountCount/{projectId}") + public R amountCount(@PathVariable Long projectId) { + return R.ok(hseRewardsPunishmentsService.amountCount(projectId)); + } + + /** + * 类型统计 + */ + @GetMapping("/typeCount/{projectId}") + public R> typeCount(@PathVariable Long projectId) { + return R.ok(hseRewardsPunishmentsService.typeCount(projectId)); + } + + + /** + * 分包单位列表 + * @param projectId 项目ID + */ + @GetMapping("/contractorList") + public R> contractorList(Long projectId) { + List list = contractorService.lambdaQuery() + .select(SubContractor::getId, SubContractor::getName) + .eq(SubContractor::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 班组列表 + * @param projectId 项目ID + */ + @GetMapping("/teamList") + public R> teamList(Long projectId) { + List list = projectTeamService.lambdaQuery() + .select(BusProjectTeam::getId, BusProjectTeam::getTeamName) + .eq(BusProjectTeam::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 施工人员列表 + * @param projectId 项目ID + */ + @GetMapping("/constructUserList") + public R> constructUserList(Long projectId) { + List list = constructionUserService.lambdaQuery() + .select(SubConstructionUser::getSysUserId, SubConstructionUser::getUserName) + .eq(SubConstructionUser::getProjectId, projectId) + .isNotNull(SubConstructionUser::getTeamId) + .eq(SubConstructionUser::getUserRole, "0") + .list(); + return R.ok(list); + } + + + /** + * 查询安全工单列表 + */ + @GetMapping("/safetyInspectionList") + public TableDataInfo safetyInspectionList(HseSafetyInspectionQueryReq req, PageQuery pageQuery) { + req.setCheckCorrectorNull(true); + return safetyInspectionService.queryPageListWeb(req, pageQuery); + } + + /** + * 查询AI工单列表 + */ + @GetMapping("/aiList") + public TableDataInfo aiList(HseViolationRecordQueryReq req, PageQuery pageQuery) { + req.setCheckCorrectorNull(true); + return hseViolationRecordService.queryPageList(req, pageQuery); + } + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java new file mode 100644 index 00000000..a249a26d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.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.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.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.service.IHseRpObjectService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 奖惩对象 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rpPerson") +public class HseRpObjectController extends BaseController { + + private final IHseRpObjectService hseRpPersonService; + + /** + * 查询奖惩对象列表 + */ + @SaCheckPermission("safety:rpPerson:list") + @GetMapping("/list") + public TableDataInfo list(HseRpObjectBo bo, PageQuery pageQuery) { + return hseRpPersonService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖惩对象列表 + */ + @SaCheckPermission("safety:rpPerson:export") + @Log(title = "奖惩对象", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseRpObjectBo bo, HttpServletResponse response) { + List list = hseRpPersonService.queryList(bo); + ExcelUtil.exportExcel(list, "奖惩对象", HseRpPersonVo.class, response); + } + + /** + * 获取奖惩对象详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:rpPerson:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseRpPersonService.queryById(id)); + } + + /** + * 新增奖惩对象 + */ + @SaCheckPermission("safety:rpPerson:add") + @Log(title = "奖惩对象", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseRpObjectBo bo) { + return toAjax(hseRpPersonService.insertByBo(bo)); + } + + /** + * 修改奖惩对象 + */ + @SaCheckPermission("safety:rpPerson:edit") + @Log(title = "奖惩对象", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseRpObjectBo bo) { + return toAjax(hseRpPersonService.updateByBo(bo)); + } + + /** + * 删除奖惩对象 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rpPerson:remove") + @Log(title = "奖惩对象", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseRpPersonService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 奖惩对象列表 + */ + @GetMapping("/objectList/{rpId}") + public R> objectList(@PathVariable Long rpId) { + HseRpObjectBo bo = new HseRpObjectBo(); + bo.setRpId(rpId); + List list = hseRpPersonService.queryList(bo); + return R.ok(list); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java new file mode 100644 index 00000000..6712552a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java @@ -0,0 +1,115 @@ +package org.dromara.safety.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.vo.HseSpecialPlanCountVo; +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.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.domain.bo.HseSpecialPlanBo; +import org.dromara.safety.service.IHseSpecialPlanService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程专项施工方案 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/specialPlan") +public class HseSpecialPlanController extends BaseController { + + private final IHseSpecialPlanService hseSpecialPlanService; + + /** + * 查询危大工程专项施工方案列表 + */ + @SaCheckPermission("safety:specialPlan:list") + @GetMapping("/list") + public TableDataInfo list(HseSpecialPlanBo bo, PageQuery pageQuery) { + return hseSpecialPlanService.queryPageList(bo, pageQuery); + } + + /** + * 导出危大工程专项施工方案列表 + */ + @SaCheckPermission("safety:specialPlan:export") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSpecialPlanBo bo, HttpServletResponse response) { + List list = hseSpecialPlanService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程专项施工方案", HseSpecialPlanVo.class, response); + } + + /** + * 获取危大工程专项施工方案详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:specialPlan:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSpecialPlanService.queryById(id)); + } + + /** + * 新增危大工程专项施工方案 + */ + @SaCheckPermission("safety:specialPlan:add") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSpecialPlanBo bo) { + return toAjax(hseSpecialPlanService.insertByBo(bo)); + } + + /** + * 修改危大工程专项施工方案 + */ + @SaCheckPermission("safety:specialPlan:edit") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSpecialPlanBo bo) { + return toAjax(hseSpecialPlanService.updateByBo(bo)); + } + + /** + * 删除危大工程专项施工方案 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:specialPlan:remove") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSpecialPlanService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 统计 + */ + @GetMapping("/count/{projectId}") + public R count(@PathVariable Long projectId) { + return R.ok(hseSpecialPlanService.count(projectId)); + } +} 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 new file mode 100644 index 00000000..84faaec2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -0,0 +1,153 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患信息对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_hidden_danger") +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; + + /** + * 隐患编号 + */ + private String dangerCode; + + /** + * 隐患名称 + */ + private String dangerName; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + + /** + * 上报位置 + */ + private String reportLocation; + + /** + * 上报人 + */ + private Long reporter; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java new file mode 100644 index 00000000..b2182d77 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java @@ -0,0 +1,97 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患整改情况对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_hidden_danger_rectify") +public class HazardHiddenDangerRectify extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 关联隐患ID + */ + private Long hiddenDangerId; + + /** + * 整改期限 + */ + private LocalDateTime rectifyDeadline; + + /** + * 整改次数 + */ + private Integer rectifyCount; + + /** + * 整改人ID + */ + private Long rectifyUserId; + + /** + * 整改说明 + */ + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; + + /** + * 完成整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + private Long reviewUserId; + + /** + * 复查说明 + */ + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查时间 + */ + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java new file mode 100644 index 00000000..ca376f35 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java @@ -0,0 +1,77 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 隐患分级通知规则对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_rule") +public class HazardRule extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 隐患级别 + */ + private String hazardLevel; + + /** + * 隐患权重 + */ + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + private Integer responseTime; + + /** + * 响应时效单位 + */ + private String responseUnit; + + /** + * 通知方式 + */ + private String notifyMethod; + + /** + * 超时处理方式 + */ + private String timeoutAction; + + /** + * 额外设置 + */ + private String extraSetting; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java new file mode 100644 index 00000000..ac379709 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java @@ -0,0 +1,40 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 隐患规则通知对象对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@TableName("hazard_rule_notify_object") +public class HazardRuleNotifyObject implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规则ID + */ + @TableId(type = IdType.INPUT) + private Long ruleId; + + /** + * 通知ID + */ + private Long notifyId; + + /** + * 通知类型 + */ + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java new file mode 100644 index 00000000..787d12a4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java @@ -0,0 +1,132 @@ +package org.dromara.safety.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_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_danger_archive") +public class HseDangerArchive extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + private String archiveNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + private String archiveCategory; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 归档人 + */ + private String archiver; + + /** + * 归档单位 + */ + private String archiveUnit; + + /** + * 危险等级 + */ + private String riskLevel; + + /** + * 施工单位 + */ + private String constructionUnit; + + /** + * 标段 + */ + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + private String constructionMediaFile; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java new file mode 100644 index 00000000..1f6c7a79 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java @@ -0,0 +1,113 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 危大工程信息对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_dangerous_engineering") +public class HseDangerousEngineering extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 风险等级 + */ + private String riskLevel; + + /** + * 作业内容 + */ + private String workType; + + /** + * 施工开始时间 + */ + private Date startTime; + + /** + * 预计完成时间 + */ + private Date endTime; + + /** + * 作业地点 + */ + private String workPlace; + + /** + * 分包单位Id + */ + private Long subcontractorId; + + /** + * 分包单位名 + */ + private String subcontractor; + + /** + * 班组Id + */ + private Long teamId; + + /** + * 班组名 + */ + private String teamName; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + private String siteManager; + + /** + * 紧急联系电话 + */ + private String emergencyPhone; + + /** + * 建设单位 + */ + private String constructionUnit; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java index a9293c11..492a2b06 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java @@ -52,6 +52,11 @@ public class HseRecognizeRecord implements Serializable { */ private String violationType; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java new file mode 100644 index 00000000..c2d031f4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java @@ -0,0 +1,92 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; + +/** + * 奖惩记录对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_rewards_punishments") +public class HseRewardsPunishments extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 奖惩编号(如RP001) + */ + private String rpCode; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + private String category; + + /** + * 金额(元) + */ + private BigDecimal amount; + + /** + * 关联工单id + */ + private Long relatedWorkId; + + /** + * 发起人 + */ + private Long submitter; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + private String recipientType; + + /** + * 审核状态 + */ + private String status; + + /** + * 奖惩原因 + */ + private String reason; + + /** + * 附件 + */ + private String file; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java new file mode 100644 index 00000000..8a8c71eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java @@ -0,0 +1,52 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; + +/** + * 奖惩对象对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_rp_object") +public class HseRpObject extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + private Long rpId; + + /** + * 对象id + */ + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + private String objectName; + + /** + * 个人/班组金额 + */ + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java index 6a83f706..c7ca1206 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java @@ -33,11 +33,21 @@ public class HseSafetyLog extends BaseEntity { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java new file mode 100644 index 00000000..d34f15b2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java @@ -0,0 +1,203 @@ +package org.dromara.safety.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_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_special_plan") +public class HseSpecialPlan extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + private String planNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 方案名称 + */ + private String planName; + + /** + * 方案类别 + */ + private String planCategory; + + /** + * 编制单位 + */ + private String compileUnit; + + /** + * 编制人 + */ + private String compiler; + + /** + * 审核人 + */ + private String reviewer; + + /** + * 批准人 + */ + private String approve; + + /** + * 施工流程与步骤 + */ + private String constructionProcess; + + /** + * 施工参数 + */ + private String constructionParams; + + /** + * 施工人员资质 + */ + private String personnelQualification; + + /** + * 施工附件 + */ + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String expertFile; + + /** + * 论证结论 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String argumentConclusion; + + /** + * 论证日期 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + private Long needSupervision; + + /** + * 旁站监理单位 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisionUnit; + + /** + * 旁站监理人 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisor; + + /** + * 旁站实际开始时间 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + private String reviewRecord; + + /** + * 备案时间 + */ + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + private String recordUnit; + + /** + * 备案文件号 + */ + private String recordFileNo; + + /** + * 备注 + */ + private String remark; + + +} 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 new file mode 100644 index 00000000..11a51589 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java @@ -0,0 +1,142 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HazardHiddenDanger; +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.LocalDateTime; + +/** + * 隐患信息业务对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardHiddenDanger.class, reverseConvertGenerate = false) +public class HazardHiddenDangerBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 隐患编号 + */ + private String dangerCode; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患名称 + */ + private String dangerName; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + /** + * 上报位置 + */ + private String reportLocation; + + /** + * 上报人 + */ + private Long reporter; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + + /** + * 项目ID + */ + private Long projectId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java new file mode 100644 index 00000000..e4375f58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java @@ -0,0 +1,93 @@ +package org.dromara.safety.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.domain.HazardHiddenDangerRectify; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患整改情况业务对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardHiddenDangerRectify.class, reverseConvertGenerate = false) +public class HazardHiddenDangerRectifyBo extends BaseEntity { + + @Serial + private static final long serialVersionUID = -211811062254843066L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 关联隐患ID + */ + @NotNull(message = "关联隐患ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long hiddenDangerId; + + /** + * 整改人ID + */ + @NotNull(message = "整改人ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long rectifyUserId; + + /** + * 整改说明 + */ + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; + + /** + * 完成整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + private Long reviewUserId; + + /** + * 复查说明 + */ + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查时间 + */ + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java new file mode 100644 index 00000000..1ac99ebe --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java @@ -0,0 +1,94 @@ +package org.dromara.safety.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.domain.HazardRule; + +import java.io.Serial; +import java.util.List; + +/** + * 隐患分级通知规则业务对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardRule.class, reverseConvertGenerate = false) +public class HazardRuleBo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1523915364119852788L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 隐患级别 + */ + @NotBlank(message = "隐患级别不能为空", groups = {AddGroup.class, EditGroup.class}) + private String hazardLevel; + + /** + * 隐患权重 + */ + @NotNull(message = "隐患权重不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + @NotNull(message = "响应时限数值不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer responseTime; + + /** + * 响应时效单位 + */ + @NotBlank(message = "响应时效单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String responseUnit; + + /** + * 通知方式 + */ + @NotBlank(message = "通知方式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String notifyMethod; + + /** + * 超时处理方式 + */ + @NotBlank(message = "超时处理方式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String timeoutAction; + + /** + * 额外设置 + */ + private String extraSetting; + + /** + * 备注 + */ + private String remark; + + /** + * 通知对象 + */ + @NotNull(message = "通知对象不能为空", groups = {AddGroup.class, EditGroup.class}) + private List notifyObjects; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java new file mode 100644 index 00000000..6b607f13 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java @@ -0,0 +1,28 @@ +package org.dromara.safety.domain.bo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 隐患规则通知对象业务对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class HazardRuleNotifyObjectBo { + + /** + * 通知ID + */ + private Long notifyId; + + /** + * 通知类型 + */ + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java new file mode 100644 index 00000000..8144d32f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java @@ -0,0 +1,132 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseDangerArchive; +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_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseDangerArchive.class, reverseConvertGenerate = false) +public class HseDangerArchiveBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + private String archiveNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + private String archiveCategory; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 归档人 + */ + private String archiver; + + /** + * 归档单位 + */ + private String archiveUnit; + + /** + * 危险等级 + */ + private String riskLevel; + + /** + * 施工单位 + */ + private String constructionUnit; + + /** + * 标段 + */ + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + private String constructionMediaFile; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java new file mode 100644 index 00000000..7d252892 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java @@ -0,0 +1,114 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseDangerousEngineering; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 危大工程信息业务对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseDangerousEngineering.class, reverseConvertGenerate = false) +public class HseDangerousEngineeringBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 风险等级 + */ + private String riskLevel; + + /** + * 作业内容 + */ + private String workType; + + /** + * 施工开始时间 + */ + private LocalDate startTime; + + /** + * 预计完成时间 + */ + private LocalDate endTime; + + /** + * 作业地点 + */ + private String workPlace; + + /** + * 分包单位Id + */ + private Long subcontractorId; + + /** + * 分包单位名 + */ + private String subcontractor; + + /** + * 班组Id + */ + private Long teamId; + + /** + * 班组名 + */ + private String teamName; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + private String siteManager; + + /** + * 紧急联系电话 + */ + private String emergencyPhone; + + /** + * 建设单位 + */ + private String constructionUnit; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java new file mode 100644 index 00000000..0ed4e43e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java @@ -0,0 +1,110 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseRewardsPunishments; +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.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * 奖惩记录业务对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseRewardsPunishments.class, reverseConvertGenerate = false) +public class HseRewardsPunishmentsBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 奖惩编号(如RP001) + */ + private String rpCode; + + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + private String category; + + /** + * 金额(元) + */ + private BigDecimal amount; + + /** + * 关联工单id + */ + private Long relatedWorkId; + + /** + * 发起人 + */ + @NotNull(message = "发起人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submitter; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + private String recipientType; + + /** + * 审核状态 + */ + private String status; + + /** + * 奖惩原因 + */ + private String reason; + + /** + * 附件 + */ + private String file; + + /** + * 备注 + */ + private String remark; + + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + + + + /** + * 对象信息 + */ + private List rpObjects; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java new file mode 100644 index 00000000..dd24b0a4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java @@ -0,0 +1,50 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseRpObject; +import org.dromara.common.mybatis.core.domain.BaseEntity; +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.math.BigDecimal; + +/** + * 奖惩对象业务对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseRpObject.class, reverseConvertGenerate = false) +public class HseRpObjectBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + private Long rpId; + + /** + * 对象id + */ + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + private String objectName; + + /** + * 个人/班组金额 + */ + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java new file mode 100644 index 00000000..ad92de45 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java @@ -0,0 +1,196 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseSpecialPlan; +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_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSpecialPlan.class, reverseConvertGenerate = false) +public class HseSpecialPlanBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + private String planNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 方案名称 + */ + private String planName; + + /** + * 方案类别 + */ + private String planCategory; + + /** + * 编制单位 + */ + private String compileUnit; + + /** + * 编制人 + */ + private String compiler; + + /** + * 审核人 + */ + private String reviewer; + + /** + * 批准人 + */ + private String approve; + + /** + * 施工流程与步骤 + */ + private String constructionProcess; + + /** + * 施工参数 + */ + private String constructionParams; + + /** + * 施工人员资质 + */ + private String personnelQualification; + + /** + * 施工附件 + */ + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + @NotNull(message = "是否需专家论证(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + private String expertFile; + + /** + * 论证结论 + */ + private String argumentConclusion; + + /** + * 论证日期 + */ + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + @NotNull(message = "是否需旁站监理(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long needSupervision; + + /** + * 旁站监理单位 + */ + private String supervisionUnit; + + /** + * 旁站监理人 + */ + private String supervisor; + + /** + * 旁站实际开始时间 + */ + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + @NotNull(message = "应急预案是否涉及(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + private String reviewRecord; + + /** + * 备案时间 + */ + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + private String recordUnit; + + /** + * 备案文件号 + */ + private String recordFileNo; + + /** + * 备注 + */ + private String remark; + + +} 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..2789c26f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java @@ -0,0 +1,69 @@ +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; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java new file mode 100644 index 00000000..9cb431b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java @@ -0,0 +1,36 @@ +package org.dromara.safety.domain.dto.hiddendangerrectify; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-12-04 14:58 + */ +@Data +public class HazardHiddenDangerRectifyRectificationReq implements Serializable { + + @Serial + private static final long serialVersionUID = 3378774493193429015L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空") + private Long id; + + /** + * 整改说明 + */ + @NotBlank(message = "整改说明不能为空") + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java new file mode 100644 index 00000000..ae7d8842 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java @@ -0,0 +1,53 @@ +package org.dromara.safety.domain.dto.hiddendangerrectify; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author lilemy + * @date 2025-12-04 15:07 + */ +@Data +public class HazardHiddenDangerRectifyReviewReq implements Serializable { + + @Serial + private static final long serialVersionUID = 6999133950832111753L; + + /** + * 主键 + */ + @NotNull(message = "请选择要复查的整改") + private Long id; + + /** + * 整改人ID + */ + private Long rectifyUserId; + + /** + * 复查说明 + */ + @NotBlank(message = "请填写复查说明") + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + @NotBlank(message = "请选择复查状态") + private String reviewStatus; + + /** + * 整改期限 + */ + private LocalDateTime rectificationDeadline; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java index d4ee694c..2a708c80 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java @@ -37,6 +37,11 @@ public class HseRecognizeRecordCreateDto { */ private String recordCategory; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java index e3b17f29..c0c9c62b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java @@ -62,4 +62,7 @@ public class HseSafetyInspectionQueryReq implements Serializable { private Long createBy; + + + private Boolean checkCorrectorNull=false; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java index d2288bfa..a8880e22 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java @@ -49,6 +49,16 @@ public class HseSafetyInspectionUpdateReq implements Serializable { */ private String inspectionResult; + /** + * 整改单位(1分包 2班组) + */ + private String rectificationUnit; + + /** + * 整改单位id + */ + private Long rectificationId; + /** * 整改班组id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java index 00f75912..82cd8054 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java @@ -23,12 +23,22 @@ public class HseSafetyLogCreateReq implements Serializable { @NotNull(message = "项目id不能为空") private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ @NotBlank(message = "发生日期不能为空") private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java index 5df372d0..d4e8c1af 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java @@ -48,4 +48,6 @@ public class HseViolationRecordQueryReq implements Serializable { private String status; + private Boolean checkCorrectorNull=false; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java new file mode 100644 index 00000000..70f07dc6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java @@ -0,0 +1,141 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HazardHiddenDangerRectify; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + + +/** + * 隐患整改情况视图对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardHiddenDangerRectify.class) +public class HazardHiddenDangerRectifyVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 关联隐患ID + */ + @ExcelProperty(value = "关联隐患ID") + private Long hiddenDangerId; + + /** + * 整改期限 + */ + @ExcelProperty(value = "整改期限") + private LocalDateTime rectifyDeadline; + + /** + * 整改次数 + */ + @ExcelProperty(value = "整改次数") + private Integer rectifyCount; + + /** + * 整改人ID + */ + @ExcelProperty(value = "整改人ID") + private Long rectifyUserId; + + /** + * 整改人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + + /** + * 整改说明 + */ + @ExcelProperty(value = "整改说明") + private String rectifyDesc; + + /** + * 整改附件 + */ + @ExcelProperty(value = "整改附件") + private String rectifyFiles; + + /** + * 整改附件Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "rectifyFiles") + private String rectifyFilesUrl; + + /** + * 完成整改时间 + */ + @ExcelProperty(value = "完成整改时间") + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + @ExcelProperty(value = "复查人ID") + private Long reviewUserId; + + /** + * 复查人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reviewUserId") + private String reviewUserName; + + /** + * 复查说明 + */ + @ExcelProperty(value = "复查说明") + private String reviewDesc; + + /** + * 复查附件 + */ + @ExcelProperty(value = "复查附件") + private String reviewFiles; + + /** + * 复查附件Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reviewFiles") + private String reviewFilesUrl; + + /** + * 复查时间 + */ + @ExcelProperty(value = "复查时间") + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + @ExcelProperty(value = "复查状态(0待复查 1复查通过 2复查不通过)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_review_status") + private String reviewStatus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + +} 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 new file mode 100644 index 00000000..725a41a3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -0,0 +1,206 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HazardHiddenDanger; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + + +/** + * 隐患信息视图对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardHiddenDanger.class) +public class HazardHiddenDangerVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 隐患编号 + */ + @ExcelProperty(value = "隐患编号") + private String dangerCode; + + /** + * 隐患名称 + */ + @ExcelProperty(value = "隐患名称") + private String dangerName; + + /** + * 上报位置 + */ + @ExcelProperty(value = "上报位置") + private String reportLocation; + + /** + * 上报人 + */ + @ExcelProperty(value = "上报人") + private Long reporter; + + /** + * 上报人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reporter") + private String reporterName; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + @ExcelProperty(value = "上报时间") + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + @ExcelProperty(value = "隐患等级ID") + private Long dangerLevelId; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + 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; + + /** + * 评估时间 + */ + @ExcelProperty(value = "评估时间") + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + @ExcelProperty(value = "评估依据") + private String evaluateBasis; + + /** + * 评估意见 + */ + @ExcelProperty(value = "评估意见") + private String reporterOpinion; + + /** + * 评估附件 + */ + @ExcelProperty(value = "评估附件") + private String reporterFile; + + /** + * 评估附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reporterFile") + private String reporterFileUrl; + + /** + * 整改时间 + */ + @ExcelProperty(value = "整改时间") + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + @ExcelProperty(value = "整改单位 1-班组 2-分包") + private String rectifyUnit; + + /** + * 整改单位ID + */ + @ExcelProperty(value = "整改单位ID") + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + @ExcelProperty(value = "整改负责人Id") + private Long rectifyUserId; + + /** + * 整改负责人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=-待评估,2-待整改,3-待复查,4-已闭环") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 最新整改次数 + */ + private Integer latestRectifyTimes; + + /** + * 整改信息列表 + */ + private List rectifyList; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java new file mode 100644 index 00000000..d6694a3e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java @@ -0,0 +1,50 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.domain.HazardRuleNotifyObject; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 隐患规则通知对象视图对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardRuleNotifyObject.class) +public class HazardRuleNotifyObjectVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规则ID + */ + @ExcelProperty(value = "规则ID") + private Long ruleId; + + /** + * 通知ID + */ + @ExcelProperty(value = "通知ID") + private Long notifyId; + + /** + * 通知名称 + */ + private String notifyName; + + /** + * 通知类型 + */ + @ExcelProperty(value = "通知类型") + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java new file mode 100644 index 00000000..72997c46 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java @@ -0,0 +1,98 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.safety.domain.HazardRule; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + + +/** + * 隐患分级通知规则视图对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardRule.class) +public class HazardRuleVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 隐患级别 + */ + @ExcelProperty(value = "隐患级别") + private String hazardLevel; + + /** + * 隐患权重 + */ + @ExcelProperty(value = "隐患权重") + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + @ExcelProperty(value = "响应时限数值") + private Integer responseTime; + + /** + * 响应时效单位 + */ + @ExcelProperty(value = "响应时效单位", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "time_unit") + private String responseUnit; + + /** + * 通知方式 + */ + @ExcelProperty(value = "通知方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "notify_method") + private String notifyMethod; + + /** + * 超时处理方式 + */ + @ExcelProperty(value = "超时处理方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_timeout_action") + private String timeoutAction; + + /** + * 额外设置 + */ + @ExcelProperty(value = "额外设置") + private String extraSetting; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 通知对象 + */ + List notifyObjects; + +} 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/domain/vo/HseDangerArchiveVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java new file mode 100644 index 00000000..a76fc7a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java @@ -0,0 +1,162 @@ +package org.dromara.safety.domain.vo; + +import org.dromara.safety.domain.HseDangerArchive; +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_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseDangerArchive.class) +public class HseDangerArchiveVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + @ExcelProperty(value = "档案编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "自=动生成/手动输入") + private String archiveNo; + + /** + * 危大工程ID + */ + @ExcelProperty(value = "危大工程ID") + private Long deId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + @ExcelProperty(value = "档案类别", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个类别用逗号分隔,如:方案,论证") + private String archiveCategory; + + /** + * 归档日期 + */ + @ExcelProperty(value = "归档日期") + private LocalDate archiveDate; + + /** + * 归档人 + */ + @ExcelProperty(value = "归档人") + private String archiver; + + /** + * 归档单位 + */ + @ExcelProperty(value = "归档单位") + private String archiveUnit; + + /** + * 危险等级 + */ + @ExcelProperty(value = "危险等级") + private String riskLevel; + + /** + * 施工单位 + */ + @ExcelProperty(value = "施工单位") + private String constructionUnit; + + /** + * 标段 + */ + @ExcelProperty(value = "标段") + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + @ExcelProperty(value = "档案关键字", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个用逗号分隔") + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + @ExcelProperty(value = "方案定稿文件路径") + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + @ExcelProperty(value = "专家论证资料文件路径") + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + @ExcelProperty(value = "技术交底资料文件路径") + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + @ExcelProperty(value = "旁站监理记录文件路径") + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + @ExcelProperty(value = "监控日志文件路径") + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + @ExcelProperty(value = "验收确认书文件路径") + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + @ExcelProperty(value = "施工影像/附件文件路径") + private String constructionMediaFile; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java new file mode 100644 index 00000000..87b8bfb2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java @@ -0,0 +1,143 @@ +package org.dromara.safety.domain.vo; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseDangerousEngineering; +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.util.Date; + + + +/** + * 危大工程信息视图对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseDangerousEngineering.class) +public class HseDangerousEngineeringVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 风险等级 + */ + @ExcelProperty(value = "风险等级") + private String riskLevel; + + + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "riskLevel",other = "danger_risk_level") + private String riskLevelName; + + /** + * 作业内容 + */ + @ExcelProperty(value = "作业内容") + private String workType; + + /** + * 施工开始时间 + */ + @ExcelProperty(value = "施工开始时间") + private LocalDate startTime; + + /** + * 预计完成时间 + */ + @ExcelProperty(value = "预计完成时间") + private LocalDate endTime; + + /** + * 作业地点 + */ + @ExcelProperty(value = "作业地点") + private String workPlace; + + /** + * 分包单位Id + */ + @ExcelProperty(value = "分包单位Id") + private Long subcontractorId; + + /** + * 分包单位名 + */ + @ExcelProperty(value = "分包单位名") + private String subcontractor; + + /** + * 班组Id + */ + @ExcelProperty(value = "班组Id") + private Long teamId; + + /** + * 班组名 + */ + @ExcelProperty(value = "班组名") + private String teamName; + + /** + * 项目经理 + */ + @ExcelProperty(value = "项目经理") + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + @ExcelProperty(value = "现场负责人(紧急联系人)") + private String siteManager; + + /** + * 紧急联系电话 + */ + @ExcelProperty(value = "紧急联系电话") + private String emergencyPhone; + + /** + * 建设单位 + */ + @ExcelProperty(value = "建设单位") + private String constructionUnit; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java new file mode 100644 index 00000000..3678827f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java @@ -0,0 +1,24 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HseJsjdYuJkjcVo { + /** + * 技术交底文件 + */ + private String jsjdFile; + + + /** + * 过程监控文件 + */ + private String gcjkFile; + + + /** + * 过程旁站监听文件 + */ + private String pzjtFile; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java new file mode 100644 index 00000000..b73954b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java @@ -0,0 +1,56 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseRewardsPunishments; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * 奖惩记录视图对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRewardsPunishments.class) +public class HseRPCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 总数 + */ + private Integer total; + + /** + * 待审批数量 + */ + private Long waitApproval; + + /** + * 奖励金额 + */ + private BigDecimal reward; + + /** + * 惩罚金额 + */ + private BigDecimal penalty; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java new file mode 100644 index 00000000..f35f8792 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java @@ -0,0 +1,134 @@ +package org.dromara.safety.domain.vo; + +import java.math.BigDecimal; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseRewardsPunishments; +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.util.Date; +import java.util.List; + + +/** + * 奖惩记录视图对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRewardsPunishments.class) +public class HseRewardsPunishmentsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 奖惩编号(如RP001) + */ + @ExcelProperty(value = "奖惩编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=RP001") + private String rpCode; + + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + @ExcelProperty(value = "类型:1-奖励,2-惩罚") + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + @ExcelProperty(value = "分类", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=AI工单、其他、安全工单等") + private String category; + + /** + * 金额(元) + */ + @ExcelProperty(value = "金额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "元=") + private BigDecimal amount; + + /** + * 关联工单id + */ + @ExcelProperty(value = "关联工单id") + private Long relatedWorkId; + + /** + * 发起人 + */ + @ExcelProperty(value = "发起人") + private Long submitter; + + /** + * 发起人名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "submitter") + private String submitterName; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + @ExcelProperty(value = "奖惩对象类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=-分包,2=-班组,3=-人") + private String recipientType; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String status; + + /** + * 奖惩原因 + */ + @ExcelProperty(value = "奖惩原因") + private String reason; + + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String file; + + /** + * 附件url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "file") + private String fileUrl; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 奖惩对象列表 + */ + private List rpObjects; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java new file mode 100644 index 00000000..7e85b31e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java @@ -0,0 +1,63 @@ +package org.dromara.safety.domain.vo; + +import java.math.BigDecimal; +import org.dromara.safety.domain.HseRpObject; +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; + + +/** + * 奖惩对象视图对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRpObject.class) +public class HseRpPersonVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + @ExcelProperty(value = "关联奖惩记录ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "r=ewards_punishments.id") + private Long rpId; + + /** + * 对象id + */ + @ExcelProperty(value = "对象id") + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + @ExcelProperty(value = "对象名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "人=员姓名或班组名称") + private String objectName; + + /** + * 个人/班组金额 + */ + @ExcelProperty(value = "个人/班组金额") + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java new file mode 100644 index 00000000..45b8366a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java @@ -0,0 +1,47 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.safety.domain.HseSpecialPlan; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + + +/** + * 危大工程专项施工方案视图对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseSpecialPlanCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 总数 + */ + private Integer total; + + /** + * 需专家论证 + */ + private Long needExpertArgumentNum; + + /** + * 需旁站监理 + */ + private Long needSupervisionNum; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java new file mode 100644 index 00000000..2a7730ae --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java @@ -0,0 +1,237 @@ +package org.dromara.safety.domain.vo; + +import org.dromara.safety.domain.HseSpecialPlan; +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_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSpecialPlan.class) +public class HseSpecialPlanVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + @ExcelProperty(value = "方案编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "自=动生成/手动输入") + private String planNo; + + /** + * 危大工程ID + */ + @ExcelProperty(value = "危大工程ID") + private Long deId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 方案名称 + */ + @ExcelProperty(value = "方案名称") + private String planName; + + /** + * 方案类别 + */ + @ExcelProperty(value = "方案类别") + private String planCategory; + + /** + * 编制单位 + */ + @ExcelProperty(value = "编制单位") + private String compileUnit; + + /** + * 编制人 + */ + @ExcelProperty(value = "编制人") + private String compiler; + + /** + * 审核人 + */ + @ExcelProperty(value = "审核人") + private String reviewer; + + /** + * 批准人 + */ + @ExcelProperty(value = "批准人") + private String approve; + + /** + * 施工流程与步骤 + */ + @ExcelProperty(value = "施工流程与步骤") + private String constructionProcess; + + /** + * 施工参数 + */ + @ExcelProperty(value = "施工参数") + private String constructionParams; + + /** + * 施工人员资质 + */ + @ExcelProperty(value = "施工人员资质") + private String personnelQualification; + + /** + * 施工附件 + */ + @ExcelProperty(value = "施工附件") + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + @ExcelProperty(value = "是否需专家论证", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + @ExcelProperty(value = "专家结论附件路径") + private String expertFile; + + /** + * 论证结论 + */ + @ExcelProperty(value = "论证结论") + private String argumentConclusion; + + /** + * 论证日期 + */ + @ExcelProperty(value = "论证日期") + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + @ExcelProperty(value = "专家组负责人", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "姓=名+单位") + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + @ExcelProperty(value = "是否需旁站监理", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long needSupervision; + + /** + * 旁站监理单位 + */ + @ExcelProperty(value = "旁站监理单位") + private String supervisionUnit; + + /** + * 旁站监理人 + */ + @ExcelProperty(value = "旁站监理人") + private String supervisor; + + /** + * 旁站实际开始时间 + */ + @ExcelProperty(value = "旁站实际开始时间") + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + @ExcelProperty(value = "旁站实际结束时间") + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + @ExcelProperty(value = "旁站记录附件路径") + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + @ExcelProperty(value = "应急预案是否涉及", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + @ExcelProperty(value = "关联应急预案编号") + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + @ExcelProperty(value = "方案初审/复核记录") + private String reviewRecord; + + /** + * 备案时间 + */ + @ExcelProperty(value = "备案时间") + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + @ExcelProperty(value = "备案单位") + private String recordUnit; + + /** + * 备案文件号 + */ + @ExcelProperty(value = "备案文件号") + private String recordFileNo; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java new file mode 100644 index 00000000..04478be2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java @@ -0,0 +1,17 @@ +package org.dromara.safety.domain.vo; + +import lombok.Data; + +@Data +public class RectifyTimesVo { + + /** + * 隐患ID + */ + private Long hiddenDangerId; + + /** + * 最新整改次数 + */ + private Integer latestRectifyTimes; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java index 2117722e..f2efedca 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java @@ -66,6 +66,11 @@ public class HseRecognizeRecordVo implements Serializable { @ExcelDictFormat(dictType = "violation_level_type") private String violationType; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java index f83b8c6b..0b8d2542 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java @@ -41,12 +41,24 @@ public class HseSafetyLogVo implements Serializable { @ExcelProperty(value = "项目id") private Long projectId; + + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ @ExcelProperty(value = "发生日期") private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java new file mode 100644 index 00000000..ded7a6ca --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java @@ -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; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java new file mode 100644 index 00000000..b5eeef0f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java @@ -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 list(HseJsjdBo bo, PageQuery pageQuery) { + return hseJsjdService.queryPageList(bo, pageQuery); + } + + /** + * 查询安全-过程监控记录列表 + */ + @SaCheckPermission("gcjkjl:gcjk:list") + @GetMapping("/list") + public TableDataInfo list(HseGcjkBo bo, PageQuery pageQuery) { + return hseGcjkService.queryPageList(bo, pageQuery); + } + + + /** + * 查询安全-过程监控记录头部数据 + */ + @SaCheckPermission("gcjkjl:gcjk:list") + @GetMapping("/listHead") + public R 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 list = hseGcjkService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-过程监控记录", HseGcjkVo.class, response); + } + + /** + * 获取安全-过程监控记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("gcjkjl:gcjk:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseGcjkService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java new file mode 100644 index 00000000..52a92195 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java @@ -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; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + private String hasHazardSign; + + /** + * 施工状态描述 + */ + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + 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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java new file mode 100644 index 00000000..359f7b91 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java @@ -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; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + @NotNull(message = "是否存在危险迹象(1:是,0:否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String hasHazardSign; + + /** + * 施工状态描述 + */ + @NotBlank(message = "施工状态描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + @NotNull(message = "是否旁站(1:是,0:否)不能为空", 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; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java new file mode 100644 index 00000000..0ad32f98 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java @@ -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; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + @ExcelProperty(value = "是否存在危险迹象", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=:是,0:否") + private String hasHazardSign; + + /** + * 施工状态描述 + */ + @ExcelProperty(value = "施工状态描述") + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + @ExcelProperty(value = "关键工序完成情况") + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + @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; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java new file mode 100644 index 00000000..70b0910b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java @@ -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; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java new file mode 100644 index 00000000..55b08e0a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java new file mode 100644 index 00000000..0a8e5c9a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java @@ -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{ + + /** + * 查询安全-过程监控记录 + * + * @param id 主键 + * @return 安全-过程监控记录 + */ + HseGcjkVo queryById(Long id); + + /** + * 分页查询安全-过程监控记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-过程监控记录分页列表 + */ + TableDataInfo queryPageList(HseGcjkBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-过程监控记录列表 + * + * @param bo 查询条件 + * @return 安全-过程监控记录列表 + */ + List 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 ids, Boolean isValid); + + JkjcHeadVo listHead(HseGcjkBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java new file mode 100644 index 00000000..a54dd46e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java @@ -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 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 queryPageList(HseGcjkBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-过程监控记录列表 + * + * @param bo 查询条件 + * @return 安全-过程监控记录列表 + */ + @Override + public List queryList(HseGcjkBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseGcjkBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + HseGcjkVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List 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 hseGcjks = baseMapper.selectList(new LambdaQueryWrapper().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; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java new file mode 100644 index 00000000..012020ef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java @@ -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 list(HseSpecialPlanBo bo, PageQuery pageQuery) { + return hseSpecialPlanService.queryPageList(bo, pageQuery); + } + + /** + * 查询安全技术交底列表 + */ + @SaCheckPermission("jsjd:jsjd:list") + @GetMapping("/list") + public TableDataInfo list(HseJsjdBo bo, PageQuery pageQuery) { + return hseJsjdService.queryPageList(bo, pageQuery); + } + + + /** + * 查询安全技术交底头部数据 + */ + @SaCheckPermission("jsjd:jsjd:list") + @GetMapping("/listHead") + public R 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 list = hseJsjdService.queryList(bo); + ExcelUtil.exportExcel(list, "安全技术交底", HseJsjdVo.class, response); + } + + /** + * 获取安全技术交底详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jsjd:jsjd:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseJsjdService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java new file mode 100644 index 00000000..89ad2d21 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java @@ -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; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java new file mode 100644 index 00000000..d7155be2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java @@ -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; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java new file mode 100644 index 00000000..122764af --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java @@ -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; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java new file mode 100644 index 00000000..a506887b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java @@ -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; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java new file mode 100644 index 00000000..437fe986 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java new file mode 100644 index 00000000..57c87e1e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java @@ -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{ + + /** + * 查询安全技术交底 + * + * @param id 主键 + * @return 安全技术交底 + */ + HseJsjdVo queryById(Long id); + + /** + * 分页查询安全技术交底列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全技术交底分页列表 + */ + TableDataInfo queryPageList(HseJsjdBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全技术交底列表 + * + * @param bo 查询条件 + * @return 安全技术交底列表 + */ + List 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 ids, Boolean isValid); + + JsjgHeadVo listHead(HseJsjdBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java new file mode 100644 index 00000000..dd5982d0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java @@ -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 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 queryPageList(HseJsjdBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全技术交底列表 + * + * @param bo 查询条件 + * @return 安全技术交底列表 + */ + @Override + public List queryList(HseJsjdBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseJsjdBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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().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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + HseJsjdVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List 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().eq(HseSpecialPlan::getProjectId, bo.getProjectId())); + List hseJsjds = baseMapper.selectList(new LambdaQueryWrapper().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; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java new file mode 100644 index 00000000..43046734 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 隐患信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface HazardHiddenDangerMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java new file mode 100644 index 00000000..6a71a8cf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java @@ -0,0 +1,26 @@ +package org.dromara.safety.mapper; + +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.RectifyTimesVo; + +import java.util.List; + +/** + * 隐患整改情况Mapper接口 + * + * @author lilemy + * @date 2025-12-04 + */ +public interface HazardHiddenDangerRectifyMapper extends BaseMapperPlus { + + /** + * 获取最近一次整改时间 + * + * @param ids 隐患ID + * @return 最近一次整改时间 + */ + List getLatestRectifyTimes(@Param("ids") List ids); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java new file mode 100644 index 00000000..a87e87c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.vo.HazardRuleVo; + +/** + * 隐患分级通知规则Mapper接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface HazardRuleMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java new file mode 100644 index 00000000..8442da31 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; + +/** + * 隐患规则通知对象Mapper接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface HazardRuleNotifyObjectMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java new file mode 100644 index 00000000..2e73bbd8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseDangerArchive; +import org.dromara.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程档案Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseDangerArchiveMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java new file mode 100644 index 00000000..5f797930 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseDangerousEngineeringMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java new file mode 100644 index 00000000..30de9cf5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseRewardsPunishments; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 奖惩记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface HseRewardsPunishmentsMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java new file mode 100644 index 00000000..535e811d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 奖惩对象Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface HseRpObjectMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java new file mode 100644 index 00000000..4d3479f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseSpecialPlan; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程专项施工方案Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseSpecialPlanMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java index 4f1d71f6..44e5e13c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java @@ -9,6 +9,8 @@ import org.dromara.safety.domain.HseViolationRecord; import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; import org.dromara.system.domain.SysUser; +import java.util.List; + /** * 违规记录Mapper接口 * @@ -18,4 +20,8 @@ import org.dromara.system.domain.SysUser; public interface HseViolationRecordMapper extends BaseMapperPlus { Page selectPageList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + List selectLatestList( @Param(Constants.WRAPPER) Wrapper queryWrapper); + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java new file mode 100644 index 00000000..96adfbe0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java @@ -0,0 +1,97 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患整改情况Service接口 + * + * @author lilemy + * @date 2025-12-04 + */ +public interface IHazardHiddenDangerRectifyService extends IService { + + /** + * 查询隐患整改情况 + * + * @param id 主键 + * @return 隐患整改情况 + */ + HazardHiddenDangerVo queryById(Long id); + + /** + * 分页查询隐患整改情况列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患整改情况分页列表 + */ + TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的隐患整改情况列表 + * + * @param bo 查询条件 + * @return 隐患整改情况列表 + */ + List queryList(HazardHiddenDangerRectifyBo bo); + + /** + * 新增隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardHiddenDangerRectifyBo bo); + + /** + * 修改隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardHiddenDangerRectifyBo bo); + + /** + * 隐患整改 + * + * @param req 隐患整改参数 + * @return 是否整改成功 + */ + Boolean rectification(HazardHiddenDangerRectifyRectificationReq req); + + /** + * 隐患复查 + * + * @param req 隐患复查参数 + * @return 是否审核成功 + */ + Boolean review(HazardHiddenDangerRectifyReviewReq req); + + /** + * 校验并批量删除隐患整改情况信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 发送超时通知 + * + * @param bizId 业务id + */ + void sendTimeoutNotify(Long bizId); +} 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 new file mode 100644 index 00000000..9798746e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -0,0 +1,107 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IHazardHiddenDangerService extends IService { + + /** + * 查询隐患信息 + * + * @param id 主键 + * @return 隐患信息 + */ + HazardHiddenDangerVo queryById(Long id); + + /** + * 分页查询隐患信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery); + + /** + * 分页查询隐患信息列表 + * + * @param lqw 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + TableDataInfo queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery); + + /** + * 查询符合条件的隐患信息列表 + * + * @param bo 查询条件 + * @return 隐患信息列表 + */ + List queryList(HazardHiddenDangerBo bo); + + /** + * 构建查询条件 + * + * @param bo 查询条件 + * @return 查询条件 + */ + LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo); + + /** + * 新增隐患信息 + * + * @param bo 隐患信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardHiddenDangerBo bo); + + /** + * 修改隐患信息 + * + * @param bo 隐患信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardHiddenDangerBo bo); + + /** + * 校验并批量删除隐患信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @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/IHazardRuleNotifyObjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java new file mode 100644 index 00000000..da32ace9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java @@ -0,0 +1,50 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; + +import java.util.List; +import java.util.Set; + +/** + * 隐患规则通知对象Service接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface IHazardRuleNotifyObjectService extends IService { + + /** + * 根据规则查询通知对象 + * + * @param ruleId 规则id + * @return 通知对象 + */ + List queryVoByRule(Long ruleId); + + /** + * 根据对象列表查询对象列表 + * + * @param objectList 对象列表 + * @return 对象列表 + */ + List queryVo(List objectList); + + /** + * 根据规则查询所有通知对象id + * + * @param ruleId 规则id + * @param projectId 项目id + * @return 通知对象id + */ + Set queryNotifyObjectIds(Long ruleId, Long projectId); + + /** + * 补充数据 + * + * @param voList 规则列表 + */ + void supplementDataByRule(List voList); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java new file mode 100644 index 00000000..6ead1996 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.vo.HazardRuleVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患分级通知规则Service接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface IHazardRuleService extends IService { + + /** + * 查询隐患分级通知规则 + * + * @param id 主键 + * @return 隐患分级通知规则 + */ + HazardRuleVo queryById(Long id); + + /** + * 分页查询隐患分级通知规则列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患分级通知规则分页列表 + */ + TableDataInfo queryPageList(HazardRuleBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的隐患分级通知规则列表 + * + * @param bo 查询条件 + * @return 隐患分级通知规则列表 + */ + List queryList(HazardRuleBo bo); + + /** + * 新增隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardRuleBo bo); + + /** + * 修改隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardRuleBo bo); + + /** + * 校验并批量删除隐患分级通知规则信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java new file mode 100644 index 00000000..01a06c03 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java @@ -0,0 +1,74 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.safety.domain.bo.HseDangerArchiveBo; +import org.dromara.safety.domain.HseDangerArchive; +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; + +/** + * 危大工程档案Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseDangerArchiveService extends IService{ + + /** + * 查询危大工程档案 + * + * @param id 主键 + * @return 危大工程档案 + */ + HseDangerArchiveVo queryById(Long id); + + /** + * 分页查询危大工程档案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程档案分页列表 + */ + TableDataInfo queryPageList(HseDangerArchiveBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程档案列表 + * + * @param bo 查询条件 + * @return 危大工程档案列表 + */ + List queryList(HseDangerArchiveBo bo); + + /** + * 新增危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否新增成功 + */ + Boolean insertByBo(HseDangerArchiveBo bo); + + /** + * 修改危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否修改成功 + */ + Boolean updateByBo(HseDangerArchiveBo bo); + + /** + * 校验并批量删除危大工程档案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + HseJsjdYuJkjcVo getJsjdYGcjk(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java new file mode 100644 index 00000000..74be781e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 危大工程信息Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseDangerousEngineeringService extends IService{ + + /** + * 查询危大工程信息 + * + * @param id 主键 + * @return 危大工程信息 + */ + HseDangerousEngineeringVo queryById(Long id); + + /** + * 分页查询危大工程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程信息分页列表 + */ + TableDataInfo queryPageList(HseDangerousEngineeringBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程信息列表 + * + * @param bo 查询条件 + * @return 危大工程信息列表 + */ + List queryList(HseDangerousEngineeringBo bo); + + /** + * 新增危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseDangerousEngineeringBo bo); + + /** + * 修改危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseDangerousEngineeringBo bo); + + /** + * 校验并批量删除危大工程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java new file mode 100644 index 00000000..e44ce68d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java @@ -0,0 +1,90 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.domain.HseRewardsPunishments; +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.springframework.web.bind.annotation.PathVariable; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 奖惩记录Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IHseRewardsPunishmentsService extends IService{ + + /** + * 查询奖惩记录 + * + * @param id 主键 + * @return 奖惩记录 + */ + HseRewardsPunishmentsVo queryById(Long id); + + /** + * 分页查询奖惩记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩记录分页列表 + */ + TableDataInfo queryPageList(HseRewardsPunishmentsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的奖惩记录列表 + * + * @param bo 查询条件 + * @return 奖惩记录列表 + */ + List queryList(HseRewardsPunishmentsBo bo); + + /** + * 新增奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否新增成功 + */ + Boolean insertByBo(HseRewardsPunishmentsBo bo); + + /** + * 修改奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否修改成功 + */ + Boolean updateByBo(HseRewardsPunishmentsBo bo); + + /** + * 校验并批量删除奖惩记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 金额统计 + * + * @param projectId 项目ID + */ + HseRPCountVo amountCount( Long projectId); + + + /** + * 类型统计 + * + * @param projectId 项目ID + */ + Map typeCount(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java new file mode 100644 index 00000000..8a33fa92 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 奖惩对象Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IHseRpObjectService extends IService{ + + /** + * 查询奖惩对象 + * + * @param id 主键 + * @return 奖惩对象 + */ + HseRpPersonVo queryById(Long id); + + /** + * 分页查询奖惩对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩对象分页列表 + */ + TableDataInfo queryPageList(HseRpObjectBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的奖惩对象列表 + * + * @param bo 查询条件 + * @return 奖惩对象列表 + */ + List queryList(HseRpObjectBo bo); + + /** + * 新增奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否新增成功 + */ + Boolean insertByBo(HseRpObjectBo bo); + + /** + * 修改奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否修改成功 + */ + Boolean updateByBo(HseRpObjectBo bo); + + /** + * 校验并批量删除奖惩对象信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java new file mode 100644 index 00000000..76ad5ee7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java @@ -0,0 +1,78 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.domain.bo.HseSpecialPlanBo; +import org.dromara.safety.domain.HseSpecialPlan; +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.springframework.web.bind.annotation.PathVariable; + +import java.util.Collection; +import java.util.List; + +/** + * 危大工程专项施工方案Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseSpecialPlanService extends IService{ + + /** + * 查询危大工程专项施工方案 + * + * @param id 主键 + * @return 危大工程专项施工方案 + */ + HseSpecialPlanVo queryById(Long id); + + /** + * 分页查询危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程专项施工方案分页列表 + */ + TableDataInfo queryPageList(HseSpecialPlanBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @return 危大工程专项施工方案列表 + */ + List queryList(HseSpecialPlanBo bo); + + /** + * 新增危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSpecialPlanBo bo); + + /** + * 修改危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSpecialPlanBo bo); + + /** + * 校验并批量删除危大工程专项施工方案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 统计 + */ + HseSpecialPlanCountVo count(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java new file mode 100644 index 00000000..8bd887dd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java @@ -0,0 +1,355 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sse.dto.SseMessageDto; +import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.enums.HseSafetyInspectionReviewTypeEnum; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.RectifyTimesVo; +import org.dromara.safety.mapper.HazardHiddenDangerRectifyMapper; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.websocket.ChatServerHandler; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 隐患整改情况Service业务层处理 + * + * @author lilemy + * @date 2025-12-04 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl + implements IHazardHiddenDangerRectifyService { + + private final IHazardHiddenDangerService hazardHiddenDangerService; + + private final ChatServerHandler chatServerHandler; + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + /** + * 查询隐患整改情况 + * + * @param id 主键 + * @return 隐患整改情况 + */ + @Override + public HazardHiddenDangerVo queryById(Long id) { + HazardHiddenDangerVo dangerVo = hazardHiddenDangerService.queryById(id); + if (dangerVo == null) { + throw new ServiceException("未找到该数据"); + } + List dangerRectifyVos = baseMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class) + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByAsc(HazardHiddenDangerRectify::getRectifyCount)); + dangerVo.setRectifyList(dangerRectifyVos); + return dangerVo; + } + + /** + * 分页查询隐患整改情况列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患整改情况分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = hazardHiddenDangerService.buildQueryWrapper(bo); + lqw.ne(HazardHiddenDanger::getStatus, HazardHiddenDanger.EVALUATE); + TableDataInfo result = hazardHiddenDangerService.queryPageList(lqw, pageQuery); + List rows = result.getRows(); + if (CollUtil.isNotEmpty(rows)) { + List ids = rows.stream().map(HazardHiddenDangerVo::getId).toList(); + List rectifyTimes = baseMapper.getLatestRectifyTimes(ids); + rows.forEach(row -> rectifyTimes.stream() + .filter(rectifyTimesVo -> rectifyTimesVo.getHiddenDangerId().equals(row.getId())) + .findFirst() + .ifPresent(rectifyTime -> row.setLatestRectifyTimes(rectifyTime.getLatestRectifyTimes()))); + } + return TableDataInfo.build(rows); + } + + /** + * 查询符合条件的隐患整改情况列表 + * + * @param bo 查询条件 + * @return 隐患整改情况列表 + */ + @Override + public List queryList(HazardHiddenDangerRectifyBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerRectifyBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardHiddenDangerRectify::getId); + lqw.eq(bo.getHiddenDangerId() != null, HazardHiddenDangerRectify::getHiddenDangerId, bo.getHiddenDangerId()); + lqw.eq(bo.getRectifyUserId() != null, HazardHiddenDangerRectify::getRectifyUserId, bo.getRectifyUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyDesc()), HazardHiddenDangerRectify::getRectifyDesc, bo.getRectifyDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyFiles()), HazardHiddenDangerRectify::getRectifyFiles, bo.getRectifyFiles()); + lqw.eq(bo.getRectifyTime() != null, HazardHiddenDangerRectify::getRectifyTime, bo.getRectifyTime()); + lqw.eq(bo.getReviewUserId() != null, HazardHiddenDangerRectify::getReviewUserId, bo.getReviewUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewDesc()), HazardHiddenDangerRectify::getReviewDesc, bo.getReviewDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewFiles()), HazardHiddenDangerRectify::getReviewFiles, bo.getReviewFiles()); + lqw.eq(bo.getReviewTime() != null, HazardHiddenDangerRectify::getReviewTime, bo.getReviewTime()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewStatus()), HazardHiddenDangerRectify::getReviewStatus, bo.getReviewStatus()); + return lqw; + } + + /** + * 新增隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HazardHiddenDangerRectifyBo bo) { + HazardHiddenDangerRectify add = MapstructUtils.convert(bo, HazardHiddenDangerRectify.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardHiddenDangerRectifyBo bo) { + HazardHiddenDangerRectify update = MapstructUtils.convert(bo, HazardHiddenDangerRectify.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 隐患整改 + * + * @param req 隐患整改参数 + * @return 是否整改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean rectification(HazardHiddenDangerRectifyRectificationReq req) { + + Long id = req.getId(); + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id); + if (hiddenDanger == null) { + throw new ServiceException("未找到该数据"); + } + HazardHiddenDangerRectify oldRectify = this.lambdaQuery() + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByDesc(HazardHiddenDangerRectify::getRectifyCount) + .last("limit 1") + .one(); + // todo 待完善 +/* Long userId = LoginHelper.getUserId(); + if (!oldRectify.getRectifyUserId().equals(userId)) { + throw new ServiceException("您没有权限修改该数据"); + }*/ + if (!oldRectify.getReviewStatus().equals(HseSafetyInspectionReviewTypeEnum.NOT_REVIEW.getValue())) { + throw new ServiceException("该数据已审核,请勿重复操作"); + } + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + rectify.setId(oldRectify.getId()); + rectify.setRectifyDesc(req.getRectifyDesc()); + rectify.setRectifyFiles(req.getRectifyFiles()); + rectify.setRectifyTime(LocalDateTime.now()); + boolean update = this.updateById(rectify); + if (!update) { + throw new ServiceException("数据修改失败"); + } + // 修改隐患状态 + hiddenDanger.setStatus(HazardHiddenDanger.REVIEW); + boolean update1 = hazardHiddenDangerService.updateById(hiddenDanger); + if (!update1) { + throw new ServiceException("数据修改失败"); + } + return true; + } + + /** + * 隐患复查 + * + * @param req 隐患复查参数 + * @return 是否审核成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean review(HazardHiddenDangerRectifyReviewReq req) { + Long id = req.getId(); + String reviewStatus = req.getReviewStatus(); + Long rectifyUserId = req.getRectifyUserId(); + if (!reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.PASS.getValue()) + && !reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.UNPASS.getValue())) { + throw new ServiceException("请选择复查状态"); + } + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id); + if (hiddenDanger == null) { + 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(); + String reviewDesc = req.getReviewDesc(); + String reviewFiles = req.getReviewFiles(); + BeanUtils.copyProperties(req, rectify); + rectify.setId(rectifyId); + rectify.setReviewDesc(reviewDesc); + rectify.setReviewFiles(reviewFiles); + rectify.setReviewStatus(reviewStatus); + rectify.setReviewTime(now); + synchronized (("hd_" + id).intern()) { + boolean update = this.updateById(rectify); + if (!update) { + throw new ServiceException("数据修改失败"); + } + // 修改隐患状态 + if (reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.PASS.getValue())) { + // 修改状态 + hiddenDanger.setStatus(HazardHiddenDanger.CLOSED); + } else { + LocalDateTime rectificationDeadline = req.getRectificationDeadline(); + if (rectificationDeadline == null) { + throw new ServiceException("请选择整改期限"); + } + if (rectificationDeadline.isBefore(now)) { + throw new ServiceException("整改期限不能小于当前时间"); + } + // 修改状态 + hiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); + // 设置新的整改期限 + hiddenDanger.setRectifyTime(rectificationDeadline); + // 生成新的整改 + HazardHiddenDangerRectify newRectify = new HazardHiddenDangerRectify(); + newRectify.setHiddenDangerId(id); + newRectify.setRectifyCount(oldRectify.getRectifyCount() + 1); + newRectify.setReviewUserId(rectify.getReviewUserId()); + newRectify.setRectifyUserId(rectifyUserId != null ? rectifyUserId : oldRectify.getRectifyUserId()); + newRectify.setRectifyDeadline(rectificationDeadline); + boolean save = this.save(newRectify); + if (!save) { + throw new ServiceException("数据保存失败"); + } + } + boolean update1 = hazardHiddenDangerService.updateById(hiddenDanger); + if (!update1) { + throw new ServiceException("数据修改失败"); + } + return true; + } + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardHiddenDangerRectify entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除隐患整改情况信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 发送超时通知 + * + * @param bizId 业务id + */ + @Override + public void sendTimeoutNotify(Long bizId) { + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(bizId); + if (hiddenDanger == null) { + throw new ServiceException("未找到该数据"); + } + if (!HazardHiddenDanger.RECTIFY.equals(hiddenDanger.getStatus())) { + return; + } + // 发送消息 + String dangerCode = hiddenDanger.getDangerCode(); + Long rectifyUserId = hiddenDanger.getRectifyUserId(); + Long projectId = hiddenDanger.getProjectId(); + String titleRectify = "您的安全隐患工单[" + dangerCode + "]已超时,请及时处理!"; + try { + chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); + SseMessageUtils.sendMessage(rectifyUserId, titleRectify); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", rectifyUserId, titleRectify, e); + } + // 发送给需要通知的对象 + Set userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hiddenDanger.getDangerLevelId(), projectId); + SseMessageDto sseDto = new SseMessageDto(); + String title = "安全隐患工单[" + dangerCode + "]未进行整改,请及时关注!"; + for (Long userId : userIds) { + try { + chatServerHandler.sendSystemMessageToUser(userId, title, "2"); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, title, e); + } + } + sseDto.setUserIds(userIds.stream().toList()); + sseDto.setMessage(title); + sseDto.setRoute(""); + sseDto.setProjectId(projectId); + sseDto.setIsRecord(true); + SseMessageUtils.publishMessage(sseDto); + } +} 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 new file mode 100644 index 00000000..4152b2c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -0,0 +1,306 @@ +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.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.sse.dto.SseMessageDto; +import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.enums.MqDelayTaskTypeEnum; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +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.HiddenDangerCountVo; +import org.dromara.safety.mapper.HazardHiddenDangerMapper; +import org.dromara.safety.mapper.HazardHiddenDangerRectifyMapper; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.safety.service.IHazardRuleService; +import org.dromara.websocket.ChatServerHandler; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +/** + * 隐患信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerServiceImpl extends ServiceImpl + implements IHazardHiddenDangerService { + + private final HazardHiddenDangerMapper baseMapper; + + private final IHazardRuleService hazardRuleService; + + private final HazardHiddenDangerRectifyMapper hazardHiddenDangerRectifyMapper; + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + private final ChatServerHandler chatServerHandler; + + private final IMqDelayTaskService mqDelayTaskService; + + /** + * 查询隐患信息 + * + * @param id 主键 + * @return 隐患信息 + */ + @Override + public HazardHiddenDangerVo queryById(Long id) { + HazardHiddenDangerVo dangerVo = baseMapper.selectVoById(id); + if (dangerVo == null) { + throw new ServiceException("未找到该数据"); + } + List dangerRectifyVos = hazardHiddenDangerRectifyMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class) + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByAsc(HazardHiddenDangerRectify::getRectifyCount)); + dangerVo.setRectifyList(dangerRectifyVos); + return dangerVo; + } + + /** + * 分页查询隐患信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 分页查询隐患信息列表 + * + * @param lqw 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + @Override + public TableDataInfo queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery) { + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的隐患信息列表 + * + * @param bo 查询条件 + * @return 隐患信息列表 + */ + @Override + public List queryList(HazardHiddenDangerBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + /** + * 构建查询条件 + * + * @param bo 查询条件 + * @return 查询条件 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo) { + Map 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()); + lqw.eq(bo.getReporter() != null, HazardHiddenDanger::getReporter, bo.getReporter()); + lqw.eq(bo.getReportTime() != null, HazardHiddenDanger::getReportTime, bo.getReportTime()); + lqw.eq(bo.getDangerLevelId() != null, HazardHiddenDanger::getDangerLevelId, bo.getDangerLevelId()); + lqw.eq(bo.getEvaluator() != null, HazardHiddenDanger::getEvaluator, bo.getEvaluator()); + lqw.eq(bo.getEvaluateTime() != null, HazardHiddenDanger::getEvaluateTime, bo.getEvaluateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getEvaluateBasis()), HazardHiddenDanger::getEvaluateBasis, bo.getEvaluateBasis()); + lqw.eq(StringUtils.isNotBlank(bo.getReporterOpinion()), HazardHiddenDanger::getReporterOpinion, bo.getReporterOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReporterFile()), HazardHiddenDanger::getReporterFile, bo.getReporterFile()); + lqw.eq(bo.getRectifyTime() != null, HazardHiddenDanger::getRectifyTime, bo.getRectifyTime()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyUnit()), HazardHiddenDanger::getRectifyUnit, bo.getRectifyUnit()); + lqw.eq(bo.getRectifyUnitId() != null, HazardHiddenDanger::getRectifyUnitId, bo.getRectifyUnitId()); + lqw.eq(bo.getRectifyUserId() != null, HazardHiddenDanger::getRectifyUserId, bo.getRectifyUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HazardHiddenDanger::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增隐患信息 + * + * @param bo 隐患信息 + * @return 是否新增成功 + */ + @Override + 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()); + } + return flag; + } + + /** + * 修改隐患信息 + * + * @param bo 隐患信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardHiddenDangerBo bo) { + HazardHiddenDanger update = MapstructUtils.convert(bo, HazardHiddenDanger.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardHiddenDanger entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除隐患信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 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 + @Transactional(rollbackFor = Exception.class) + 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())); + } + LocalDateTime rectifyTime = hazardHiddenDanger.getRectifyTime(); + if (rectifyTime.isBefore(LocalDateTime.now())) { + throw new ServiceException("整改期限不能小于当前时间"); + } + // 修改数据 + if (baseMapper.updateById(hazardHiddenDanger) <= 0) { + throw new ServiceException("数据修改失败"); + } + // 添加整改任务 + Long rectifyUserId = hazardHiddenDanger.getRectifyUserId(); + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + rectify.setHiddenDangerId(dto.getId()); + rectify.setRectifyDeadline(rectifyTime); + rectify.setRectifyUserId(rectifyUserId); + rectify.setReviewUserId(hazardHiddenDanger.getEvaluator()); + rectify.setRectifyCount(1); + if (hazardHiddenDangerRectifyMapper.insert(rectify) <= 0) { + throw new ServiceException("数据保存失败"); + } + Long projectId = hazardHiddenDanger.getProjectId(); + String dangerCode = hazardHiddenDanger.getDangerCode(); + // 通知对应人员 + CompletableFuture.runAsync(() -> { + // 发送给整改人员 + String titleRectify = "您有新的安全隐患工单[" + dangerCode + "]需要整改,请及时处理!"; + try { + chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); + SseMessageUtils.sendMessage(rectifyUserId, titleRectify); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", rectifyUserId, titleRectify, e); + } + // 发送给需要通知的对象 + Set userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hazardHiddenDanger.getDangerLevelId(), projectId); + SseMessageDto sseDto = new SseMessageDto(); + String title = "您有新的安全隐患工单[" + dangerCode + "],请及时查看!"; + for (Long userId : userIds) { + try { + chatServerHandler.sendSystemMessageToUser(userId, title, "2"); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, title, e); + } + } + sseDto.setUserIds(userIds.stream().toList()); + sseDto.setMessage(title); + sseDto.setRoute(""); + sseDto.setProjectId(projectId); + sseDto.setIsRecord(true); + SseMessageUtils.publishMessage(sseDto); + // 发送整改期限数据到消息队列 + MqDelayTask task = new MqDelayTask(); + task.setBizType(MqDelayTaskTypeEnum.HIDDEN_DANGER.getType()); + task.setBizId(dto.getId()); + task.setExecuteTime(rectifyTime); + try { + mqDelayTaskService.addDelayTask(task); + } catch (Exception e) { + log.error("添加延迟任务失败,延迟任务: {}", task, e); + } + }); + return true; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java new file mode 100644 index 00000000..f5baf6ef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java @@ -0,0 +1,205 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.mapper.HazardRuleNotifyObjectMapper; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.domain.vo.SysRoleVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysPostService; +import org.dromara.system.service.ISysRoleService; +import org.dromara.system.service.ISysUserService; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 隐患规则通知对象Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl + implements IHazardRuleNotifyObjectService { + + private final ISysUserService userService; + + private final ISysRoleService roleService; + + private final ISysDeptService deptService; + + private final ISysPostService postService; + + /** + * 根据规则查询通知对象 + * + * @param ruleId 规则id + * @return 通知对象 + */ + @Override + public List queryVoByRule(Long ruleId) { + List objectList = this.lambdaQuery() + .eq(HazardRuleNotifyObject::getRuleId, ruleId) + .list(); + return this.queryVo(objectList); + } + + /** + * 根据对象列表查询对象列表 + * + * @param objectList 对象列表 + * @return 对象列表 + */ + @Override + public List queryVo(List objectList) { + List voList = new ArrayList<>(); + Map> map = objectList.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObject::getNotifyType)); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + List ids = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + switch (key) { + case "1" -> { + List userVos = userService.selectUserByIds(ids, null); + Map userNameMap = userVos.stream() + .collect(Collectors.toMap(SysUserVo::getUserId, SysUserVo::getNickName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(userNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "2" -> { + List roleVos = roleService.selectRoleByIds(ids); + Map roleNameMap = roleVos.stream() + .collect(Collectors.toMap(SysRoleVo::getRoleId, SysRoleVo::getRoleName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(roleNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "3" -> { + List deptVos = deptService.selectDeptByIds(ids); + Map deptNameMap = deptVos.stream() + .collect(Collectors.toMap(SysDeptVo::getDeptId, SysDeptVo::getDeptName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(deptNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "4" -> { + List postVos = postService.selectPostByIds(ids); + Map postNameMap = postVos.stream() + .collect(Collectors.toMap(SysPostVo::getPostId, SysPostVo::getPostName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(postNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + } + } + return voList; + } + + /** + * 根据规则查询所有通知对象id + * + * @param ruleId 规则id + * @param projectId 项目id + * @return 通知对象id + */ + @Override + public Set queryNotifyObjectIds(Long ruleId, Long projectId) { + List objectList = this.lambdaQuery() + .eq(HazardRuleNotifyObject::getRuleId, ruleId) + .list(); + if (CollUtil.isEmpty(objectList)) { + return Collections.emptySet(); + } + Set userIds = new HashSet<>(); + Map> map = objectList.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObject::getNotifyType)); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + List ids = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + switch (key) { + case "1" -> userIds.addAll(ids); + case "2" -> { + List userVos = userService.selectUserByRoleIdsAndProjectId(ids, projectId); + Set userSet = userVos.stream().map(SysUser::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + case "3" -> { + List userVos = userService.selectUserListByDeptList(ids); + Set userSet = userVos.stream().map(SysUserVo::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + case "4" -> { + List userVos = userService.selectUserListByPostList(ids); + Set userSet = userVos.stream().map(SysUserVo::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + } + } + return userIds; + } + + /** + * 补充数据 + * + * @param voList 规则列表 + */ + @Override + public void supplementDataByRule(List voList) { + if (CollUtil.isEmpty(voList)) { + return; + } + List ruleIds = voList.stream().map(HazardRuleVo::getId).toList(); + List objectList = this.lambdaQuery() + .in(HazardRuleNotifyObject::getRuleId, ruleIds) + .list(); + List objectVos = this.queryVo(objectList); + Map> map = objectVos.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObjectVo::getRuleId)); + for (HazardRuleVo vo : voList) { + List vos = map.get(vo.getId()); + vo.setNotifyObjects(vos); + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java new file mode 100644 index 00000000..e6d118b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java @@ -0,0 +1,221 @@ +package org.dromara.safety.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.constant.HttpStatus; +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.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.bo.HazardRuleNotifyObjectBo; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.mapper.HazardRuleMapper; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患分级通知规则Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleServiceImpl extends ServiceImpl + implements IHazardRuleService { + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + @Lazy + @Resource + private IHazardHiddenDangerService hazardHiddenDangerService; + + /** + * 查询隐患分级通知规则 + * + * @param id 主键 + * @return 隐患分级通知规则 + */ + @Override + public HazardRuleVo queryById(Long id) { + HazardRuleVo hazardRuleVo = baseMapper.selectVoById(id); + List objectVos = hazardRuleNotifyObjectService.queryVoByRule(id); + hazardRuleVo.setNotifyObjects(objectVos); + return hazardRuleVo; + } + + /** + * 分页查询隐患分级通知规则列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患分级通知规则分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardRuleBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + hazardRuleNotifyObjectService.supplementDataByRule(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的隐患分级通知规则列表 + * + * @param bo 查询条件 + * @return 隐患分级通知规则列表 + */ + @Override + public List queryList(HazardRuleBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardRuleBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardRule::getId); + lqw.eq(bo.getProjectId() != null, HazardRule::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getHazardLevel()), HazardRule::getHazardLevel, bo.getHazardLevel()); + lqw.eq(bo.getHazardWeight() != null, HazardRule::getHazardWeight, bo.getHazardWeight()); + lqw.eq(bo.getResponseTime() != null, HazardRule::getResponseTime, bo.getResponseTime()); + lqw.eq(StringUtils.isNotBlank(bo.getResponseUnit()), HazardRule::getResponseUnit, bo.getResponseUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getNotifyMethod()), HazardRule::getNotifyMethod, bo.getNotifyMethod()); + lqw.eq(StringUtils.isNotBlank(bo.getTimeoutAction()), HazardRule::getTimeoutAction, bo.getTimeoutAction()); + lqw.eq(StringUtils.isNotBlank(bo.getExtraSetting()), HazardRule::getExtraSetting, bo.getExtraSetting()); + return lqw; + } + + /** + * 新增隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HazardRuleBo bo) { + HazardRule add = MapstructUtils.convert(bo, HazardRule.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + List notifyObjects = bo.getNotifyObjects(); + List objectList = notifyObjects.stream().map(item -> { + HazardRuleNotifyObject notifyObject = new HazardRuleNotifyObject(); + notifyObject.setRuleId(add.getId()); + notifyObject.setNotifyId(item.getNotifyId()); + notifyObject.setNotifyType(item.getNotifyType()); + return notifyObject; + }).toList(); + boolean b = hazardRuleNotifyObjectService.saveBatch(objectList); + if (!b) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + return flag; + } + + /** + * 修改隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HazardRuleBo bo) { + HazardRule oldRule = this.getById(bo.getId()); + if (oldRule == null) { + throw new ServiceException("数据不存在", HttpStatus.ERROR); + } + HazardRule update = MapstructUtils.convert(bo, HazardRule.class); + validEntityBeforeSave(update); + boolean b = baseMapper.updateById(update) > 0; + if (b) { + // 旧通知对象 + boolean remove = hazardRuleNotifyObjectService.remove(new LambdaQueryWrapper() + .eq(HazardRuleNotifyObject::getRuleId, bo.getId())); + if (!remove) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + // 新通知对象 + List notifyObjects = bo.getNotifyObjects(); + List objectList = notifyObjects.stream().map(item -> { + HazardRuleNotifyObject notifyObject = new HazardRuleNotifyObject(); + notifyObject.setRuleId(bo.getId()); + notifyObject.setNotifyId(item.getNotifyId()); + notifyObject.setNotifyType(item.getNotifyType()); + return notifyObject; + }).toList(); + boolean b1 = hazardRuleNotifyObjectService.saveBatch(objectList); + if (!b1) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + return b; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardRule entity) { + //TODO 做一些数据校验,如唯一约束 + Long id = entity.getId(); + Long projectId = entity.getProjectId(); + Integer hazardWeight = entity.getHazardWeight(); + String hazardLevel = entity.getHazardLevel(); + Long count = this.lambdaQuery() + .ne(id != null, HazardRule::getId, id) + .eq(HazardRule::getHazardWeight, hazardWeight) + .eq(HazardRule::getProjectId, projectId) + .count(); + if (count > 0) { + throw new ServiceException("权重已存在", HttpStatus.ERROR); + } + Long count1 = this.lambdaQuery() + .ne(id != null, HazardRule::getId, id) + .eq(HazardRule::getHazardLevel, hazardLevel) + .eq(HazardRule::getProjectId, projectId) + .count(); + if (count1 > 0) { + throw new ServiceException("等级已存在", HttpStatus.ERROR); + } + } + + /** + * 校验并批量删除隐患分级通知规则信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + if (hazardHiddenDangerService.lambdaQuery() + .in(HazardHiddenDanger::getDangerLevelId, ids) + .count() > 0) { + throw new ServiceException("请先删除该等级下的隐患信息", HttpStatus.ERROR); + } + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java new file mode 100644 index 00000000..ef16c3f4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java @@ -0,0 +1,194 @@ +package org.dromara.safety.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.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; +import org.dromara.safety.domain.HseDangerArchive; +import org.dromara.safety.mapper.HseDangerArchiveMapper; +import org.dromara.safety.service.IHseDangerArchiveService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 危大工程档案Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseDangerArchiveServiceImpl extends ServiceImpl implements IHseDangerArchiveService { + + private final HseDangerArchiveMapper baseMapper; + + @Autowired + @Lazy + private IHseGcjkService hseGcjkService; + + @Autowired + @Lazy + private final IHseJsjdService hseJsjdService; + + /** + * 查询危大工程档案 + * + * @param id 主键 + * @return 危大工程档案 + */ + @Override + public HseDangerArchiveVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程档案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程档案分页列表 + */ + @Override + public TableDataInfo queryPageList(HseDangerArchiveBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的危大工程档案列表 + * + * @param bo 查询条件 + * @return 危大工程档案列表 + */ + @Override + public List queryList(HseDangerArchiveBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseDangerArchiveBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseDangerArchive::getId); + lqw.eq(bo.getProjectId() != null, HseDangerArchive::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveNo()), HseDangerArchive::getArchiveNo, bo.getArchiveNo()); + lqw.eq(bo.getDeId() != null, HseDangerArchive::getDeId, bo.getDeId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseDangerArchive::getDeName, bo.getDeName()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveCategory()), HseDangerArchive::getArchiveCategory, bo.getArchiveCategory()); + lqw.eq(bo.getArchiveDate() != null, HseDangerArchive::getArchiveDate, bo.getArchiveDate()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiver()), HseDangerArchive::getArchiver, bo.getArchiver()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveUnit()), HseDangerArchive::getArchiveUnit, bo.getArchiveUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskLevel()), HseDangerArchive::getRiskLevel, bo.getRiskLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionUnit()), HseDangerArchive::getConstructionUnit, bo.getConstructionUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getSection()), HseDangerArchive::getSection, bo.getSection()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveKeywords()), HseDangerArchive::getArchiveKeywords, bo.getArchiveKeywords()); + lqw.eq(StringUtils.isNotBlank(bo.getFinalPlanFile()), HseDangerArchive::getFinalPlanFile, bo.getFinalPlanFile()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertArgumentFile()), HseDangerArchive::getExpertArgumentFile, bo.getExpertArgumentFile()); + lqw.eq(StringUtils.isNotBlank(bo.getTechnicalFile()), HseDangerArchive::getTechnicalFile, bo.getTechnicalFile()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionRecordFile()), HseDangerArchive::getSupervisionRecordFile, bo.getSupervisionRecordFile()); + lqw.eq(StringUtils.isNotBlank(bo.getMonitoringLogFile()), HseDangerArchive::getMonitoringLogFile, bo.getMonitoringLogFile()); + lqw.eq(StringUtils.isNotBlank(bo.getAcceptanceCertificateFile()), HseDangerArchive::getAcceptanceCertificateFile, bo.getAcceptanceCertificateFile()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionMediaFile()), HseDangerArchive::getConstructionMediaFile, bo.getConstructionMediaFile()); + return lqw; + } + + /** + * 新增危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseDangerArchiveBo bo) { + HseDangerArchive add = MapstructUtils.convert(bo, HseDangerArchive.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseDangerArchiveBo bo) { + HseDangerArchive update = MapstructUtils.convert(bo, HseDangerArchive.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseDangerArchive entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除危大工程档案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseJsjdYuJkjcVo getJsjdYGcjk(Long id) { + HseJsjdYuJkjcVo hseJsjdYuJkjcVo = new HseJsjdYuJkjcVo(); + if (id == null) throw new RuntimeException("危大工程不能为空"); + //技术交底 + HseJsjd hseGcjk = hseJsjdService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(org.dromara.safety.jsjd.domain.HseJsjd::getMasterId, id)); + if (hseGcjk != null){ + hseJsjdYuJkjcVo.setJsjdFile(hseGcjk.getFileId()); + } + + //过程监控 + List hseJsjds = hseGcjkService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseGcjk::getMasterId, id)); + if (hseJsjds != null && hseJsjds.size() != 0){ + StringBuffer stringBuffer = new StringBuffer(); + StringBuffer sb = new StringBuffer(); + hseJsjds.forEach(hseJsjd -> { + if (hseJsjd.getIsOnSiteSupervision().equals("1") && hseJsjd.getSupervisionJl() != null) { + sb.append(hseJsjd.getSupervisionJl()).append(","); + } + if (hseJsjd.getFileId() != null) { + stringBuffer.append(hseJsjd.getFileId()).append(","); + } + }); + hseJsjdYuJkjcVo.setGcjkFile(stringBuffer.toString()); + hseJsjdYuJkjcVo.setPzjtFile(sb.toString()); + } + + return hseJsjdYuJkjcVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java new file mode 100644 index 00000000..a87afeed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java @@ -0,0 +1,146 @@ +package org.dromara.safety.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.springframework.stereotype.Service; +import org.dromara.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.safety.mapper.HseDangerousEngineeringMapper; +import org.dromara.safety.service.IHseDangerousEngineeringService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 危大工程信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseDangerousEngineeringServiceImpl extends ServiceImpl + implements IHseDangerousEngineeringService { + + private final HseDangerousEngineeringMapper baseMapper; + + /** + * 查询危大工程信息 + * + * @param id 主键 + * @return 危大工程信息 + */ + @Override + public HseDangerousEngineeringVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseDangerousEngineeringBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的危大工程信息列表 + * + * @param bo 查询条件 + * @return 危大工程信息列表 + */ + @Override + public List queryList(HseDangerousEngineeringBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseDangerousEngineeringBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseDangerousEngineering::getId); + lqw.eq(bo.getProjectId() != null, HseDangerousEngineering::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseDangerousEngineering::getDeName, bo.getDeName()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskLevel()), HseDangerousEngineering::getRiskLevel, bo.getRiskLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkType()), HseDangerousEngineering::getWorkType, bo.getWorkType()); + lqw.eq(bo.getStartTime() != null, HseDangerousEngineering::getStartTime, bo.getStartTime()); + lqw.eq(bo.getEndTime() != null, HseDangerousEngineering::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkPlace()), HseDangerousEngineering::getWorkPlace, bo.getWorkPlace()); + lqw.eq(bo.getSubcontractorId() != null, HseDangerousEngineering::getSubcontractorId, bo.getSubcontractorId()); + lqw.eq(StringUtils.isNotBlank(bo.getSubcontractor()), HseDangerousEngineering::getSubcontractor, bo.getSubcontractor()); + lqw.eq(bo.getTeamId() != null, HseDangerousEngineering::getTeamId, bo.getTeamId()); + lqw.like(StringUtils.isNotBlank(bo.getTeamName()), HseDangerousEngineering::getTeamName, bo.getTeamName()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectManager()), HseDangerousEngineering::getProjectManager, bo.getProjectManager()); + lqw.eq(StringUtils.isNotBlank(bo.getSiteManager()), HseDangerousEngineering::getSiteManager, bo.getSiteManager()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyPhone()), HseDangerousEngineering::getEmergencyPhone, bo.getEmergencyPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionUnit()), HseDangerousEngineering::getConstructionUnit, bo.getConstructionUnit()); + return lqw; + } + + /** + * 新增危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseDangerousEngineeringBo bo) { + HseDangerousEngineering add = MapstructUtils.convert(bo, HseDangerousEngineering.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseDangerousEngineeringBo bo) { + HseDangerousEngineering update = MapstructUtils.convert(bo, HseDangerousEngineering.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseDangerousEngineering entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除危大工程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java index 77bc7338..285421b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java @@ -215,7 +215,7 @@ public class HseQuestionUserAnswerServiceImpl extends ServiceImpl idCardList = tempList.stream().map(HseQuestionUserAnswerUploadTemp::getUserIdCard) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java new file mode 100644 index 00000000..711e3880 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java @@ -0,0 +1,282 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.event.ProcessDeleteEvent; +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; +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.design.domain.DesScheme; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.service.IHseRpObjectService; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictTypeService; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.HseRewardsPunishments; +import org.dromara.safety.mapper.HseRewardsPunishmentsMapper; +import org.dromara.safety.service.IHseRewardsPunishmentsService; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 奖惩记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class HseRewardsPunishmentsServiceImpl extends ServiceImpl implements IHseRewardsPunishmentsService { + + private final HseRewardsPunishmentsMapper baseMapper; + + private final IHseRpObjectService rpObjectService; + + private final ISysDictTypeService dictTypeService; + /** + * 查询奖惩记录 + * + * @param id 主键 + * @return 奖惩记录 + */ + @Override + public HseRewardsPunishmentsVo queryById(Long id){ + HseRewardsPunishmentsVo hseRewardsPunishmentsVo = baseMapper.selectVoById(id); + HseRpObjectBo hseRpObjectBo = new HseRpObjectBo(); + hseRpObjectBo.setRpId(id); + List hseRpPersonVos = rpObjectService.queryList(hseRpObjectBo); + hseRewardsPunishmentsVo.setRpObjects(hseRpPersonVos); + return hseRewardsPunishmentsVo; + } + + /** + * 分页查询奖惩记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩记录分页列表 + */ + @Override + public TableDataInfo queryPageList(HseRewardsPunishmentsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的奖惩记录列表 + * + * @param bo 查询条件 + * @return 奖惩记录列表 + */ + @Override + public List queryList(HseRewardsPunishmentsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseRewardsPunishmentsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseRewardsPunishments::getId); + lqw.eq(bo.getProjectId()!=null, HseRewardsPunishments::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getRpCode()), HseRewardsPunishments::getRpCode, bo.getRpCode()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), HseRewardsPunishments::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getCategory()), HseRewardsPunishments::getCategory, bo.getCategory()); + lqw.eq(bo.getAmount() != null, HseRewardsPunishments::getAmount, bo.getAmount()); + lqw.eq(bo.getRelatedWorkId() != null, HseRewardsPunishments::getRelatedWorkId, bo.getRelatedWorkId()); + lqw.eq(bo.getSubmitter() != null, HseRewardsPunishments::getSubmitter, bo.getSubmitter()); + lqw.eq(StringUtils.isNotBlank(bo.getRecipientType()), HseRewardsPunishments::getRecipientType, bo.getRecipientType()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HseRewardsPunishments::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getReason()), HseRewardsPunishments::getReason, bo.getReason()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseRewardsPunishments::getFile, bo.getFile()); + lqw.between(bo.getStartTime()!=null && bo.getEndTime()!=null, HseRewardsPunishments::getCreateTime, bo.getStartTime(), bo.getEndTime()); + return lqw; + } + + /** + * 新增奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments add = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setRpCode("JC-" + id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + List hseRpObjects = new ArrayList<>(); + for (HseRpObjectBo item : bo.getRpObjects()) { + HseRpObject hseRpObject = new HseRpObject(); + hseRpObject.setRpId(add.getId()); + hseRpObject.setObjectId(item.getObjectId()); + hseRpObject.setObjectName(item.getObjectName()); + hseRpObject.setAmount(item.getAmount()); + hseRpObjects.add(hseRpObject); + } + if (!hseRpObjects.isEmpty()) { + rpObjectService.saveBatch(hseRpObjects); + } + return flag; + } + + /** + * 修改奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments update = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(update); + rpObjectService.lambdaUpdate().eq(HseRpObject::getRpId, update.getId()).remove(); + List hseRpObjects = new ArrayList<>(); + for (HseRpObjectBo item : bo.getRpObjects()) { + HseRpObject hseRpObject = new HseRpObject(); + hseRpObject.setRpId(update.getId()); + hseRpObject.setObjectId(item.getObjectId()); + hseRpObject.setObjectName(item.getObjectName()); + hseRpObject.setAmount(item.getAmount()); + hseRpObjects.add(hseRpObject); + } + if (!hseRpObjects.isEmpty()) { + rpObjectService.saveBatch(hseRpObjects); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseRewardsPunishments entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除奖惩记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseRPCountVo amountCount(Long projectId) { + List list = lambdaQuery().eq(HseRewardsPunishments::getProjectId, projectId).list(); + HseRPCountVo hseRPCountVo = new HseRPCountVo(); + hseRPCountVo.setTotal(list.size()); + hseRPCountVo.setWaitApproval(list.stream().filter(item -> BusinessStatusEnum.WAITING.getStatus().equals(item.getStatus())).count()); + hseRPCountVo.setReward(list.stream().filter(item -> "1".equals(item.getType())).map(HseRewardsPunishments::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + hseRPCountVo.setPenalty(list.stream().filter(item -> "2".equals(item.getType())).map(HseRewardsPunishments::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + return hseRPCountVo; + } + + @Override + public Map typeCount(Long projectId) { + List list = lambdaQuery().eq(HseRewardsPunishments::getProjectId, projectId).list(); + + // 按category分组并统计数量 + Map categoryCountMap = list.stream() + // 过滤空分类(可选,根据业务需求决定是否保留null分类) + .filter(item -> item.getCategory() != null && !item.getCategory().trim().isEmpty()) + // 分组字段:category,统计方式:计数 + .collect(Collectors.groupingBy( + HseRewardsPunishments::getCategory, // 分组依据 + Collectors.counting() // 统计每个分组的数量 + )); + + List workOrderCategory = dictTypeService.selectDictDataByType("work_order_category"); + Map linkedHashMap = new LinkedHashMap<>(); + for (SysDictDataVo item : workOrderCategory) { + linkedHashMap.put(item.getDictLabel(), categoryCountMap.getOrDefault(item.getDictValue(), 0L)); + } + return linkedHashMap; + } + + /** + * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) + * 正常使用只需#processEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processEvent 参数 + */ + @org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('RewardsPunishments')") + public void processHandler(ProcessEvent processEvent) { + log.info("设计方案审核任务执行了{}", processEvent.toString()); + HseRewardsPunishments rewardsPunishments = this.getById(Convert.toLong(processEvent.getBusinessId())); + rewardsPunishments.setStatus(processEvent.getStatus()); + if (processEvent.getSubmit()) { + rewardsPunishments.setStatus(BusinessStatusEnum.WAITING.getStatus()); + } + this.updateById(rewardsPunishments); + + } + + /** + * 执行任务创建监听 + * 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断 + * 在方法中判断流程节点key + * if ("xxx".equals(processTaskEvent.getNodeCode())) { + * //执行业务逻辑 + * } + * + * @param processTaskEvent 参数 + */ + @org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('completeScheme')") + public void processTaskHandler(ProcessTaskEvent processTaskEvent) { + log.info("设计方案审核任务创建了{}", processTaskEvent.toString()); + } + + /** + * 监听删除流程事件 + * 正常使用只需#processDeleteEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processDeleteEvent 参数 + */ + @EventListener(condition = "#processDeleteEvent.flowCode.endsWith('completeScheme')") + public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) { + log.info("监听删除流程事件,设计方案审核任务执行了{}", processDeleteEvent.toString()); + } + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java new file mode 100644 index 00000000..a44a754b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java @@ -0,0 +1,134 @@ +package org.dromara.safety.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.springframework.stereotype.Service; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.mapper.HseRpObjectMapper; +import org.dromara.safety.service.IHseRpObjectService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 奖惩对象Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class HseRpObjectServiceImpl extends ServiceImpl implements IHseRpObjectService { + + private final HseRpObjectMapper baseMapper; + + /** + * 查询奖惩对象 + * + * @param id 主键 + * @return 奖惩对象 + */ + @Override + public HseRpPersonVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询奖惩对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩对象分页列表 + */ + @Override + public TableDataInfo queryPageList(HseRpObjectBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的奖惩对象列表 + * + * @param bo 查询条件 + * @return 奖惩对象列表 + */ + @Override + public List queryList(HseRpObjectBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseRpObjectBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseRpObject::getId); + lqw.eq(bo.getRpId() != null, HseRpObject::getRpId, bo.getRpId()); + lqw.eq(bo.getObjectId() != null, HseRpObject::getObjectId, bo.getObjectId()); + lqw.like(StringUtils.isNotBlank(bo.getObjectName()), HseRpObject::getObjectName, bo.getObjectName()); + lqw.eq(bo.getAmount() != null, HseRpObject::getAmount, bo.getAmount()); + return lqw; + } + + /** + * 新增奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseRpObjectBo bo) { + HseRpObject add = MapstructUtils.convert(bo, HseRpObject.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseRpObjectBo bo) { + HseRpObject update = MapstructUtils.convert(bo, HseRpObject.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseRpObject entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除奖惩对象信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 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 4cd589f9..890ab8af 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 @@ -198,7 +198,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl topList = teamMeetings.stream() - .sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed()) + .sorted(Comparator.comparing(HseTeamMeeting::getMeetingDate).reversed()) .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) .toList(); List teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList(); @@ -224,6 +224,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl passList = safetyInspectionList.stream() + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .filter(q -> "1".equals(q.getIsReply())) .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) .toList(); @@ -234,6 +235,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl inspections = safetyInspectionList.stream() // .filter(q -> "2".equals(q.getIsReply())) + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .toList() .stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); @@ -394,6 +396,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl + implements IHseSpecialPlanService { + + private final HseSpecialPlanMapper baseMapper; + + + /** + * 查询危大工程专项施工方案 + * + * @param id 主键 + * @return 危大工程专项施工方案 + */ + @Override + public HseSpecialPlanVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程专项施工方案分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSpecialPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @return 危大工程专项施工方案列表 + */ + @Override + public List queryList(HseSpecialPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSpecialPlanBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSpecialPlan::getId); + lqw.eq(bo.getProjectId() != null, HseSpecialPlan::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanNo()), HseSpecialPlan::getPlanNo, bo.getPlanNo()); + lqw.eq(bo.getDeId() != null, HseSpecialPlan::getDeId, bo.getDeId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseSpecialPlan::getDeName, bo.getDeName()); + lqw.like(StringUtils.isNotBlank(bo.getPlanName()), HseSpecialPlan::getPlanName, bo.getPlanName()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanCategory()), HseSpecialPlan::getPlanCategory, bo.getPlanCategory()); + lqw.eq(StringUtils.isNotBlank(bo.getCompileUnit()), HseSpecialPlan::getCompileUnit, bo.getCompileUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getCompiler()), HseSpecialPlan::getCompiler, bo.getCompiler()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewer()), HseSpecialPlan::getReviewer, bo.getReviewer()); + lqw.eq(StringUtils.isNotBlank(bo.getApprove()), HseSpecialPlan::getApprove, bo.getApprove()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionProcess()), HseSpecialPlan::getConstructionProcess, bo.getConstructionProcess()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionParams()), HseSpecialPlan::getConstructionParams, bo.getConstructionParams()); + lqw.eq(StringUtils.isNotBlank(bo.getPersonnelQualification()), HseSpecialPlan::getPersonnelQualification, bo.getPersonnelQualification()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionFile()), HseSpecialPlan::getConstructionFile, bo.getConstructionFile()); + lqw.eq(bo.getNeedExpertArgument() != null, HseSpecialPlan::getNeedExpertArgument, bo.getNeedExpertArgument()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertFile()), HseSpecialPlan::getExpertFile, bo.getExpertFile()); + lqw.eq(StringUtils.isNotBlank(bo.getArgumentConclusion()), HseSpecialPlan::getArgumentConclusion, bo.getArgumentConclusion()); + lqw.eq(bo.getArgumentDate() != null, HseSpecialPlan::getArgumentDate, bo.getArgumentDate()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertLeader()), HseSpecialPlan::getExpertLeader, bo.getExpertLeader()); + lqw.eq(bo.getNeedSupervision() != null, HseSpecialPlan::getNeedSupervision, bo.getNeedSupervision()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionUnit()), HseSpecialPlan::getSupervisionUnit, bo.getSupervisionUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisor()), HseSpecialPlan::getSupervisor, bo.getSupervisor()); + lqw.eq(bo.getSupervisionStartTime() != null, HseSpecialPlan::getSupervisionStartTime, bo.getSupervisionStartTime()); + lqw.eq(bo.getSupervisionEndTime() != null, HseSpecialPlan::getSupervisionEndTime, bo.getSupervisionEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionFile()), HseSpecialPlan::getSupervisionFile, bo.getSupervisionFile()); + lqw.eq(bo.getInvolveEmergencyPlan() != null, HseSpecialPlan::getInvolveEmergencyPlan, bo.getInvolveEmergencyPlan()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyPlanNo()), HseSpecialPlan::getEmergencyPlanNo, bo.getEmergencyPlanNo()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewRecord()), HseSpecialPlan::getReviewRecord, bo.getReviewRecord()); + lqw.eq(bo.getRecordTime() != null, HseSpecialPlan::getRecordTime, bo.getRecordTime()); + lqw.eq(StringUtils.isNotBlank(bo.getRecordUnit()), HseSpecialPlan::getRecordUnit, bo.getRecordUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getRecordFileNo()), HseSpecialPlan::getRecordFileNo, bo.getRecordFileNo()); + return lqw; + } + + /** + * 新增危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSpecialPlanBo bo) { + HseSpecialPlan add = MapstructUtils.convert(bo, HseSpecialPlan.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setPlanNo("FA-" + id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSpecialPlanBo bo) { + HseSpecialPlan update = MapstructUtils.convert(bo, HseSpecialPlan.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSpecialPlan entity){ + boolean exists = lambdaQuery().eq(HseSpecialPlan::getDeId, entity.getDeId()) + .ne(entity.getId() != null, HseSpecialPlan::getId, entity.getId()).exists(); + if (exists) { + throw new ServiceException("该工程已有方案"); + } + } + + /** + * 校验并批量删除危大工程专项施工方案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseSpecialPlanCountVo count(Long projectId) { + List list = lambdaQuery().eq(HseSpecialPlan::getProjectId, projectId).list(); + HseSpecialPlanCountVo vo = new HseSpecialPlanCountVo(); + vo.setTotal(list.size()); + vo.setNeedExpertArgumentNum(list.stream().filter(item -> item.getNeedExpertArgument() == 1).count()); + vo.setNeedSupervisionNum(list.stream().filter(item -> item.getNeedSupervision() == 1).count()); + return vo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java index faad7f7c..05fedc0a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java @@ -21,10 +21,7 @@ import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.service.IBusProjectTeamMemberService; -import org.dromara.safety.domain.HseRecognizeRecord; -import org.dromara.safety.domain.HseViolationLevel; -import org.dromara.safety.domain.HseViolationLevelRole; -import org.dromara.safety.domain.HseViolationRecord; +import org.dromara.safety.domain.*; import org.dromara.safety.domain.dto.violationrecord.*; import org.dromara.safety.domain.enums.HseSafetyInspectionReviewTypeEnum; import org.dromara.safety.domain.enums.HseSafetyInspectionStatusEnum; @@ -343,6 +340,7 @@ public class HseViolationRecordServiceImpl extends ServiceImpl selectLatestList(HseViolationRecordQueryReq req) { +// LambdaQueryWrapper lqw = this.buildQueryWrapper(req); +// lqw.isNotNull(HseViolationRecord::getJobKey); +// lqw.isNotNull(HseViolationRecord::get); +// baseMapper.selectLatestList(req); +// } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java index 3a7726bb..e5d32aff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java @@ -41,6 +41,11 @@ public class SysRole extends TenantEntity { */ private String roleKey; + /** + * 角色标识 + */ + private String roleIdentity; + /** * 角色排序 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java index f3f4ef0e..428b6fa9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java @@ -47,6 +47,11 @@ public class SysRoleBo extends BaseEntity { @Size(min = 0, max = 100, message = "权限字符长度不能超过{max}个字符") private String roleKey; + /** + * 角色身份 + */ + private String roleIdentity; + /** * 显示顺序 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java index 5d8be2a9..5cd3ded1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java @@ -17,4 +17,5 @@ public class ProjectRolesItem { private String dataScope; private String status; private String isSpecial; + private String roleIdentity; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java index 580a9229..20152355 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java @@ -126,4 +126,9 @@ public class SysRoleVo implements Serializable { * 角色类型 1-web 2-app */ private String roleSource; + + /** + * 角色身份 + */ + private String roleIdentity; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java index 1f8536f1..3ccc3cb2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java @@ -12,6 +12,7 @@ import org.dromara.system.domain.SysUser; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -166,4 +167,45 @@ public class SysUserVo implements Serializable { * 打卡(0启用打卡 1禁止打卡) */ private String clock; + + /** + * 区域 + */ + private String qy; + + /** + * 在线状态 + */ + private String zxzt; + + /** + * 最后定位时间 + */ + private Date zhdwsj; + + /** + * 经度 + */ + private BigDecimal jd; + + /** + * 纬度 + */ + private BigDecimal wd; + + /** + * 工种 + */ + private String gz; + + /** + * 班组 + */ + private String bz; + + /** + * 头像地址 + */ + private String avatarUrl; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index c91f9c1f..b0e3e3ed 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -248,6 +248,14 @@ public interface ISysUserService { */ List selectUserListByDept(Long deptId); + /** + * 通过部门id列表查询当前部门所有用户 + * + * @param deptIds 部门id列表 + * @return 列表 + */ + List selectUserListByDeptList(List deptIds); + /** * 通过岗位id列表查询岗位所有用户 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index d540863a..1a3059b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -839,6 +839,23 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return baseMapper.selectVoList(lqw); } + /** + * 通过部门id列表查询当前部门所有用户 + * + * @param deptIds 部门id列表 + * @return 列表 + */ + @Override + public List selectUserListByDeptList(List deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return List.of(); + } + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SysUser::getDeptId, deptIds); + lqw.orderByAsc(SysUser::getUserId); + return baseMapper.selectVoList(lqw); + } + /** * 通过岗位id列表查询岗位所有用户 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java index 131e39d7..c760d780 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java @@ -122,16 +122,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler userIds = new ArrayList<>(); -// //类型转换 -// for (String s : onlineUserList) { -// userIds.add(Long.parseLong(s)); -// } -// List userDTOS = sysUserService.selectListByIds(userIds); //构建各个聊天房间未读 数量 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -139,12 +132,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler chatGroups = chatGroupService.list(queryWrapper); boolean isHaveSystemRoom = false; -// //考勤 -// boolean isHaveAttendanceRoom = false; -// //安全 -// boolean isHaveSafeRoom = false; -// //质量 -// boolean isHaveQualityRoom = false; if (chatGroups != null && !chatGroups.isEmpty()) { HashMap roomCounts = new HashMap<>(); for (ChatGroup chatGroup : chatGroups) { @@ -162,15 +149,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler ONLINE_SESSIONS = new ConcurrentHashMap<>(); @@ -40,9 +56,11 @@ public class RydwWebSocketServer { // 3. 静态代码块:项目启动时执行(初始化资源、打印启动日志) static { // 此处可添加启动时的初始化逻辑(如加载配置、连接外部资源等) - log.info("✅ WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); + log.info("✅ 人员定位WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); } + private static final String[] TIME_SLOTS = {"06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00"}; + /** * 客户端连接时触发(无需手动启动,有客户端连接时自动调用) */ @@ -53,35 +71,41 @@ public class RydwWebSocketServer { log.info("📌 客户端连接成功!会话ID:{},当前在线数:{}", session.getId(), ONLINE_SESSIONS.size()); // 2. 异步获取并推送初始化数据(避免阻塞连接) CompletableFuture.runAsync(() -> { + /* 解析消息 暂定json字符串 + { + "type": "1", 1表示心跳包 + "projectId":"", 项目id + "fbdwId":"", 分包单位id + "bzId":"", 班组id + "msg": "" + } + */ try { + //初始化 + Map map; //连接成功过后 获取当前项目下所有成员最新坐标 Map> params = session.getRequestParameterMap(); + //项目id + String projectId = null; List subscriptionIds = params.get("projectId"); - if (subscriptionIds != null && !subscriptionIds.isEmpty()){ - //拿到所有人员 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SubConstructionUser::getProjectId, subscriptionIds.getFirst()); - List list = subConstructionUserService.list(queryWrapper); - //拿到所有人员最新坐标 - if (list != null && !list.isEmpty()){ - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - List gpsList = new ArrayList<>(); - for (SubConstructionUser constructionUser : list) { - lqw.clear(); - lqw.eq(GpsEquipmentSon::getUserId, constructionUser.getSysUserId()); - lqw.orderByDesc(GpsEquipmentSon::getCreateTime); - lqw.last("limit 1"); - GpsEquipmentSon one = gpsEquipmentSonService.getOne(lqw); - if (one != null){ - gpsList.add(one); - } - } - if (!gpsList.isEmpty()){ - WebSocketUtils.sendMessage(Long.valueOf(session.getId()), gpsList.toString()); - } - } + if (subscriptionIds != null && !subscriptionIds.isEmpty()) { + projectId = subscriptionIds.getFirst(); } - WebSocketUtils.sendMessage(Long.valueOf(session.getId()), "初始化数据为空"); + //分包单位id + List fbdwIds = params.get("fbdwId"); + String fbdwId =null; + if (fbdwIds != null && !fbdwIds.isEmpty()) { + fbdwId = fbdwIds.getFirst(); + } + //班组id + String bzId = null; + List bzIds = params.get("bzId"); + if (bzIds != null && !bzIds.isEmpty()) { + bzId = bzIds.getFirst(); + } + map = getData(projectId, fbdwId, bzId); + + session.getBasicRemote().sendText(JSON.toJSONString(map)); } catch (Exception e) { log.error("会话[{}]初始化数据处理失败", session.getId(), e); } @@ -96,7 +120,33 @@ public class RydwWebSocketServer { log.info("📥 收到会话[{}]消息:{}", session.getId(), message); // 可选:回复客户端(示例) try { - session.getBasicRemote().sendText("服务端已收到消息:" + message); + /* 解析消息 暂定json字符串 + { + "type": "1", 1表示心跳包 + "projectId":"", 项目id + "fbdwId":"", 分包单位id + "bzId":"", 班组id + "msg": "" + } + */ + JSONObject jsonObject = JSON.parseObject(message); + if (jsonObject.get("type").equals("1")){ + if (jsonObject.get("projectId") != null){ + //分包单位id + String fbdwId = null; + if (jsonObject.get("fbdwId") != null) { + fbdwId = jsonObject.get("fbdwId").toString(); + } + //班组id + String bzId = null; + if (jsonObject.get("bzId") != null) { + bzId = jsonObject.get("bzId").toString(); + } + Map objectMap = getData(jsonObject.get("projectId").toString(), fbdwId, bzId); + session.getBasicRemote().sendText(JSON.toJSONString(objectMap)); + } + } +// session.getBasicRemote().sendText("服务端已收到消息:" + message); } catch (IOException e) { log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage()); } @@ -146,4 +196,301 @@ public class RydwWebSocketServer { public static int getOnlineCount() { return ONLINE_SESSIONS.size(); } + + /** + * 获取数据 用于首次和心跳 + */ + public Map getData(String projectId,String fbdwId,String bzId){ + Map map = new HashMap<>(); + if (projectId != null && !projectId.isEmpty()){ + // 获取当天结束时间 + LocalDate today = LocalDate.now(); + LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX); // 23:59:59.999999999 + long expireAt = endOfDay.atZone(ZoneId.systemDefault()).toEpochSecond(); + // 计算剩余秒数 + long now = System.currentTimeMillis() / 1000; + long expireSeconds = expireAt - now; + //拿到项目下所有人员 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SubConstructionUser::getProjectId, projectId); + queryWrapper.eq(StringUtils.isNotBlank(fbdwId), SubConstructionUser::getContractorId, fbdwId); + queryWrapper.eq(StringUtils.isNotBlank(bzId), SubConstructionUser::getTeamId, bzId); + List persons = subConstructionUserService.list(queryWrapper); + //获取此项目打卡范围 + LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); + List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); + //获取班组列表 + List bzList = busProjectTeamService.list(); + //通过打卡范围构建下方统计数据 + List> allValue = new ArrayList<>(); + //初始化柱状图数据 + zztcsh(allValue, busProjectPunchranges, persons, expireSeconds); + + //初始化 + List gpsList = new ArrayList<>(); +// int zrys = 0; + int ycry = 0; + Integer dwcs = 0; + int zgry = 0; + + if (persons != null && !persons.isEmpty()){ + + //循环考勤人员信息列表 + for (SubConstructionUser constructionUser : persons) { + //从redis拿到缓存最新坐标 优化:直接获取值 没有为null + GpsEquipmentSonBo one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); +// boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); + if (one == null){ + continue; + } + //这里可优化 坐标上报时存入名称 +// GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); + + if (one != null){ + //获取人员 + SysUserVo sysUserVo = sysUserService.selectUserById(constructionUser.getSysUserId()); + sysUserVo.setJd(one.getLocLongitude()); + sysUserVo.setWd(one.getLocLatitude()); + sysUserVo.setZhdwsj(one.getCreateTime()); + sysUserVo.setAvatarUrl(one.getAvatar()); + sysUserVo.setGz(constructionUser.getTypeOfWork()); + //获取班组 这里做优化 先查询获取全部 然后循环找到数据 + if (constructionUser.getTeamId() != null && bzList != null && !bzList.isEmpty()) { + for (BusProjectTeam team : bzList) { + if (constructionUser.getTeamId().equals(team.getId())){ + sysUserVo.setBz(team.getTeamName()); + break; + } + } +// BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); +// if (teamVo != null) { +// sysUserVo.setBz(teamVo.getTeamName()); +// } + } + boolean isFind = false; + //循环打卡范围 判断是否是异常状态 + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + //转换范围 + List coordinates = List.of(busProjectPunchrange.getPunchRange()); + List matchingRange = JSTUtil.findMatchingRange(one.getLocLatitude().toString(), one.getLocLongitude().toString(), coordinates); + //如果范围外为 空 + if (matchingRange != null && !matchingRange.isEmpty() && !isFind) { + sysUserVo.setQy(busProjectPunchrange.getPunchName()); + isFind = true; + + //判断在线状态 如果在线 范围外 则为异常 目前从聊天服务获取 + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())) { + sysUserVo.setZxzt("在线"); + //坐标在范围内在岗 + zgry++; + //定义Key + String key = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(); + //给坐标柱状图赋值 + setZztData(key,allValue,one,busProjectPunchrange,constructionUser,expireSeconds); + } + //找到打卡范围后 赋值后 跳出循环 + break; + } + } + //进一步判断状态 + if (sysUserVo.getZxzt() == null || sysUserVo.getZxzt().isEmpty()){ + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString()) && !isFind){ + sysUserVo.setZxzt("异常"); + //统计异常数 + ycry++; + }else if (!ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())){ + sysUserVo.setZxzt("离线"); + } + } + + //人员级GPS坐标列表 + gpsList.add(sysUserVo); + } + } + } + + //在岗人员 + map.put("zgry",zgry); + + //异常人员 + map.put("ycry",ycry); + + //总人员数 + map.put("zrys",zgry + ycry); + + //地图实时坐标 + map.put("gpsList", gpsList); + + //柱状图数据 + map.put("zztsj",allValue); + + //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 + map.put("bztsj",getPieData(allValue, persons, busProjectPunchranges)); + + //定位次数 + if (RedisUtils.isExistsObject("rydw_cs")){ + dwcs = RedisUtils.getCacheObject("rydw_cs"); + } + map.put("dwcs",dwcs); + } + return map; + } + + /** + * 柱状图数据初始化 + */ + public void zztcsh(List> allValue, List busProjectPunchranges, + List persons, long expireSeconds) { + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + Map map2 = new HashMap<>(); + + for (String timeSlot : TIME_SLOTS) { + String redisKey = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":" + timeSlot; + boolean existsObject = RedisUtils.isExistsObject(redisKey); + + if (!existsObject) { + RedisUtils.setCacheObject(redisKey, 0, Duration.ofSeconds(expireSeconds)); + map2.put(timeSlot, 0); + } else { + int count = 0; + String timeSlotKey = "rydw_tj_" + busProjectPunchrange.getId() + "_" + timeSlot + "_"; + int timeSlotKeyLength = timeSlotKey.length(); + + for (SubConstructionUser person : persons) { + if (RedisUtils.isExistsObject(timeSlotKey + person.getSysUserId())) { + count++; + } + } + map2.put(timeSlot, count); + } + } + + Map map1 = new HashMap<>(); + map1.put(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(), map2); + allValue.add(map1); + } + } + + /** + * 柱状图 数据 + */ + public void setZztData(String key, List> allValue, GpsEquipmentSonBo one, + BusProjectPunchrange busProjectPunchrange, SubConstructionUser constructionUser, long expireSeconds) { + + // 先找到对应的map,避免在循环内部多次判断 + Map timeSlotMap = null; + for (Map mapMap : allValue) { + if (mapMap.containsKey(key)) { + timeSlotMap = mapMap.get(key); + break; + } + } + + if (timeSlotMap == null) return; + + LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + int hour = dateTime.getHour(); + + // 使用映射表减少if-else判断 + Map hourToTimeSlot = new HashMap<>(); + hourToTimeSlot.put(6, "06:00"); + hourToTimeSlot.put(8, "08:00"); + hourToTimeSlot.put(10, "10:00"); + hourToTimeSlot.put(12, "12:00"); + hourToTimeSlot.put(14, "14:00"); + hourToTimeSlot.put(16, "16:00"); + hourToTimeSlot.put(18, "18:00"); + + for (Map.Entry entry : hourToTimeSlot.entrySet()) { + int startHour = entry.getKey(); + if (hour >= startHour && hour < startHour + 2) { + String timeSlot = entry.getValue(); + String redisCheckKey = "rydw_tj_" + busProjectPunchrange.getId() + "_" + timeSlot + "_" + constructionUser.getSysUserId(); + + if (!RedisUtils.isExistsObject(redisCheckKey)) { + // 原子性更新,避免并发问题 + synchronized (this) { + if (!RedisUtils.isExistsObject(redisCheckKey)) { + int currentCount = (int) timeSlotMap.get(timeSlot); + timeSlotMap.put(timeSlot, currentCount + 1); + + String redisCountKey = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":" + timeSlot; + RedisUtils.setCacheObject(redisCountKey, currentCount + 1, Duration.ofSeconds(expireSeconds)); + RedisUtils.setCacheObject(redisCheckKey, 1, Duration.ofSeconds(expireSeconds)); + } + } + } + break; // 找到对应时段后退出循环 + } + } + } + + /** + * 统计饼状图 数据 + */ + public List> getPieData(List> value, + List persons, + List dkfw) { + + // 使用Set去重,提高查找效率 + Set userRangeSet = new HashSet<>(); + + // 预构建打卡范围ID到名称的映射 + Map rangeIdToName = new HashMap<>(); + for (BusProjectPunchrange fw : dkfw) { + rangeIdToName.put(fw.getId().toString(), fw.getPunchName()); + } + + // 遍历所有数据 + for (Map mapMap : value) { + for (Map.Entry entry : mapMap.entrySet()) { + String fwIdMc = entry.getKey(); + String[] split = fwIdMc.split(":"); + if (split.length < 2) continue; + + String fwId = split[0]; + String fwName = rangeIdToName.get(fwId); + if (fwName == null) continue; + + Map timeMap = entry.getValue(); + for (String timeSlot : timeMap.keySet()) { + // 批量构建redis key + List redisKeys = new ArrayList<>(); + for (SubConstructionUser person : persons) { + redisKeys.add("rydw_tj_" + fwId + "_" + timeSlot + "_" + person.getSysUserId()); + } + + // 批量查询redis(假设RedisUtils支持批量操作) + // 如果RedisUtils不支持批量,可以批量获取以减少网络开销 + for (int i = 0; i < redisKeys.size(); i++) { + if (RedisUtils.isExistsObject(redisKeys.get(i))) { + String uniqueKey = fwId + "_" + persons.get(i).getSysUserId(); + userRangeSet.add(uniqueKey); + } + } + } + } + } + + // 统计结果 + Map countMap = new HashMap<>(); + for (String userRangeKey : userRangeSet) { + String[] parts = userRangeKey.split("_"); + if (parts.length < 2) continue; + + String fwId = parts[0]; + String fwName = rangeIdToName.get(fwId); + if (fwName != null) { + String rangeKey = fwId + ":" + fwName; + countMap.put(rangeKey, countMap.getOrDefault(rangeKey, 0) + 1); + } + } + + // 测试数据 + countMap.put("1000000:测试数据", 8); + + return new ArrayList<>(countMap.entrySet()); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java index 108f6b64..e983e34f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java @@ -333,6 +333,16 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl().eq(XzdBusinessChange::getContractChangeId, update.getId())); + if (bo.getSealInfo() != null && !bo.getSealInfo().isEmpty()){ + for (XzdBusinessChange sealInfo : bo.getSealInfo()) { + sealInfo.setContractChangeId(update.getId()); + sealInfo.setType("13"); + } + xzdBusinessChangeService.saveBatch(bo.getSealInfo()); + } /** * 扣款与奖励项 */ @@ -366,7 +376,6 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl 0; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml new file mode 100644 index 00000000..8a474e61 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml new file mode 100644 index 00000000..1a71bf1a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml new file mode 100644 index 00000000..948a34e8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml new file mode 100644 index 00000000..fc02f467 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml new file mode 100644 index 00000000..b3fa5193 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml new file mode 100644 index 00000000..006725b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml new file mode 100644 index 00000000..ec175d4a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml new file mode 100644 index 00000000..4c0cd5ce --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml new file mode 100644 index 00000000..b1cbab21 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml new file mode 100644 index 00000000..ffb53668 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml index d9fa99b3..ef8609b2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml @@ -18,4 +18,19 @@ ${ew.getCustomSqlSegment} + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml new file mode 100644 index 00000000..e04c74b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml new file mode 100644 index 00000000..0df5f5d0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml new file mode 100644 index 00000000..472c7e31 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml new file mode 100644 index 00000000..aad26344 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml new file mode 100644 index 00000000..33a71e64 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml new file mode 100644 index 00000000..5c49f80e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 9e019a89..045c96d6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -21,7 +21,8 @@ r.create_time, r.remark, r.is_special, - r.role_source + r.role_source, + r.role_identity from sys_role r left join sys_user_role sur on sur.role_id = r.role_id left join sys_user u on u.user_id = sur.user_id diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 0d6c75df..2c28c315 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -1974,3 +1974,148 @@ CREATE TABLE `gps_safety_user_record` PRIMARY KEY (`id`) USING BTREE, INDEX `idx_user_id` (`user_id` ASC) USING BTREE comment '用户id' ) comment '安全员轨迹信息'; + + +CREATE TABLE hazard_rule +( + `id` bigint not null auto_increment comment '主键', + `project_id` bigint not null comment '项目id', + `hazard_level` varchar(64) not null comment '隐患级别', + `hazard_weight` int not null comment '隐患权重', + `response_time` int not null comment '响应时限数值', + `response_unit` varchar(20) not null comment '响应时效单位', + `notify_method` varchar(20) not null comment '通知方式', + `timeout_action` varchar(50) not null comment '超时处理方式', + `extra_setting` varchar(20) not null comment '额外设置', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + PRIMARY KEY (`id`) USING BTREE, + index `idx_project_id` (`project_id` asc) using btree comment '项目ID' +) comment '隐患分级通知规则'; + +CREATE TABLE hazard_rule_notify_object +( + rule_id BIGINT NOT NULL COMMENT '规则ID', + notify_id BIGINT NOT NULL COMMENT '通知ID', + notify_type VARCHAR(20) NOT NULL COMMENT '通知类型', + index `idx_rule_id` (`rule_id` asc) using btree comment '规则ID' +) comment '隐患规则通知对象'; + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136001, '隐患分级通知规则', '1996118434672001025', '1', 'rule', 'safety/rule/index', 1, 0, 'C', + '0', '0', 'safety:rule:list', '#', 103, 1, sysdate(), null, null, '隐患分级通知规则菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136002, '隐患分级通知规则查询', 1996139632219136001, '1', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136003, '隐患分级通知规则新增', 1996139632219136001, '2', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136004, '隐患分级通知规则修改', 1996139632219136001, '3', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136005, '隐患分级通知规则删除', 1996139632219136001, '4', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136006, '隐患分级通知规则导出', 1996139632219136001, '5', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:export', '#', 103, 1, sysdate(), null, null, ''); + + +-- 隐患整改情况表 +DROP TABLE IF EXISTS hazard_hidden_danger_rectify; +create table hazard_hidden_danger_rectify +( + id bigint not null auto_increment comment '主键', + hidden_danger_id bigint not null comment '关联隐患ID', + rectify_count int not null comment '整改次数', + + rectify_deadline datetime not null comment '整改期限', + rectify_user_id bigint not null comment '整改人ID', + rectify_desc text null comment '整改说明', + rectify_files varchar(1024) null comment '整改附件', + rectify_time datetime null comment '完成整改时间', + + review_user_id bigint null comment '复查人ID', + review_desc text null comment '复查说明', + review_files varchar(1024) null comment '复查附件', + review_time datetime null comment '复查时间', + + review_status char default '0' not null comment '复查状态(1待复查 2复查通过 3复查不通过)', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + PRIMARY KEY (`id`) USING BTREE, + index `idx_hidden_danger_id` (`hidden_danger_id` asc) using btree comment '关联隐患ID' +) comment '隐患整改情况'; + +-- 索引 + +create index idx_rectify_times + on hazard_hidden_danger_rectify (hidden_danger_id, rectify_count); + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308290, '隐患整改情况', '1996118434672001025', '1', 'hiddenDangerRectify', + 'safety/hiddenDangerRectify/index', 1, 0, 'C', '0', '0', 'safety:hiddenDangerRectify:list', '#', 103, 1, + sysdate(), null, null, '隐患整改情况菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308291, '隐患整改情况查询', 1996413868087308290, '1', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308292, '隐患整改情况新增', 1996413868087308290, '2', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308293, '隐患整改情况修改', 1996413868087308290, '3', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308294, '隐患整改情况删除', 1996413868087308290, '4', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, ''); + +DROP TABLE IF EXISTS mq_delay_task; +CREATE TABLE `mq_delay_task` +( + `id` BIGINT PRIMARY KEY COMMENT '主键', + `biz_type` VARCHAR(64) 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 '失败原因' +) comment '延迟任务表';