From 97079abdef243c004ef2281bf574626d9f6e3706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Thu, 27 Nov 2025 18:56:33 +0800 Subject: [PATCH 01/73] =?UTF-8?q?11-27-=E4=BF=AE=E6=94=B9=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E5=AE=A1=E6=89=B9=E6=96=87=E4=BB=B6=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XzdProjectManagerApprovalServiceImpl.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java index 444a17b8..228fb53b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java @@ -23,7 +23,6 @@ import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.domain.XzdProjectManagerApproval; import org.dromara.xzd.domain.bo.XzdProjectManagerApprovalBo; import org.dromara.xzd.domain.vo.XzdProjectManagerApprovalVo; -import org.dromara.xzd.domain.vo.XzdProjectVo; import org.dromara.xzd.mapper.XzdProjectManagerApprovalMapper; import org.dromara.xzd.service.IXzdProjectManagerApprovalService; import org.springframework.beans.factory.annotation.Autowired; @@ -135,22 +134,22 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl oldFileId = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); - List nowFileId = Arrays.stream(bo.getFileId().split(",")).map(Long::valueOf).toList(); - for (Long l : oldFileId) { - if (!nowFileId.contains(l)) { - sysOssService.deleteWithValidByIds(List.of(l), false); - } - } - } - }else { - if (old.getFileId()!= null && !old.getFileId().isEmpty()){ - List deleteIds = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); - sysOssService.deleteWithValidByIds(deleteIds, false); - } - } +// if (bo.getFileId() != null && !bo.getFileId().isEmpty()){ +// if (old.getFileId() != null && !old.getFileId().isEmpty()) { +// List oldFileId = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); +// List nowFileId = Arrays.stream(bo.getFileId().split(",")).map(Long::valueOf).toList(); +// for (Long l : oldFileId) { +// if (!nowFileId.contains(l)) { +// sysOssService.deleteWithValidByIds(List.of(l), false); +// } +// } +// } +// }else { +// if (old.getFileId()!= null && !old.getFileId().isEmpty()){ +// List deleteIds = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); +// sysOssService.deleteWithValidByIds(deleteIds, false); +// } +// } XzdProjectManagerApproval update = MapstructUtils.convert(bo, XzdProjectManagerApproval.class); validEntityBeforeSave(update); From ebd88a999c6135719ee36f695a16aabed5cb7a26 Mon Sep 17 00:00:00 2001 From: zt Date: Thu, 27 Nov 2025 19:17:15 +0800 Subject: [PATCH 02/73] bug --- .../service/impl/OutSettlementValueSubcontractServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java index 9a216f35..9208edc5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java @@ -84,6 +84,7 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl buildQueryWrapper(OutSettlementValueSubcontractBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(OutSettlementValueSubcontract::getId); lqw.eq(bo.getProjectId() != null, OutSettlementValueSubcontract::getProjectId, bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), OutSettlementValueSubcontract::getDocumentCode, bo.getDocumentCode()); @@ -96,6 +97,8 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl Date: Fri, 28 Nov 2025 17:49:24 +0800 Subject: [PATCH 03/73] =?UTF-8?q?gps=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=BA=E5=91=98=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=EF=BC=8C=E8=A1=A5=E5=85=85=E7=BB=91=E5=AE=9A=E8=BD=A6=E8=BE=86?= =?UTF-8?q?=E6=97=B6=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E8=BD=A6=E8=BE=86=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GpsEquipmentController.java | 10 ++++++++ .../gps/mapper/GpsEquipmentMapper.java | 9 ++++++-- .../gps/mapper/GpsEquipmentSonMapper.java | 23 +++++++++++++++++++ .../gps/service/IGpsEquipmentService.java | 9 ++++++++ .../gps/service/IGpsEquipmentSonService.java | 8 +++++++ .../service/impl/GpsEquipmentServiceImpl.java | 20 +++++++++++++++- .../impl/GpsEquipmentSonServiceImpl.java | 20 ++++++++++++++++ 7 files changed, 96 insertions(+), 3 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java index 3447d4b0..0168715d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java @@ -1,5 +1,6 @@ package org.dromara.gps.controller; +import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -17,6 +18,7 @@ import org.dromara.contractor.domain.dto.constructionuser.SubConstructionUserQue import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo; import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo; import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.domain.vo.*; import org.dromara.project.service.IBusProjectService; import org.dromara.system.domain.SysUser; @@ -222,4 +224,12 @@ public class GpsEquipmentController extends BaseController { @PathVariable Long[] ids) { return toAjax(gpsEquipmentService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 查询GPS人员或设备定位日期信息列表 + */ + @GetMapping("/getDateList") + public R> getRlList(GpsEquipmentSonBo bo) { + return R.ok(gpsEquipmentService.getRlList(bo)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java index e1f2a8a3..a5af589b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java @@ -19,13 +19,18 @@ public interface GpsEquipmentMapper extends BaseMapperPlus getUeClientList(@Param("startTime") LocalDateTime startOfDay, @Param("endTime") LocalDateTime now); + @Select("") + List getUserOrClientDate(@Param("bo") GpsEquipmentSonBo bo); @Select("WITH RankedData AS (\n" + " SELECT\n" + " *,\n" + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java index 9d832426..bb8023fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java @@ -1,5 +1,6 @@ package org.dromara.gps.service; +import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.domain.vo.GpsEquipmentSonVo; import org.dromara.gps.domain.vo.GpsEquipmentVo; import org.dromara.gps.domain.bo.GpsEquipmentBo; @@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsProjectVo; import org.dromara.gps.domain.vo.GpsUserVo; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -108,4 +110,11 @@ public interface IGpsEquipmentService extends IService{ List getUeUserListByProjectId(LocalDateTime startOfDay, LocalDateTime now); List getListToVehicle(GpsEquipmentBo bo); + + /** + * 查询GPS人员或设备定位日期信息列表 + * @param bo + * @return + */ + List getRlList(GpsEquipmentSonBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java index f7dc357c..8d6dd596 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsStatusVo; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -88,4 +89,11 @@ public interface IGpsEquipmentSonService extends IService{ List getVehicleList(GpsEquipmentSonBo bo); List getNewVehicleList(GpsEquipmentSonBo bo); + + /** + * 查询GPS人员或设备定位日期信息列表 + * @param bo + * @return + */ + List getUserOrClientDate(GpsEquipmentSonBo bo); } 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 0601fd4d..69ed9ccd 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 @@ -53,6 +53,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.util.*; @@ -118,7 +119,13 @@ public class GpsEquipmentServiceImpl extends ServiceImpl getRlList(GpsEquipmentSonBo bo) { + return gpsEquipmentSonService.getUserOrClientDate(bo); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java index 282a1462..3bd39100 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java @@ -26,6 +26,7 @@ import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.mapper.GpsEquipmentSonMapper; import org.dromara.gps.service.IGpsEquipmentSonService; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -247,4 +248,23 @@ public class GpsEquipmentSonServiceImpl extends ServiceImpl getUserOrClientDate(GpsEquipmentSonBo bo) { + if (bo.getProjectId() == null) { + throw new ServiceException("项目id不能为空!"); + } + if (bo.getClientId() == null && bo.getUserId() == null) { + throw new ServiceException("设备id或用户id不能为空!"); + } + if (bo.getStartTime() == null || bo.getEndTime() == null) { + throw new ServiceException("开始时间和结算时间不能为空!!!"); + } + return baseMapper.getUserOrClientDate(bo); + } } From 13d33e9d53b76eb4d9bb52081d946e03b4b929d4 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 28 Nov 2025 19:27:41 +0800 Subject: [PATCH 04/73] =?UTF-8?q?token=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xinnengyuan/ruoyi-admin/src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 9b5259f3..3ffff05f 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -109,7 +109,7 @@ sa-token: # token有效期,单位s 默认30天, -1代表永不过期 timeout: 2592000 # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - active-timeout: 86400 + active-timeout: 2592000 # 同一账号最大登录数量,-1代表不限 max-login-count: -1 From 07b921d6309ae5c40d2f4c6f6f1d77c21966d493 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 28 Nov 2025 19:51:41 +0800 Subject: [PATCH 05/73] =?UTF-8?q?=E4=BA=BA=E5=91=98=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SubConstructionUserServiceImpl.java | 5 +++++ .../java/org/dromara/system/service/ISysRoleService.java | 2 ++ .../dromara/system/service/impl/SysRoleServiceImpl.java | 8 ++++++++ 3 files changed, 15 insertions(+) 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 1ae52ec8..3cbcf475 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 @@ -662,6 +662,11 @@ public class SubConstructionUserServiceImpl extends ServiceImpl selectRoleIdsByName(String roleName); List selectUserIdsByRoleId(Long roleId); + + void deleteRoleByUserIdAndProjectId(Long userId,Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index c2d7b418..fce6fc34 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -665,4 +665,12 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { public List selectUserIdsByRoleId(Long roleId) { return userRoleMapper.selectUserIdsByRoleId(roleId); } + + @Override + public void deleteRoleByUserIdAndProjectId(Long userId, Long projectId) { + userRoleMapper.delete(Wrappers.lambdaQuery(SysUserRole.class) + .eq(SysUserRole::getUserId, userId) + .eq(SysUserRole::getProjectId, projectId) + ); + } } From 4b14ea5c7fc46064fc04b23340893e8dd72bd310 Mon Sep 17 00:00:00 2001 From: zt Date: Mon, 1 Dec 2025 17:09:58 +0800 Subject: [PATCH 06/73] =?UTF-8?q?=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 + .../DeviceAccessRecordController.java | 107 ++++++++++ .../controller/DeviceInfoController.java | 134 ++++++++++++ .../controller/DeviceTypeController.java | 162 ++++++++++++++ .../device/domain/DeviceAccessRecord.java | 85 ++++++++ .../org/dromara/device/domain/DeviceInfo.java | 104 +++++++++ .../org/dromara/device/domain/DeviceType.java | 61 ++++++ .../domain/bo/DeviceAccessRecordBo.java | 82 ++++++++ .../device/domain/bo/DeviceInfoBo.java | 104 +++++++++ .../device/domain/bo/DeviceTypeBo.java | 53 +++++ .../domain/vo/DeviceAccessRecordVo.java | 99 +++++++++ .../device/domain/vo/DeviceInfoCountVo.java | 23 ++ .../device/domain/vo/DeviceInfoVo.java | 138 ++++++++++++ .../device/domain/vo/DeviceTypeVo.java | 78 +++++++ .../mapper/DeviceAccessRecordMapper.java | 15 ++ .../device/mapper/DeviceInfoMapper.java | 15 ++ .../device/mapper/DeviceTypeMapper.java | 15 ++ .../service/IDeviceAccessRecordService.java | 70 +++++++ .../device/service/IDeviceInfoService.java | 85 ++++++++ .../device/service/IDeviceTypeService.java | 70 +++++++ .../impl/DeviceAccessRecordServiceImpl.java | 140 +++++++++++++ .../service/impl/DeviceInfoServiceImpl.java | 197 ++++++++++++++++++ .../service/impl/DeviceTypeServiceImpl.java | 161 ++++++++++++++ .../device/DeviceAccessRecordMapper.xml | 7 + .../mapper/device/DeviceInfoMapper.xml | 7 + .../mapper/device/DeviceTypeMapper.xml | 7 + 26 files changed, 2021 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 3ffff05f..f7945fe0 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -305,6 +305,8 @@ springdoc: packages-to-scan: org.dromara.ai - group: 31.投标管理模块 packages-to-scan: org.dromara.bidding + - group: 32.设备模块 + packages-to-scan: org.dromara.device # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java new file mode 100644 index 00000000..5c646628 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java @@ -0,0 +1,107 @@ +package org.dromara.device.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.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.service.IDeviceAccessRecordService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备进出场记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/accessRecord") +public class DeviceAccessRecordController extends BaseController { + + private final IDeviceAccessRecordService deviceAccessRecordService; + + /** + * 查询设备进出场记录列表 + */ + @SaCheckPermission("device:accessRecord:list") + @GetMapping("/list") + public TableDataInfo list(DeviceAccessRecordBo bo, PageQuery pageQuery) { + return deviceAccessRecordService.queryPageList(bo, pageQuery); + } + + + + /** + * 导出设备进出场记录列表 + */ + @SaCheckPermission("device:accessRecord:export") + @Log(title = "设备进出场记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceAccessRecordBo bo, HttpServletResponse response) { + List list = deviceAccessRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "设备进出场记录", DeviceAccessRecordVo.class, response); + } + + /** + * 获取设备进出场记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("device:accessRecord:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceAccessRecordService.queryById(id)); + } + + /** + * 新增设备进出场记录 + */ + @SaCheckPermission("device:accessRecord:add") + @Log(title = "设备进出场记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceAccessRecordBo bo) { + return toAjax(deviceAccessRecordService.insertByBo(bo)); + } + + /** + * 修改设备进出场记录 + */ + @SaCheckPermission("device:accessRecord:edit") + @Log(title = "设备进出场记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceAccessRecordBo bo) { + return toAjax(deviceAccessRecordService.updateByBo(bo)); + } + + /** + * 删除设备进出场记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:accessRecord:remove") + @Log(title = "设备进出场记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceAccessRecordService.deleteWithValidByIds(List.of(ids), true)); + } +} 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 new file mode 100644 index 00000000..ad34b887 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java @@ -0,0 +1,134 @@ +package org.dromara.device.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.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.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.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备信息 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/info") +public class DeviceInfoController extends BaseController { + + private final IDeviceInfoService deviceInfoService; + + private final IDeviceAccessRecordService deviceAccessRecordService; + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("device:info:list") + @GetMapping("/list") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出设备信息列表 + */ + @SaCheckPermission("device:info:export") + @Log(title = "设备信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceInfoBo bo, HttpServletResponse response) { + List list = deviceInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "设备信息", DeviceInfoVo.class, response); + } + + /** + * 获取设备信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("device:info:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceInfoService.queryById(id)); + } + + /** + * 进出场纪录 + */ + @GetMapping("/recordList") + public R> recordList(DeviceAccessRecordBo bo) { + List list = deviceAccessRecordService.queryList(bo); + return R.ok(list); + } + + + @SaCheckPermission("device:info:list") + @GetMapping("/count/{projectId}") + public R count(@PathVariable Long projectId) { + return R.ok(deviceInfoService.count(projectId)); + } + + @SaCheckPermission("device:info:list") + @GetMapping("/typeCount/{projectId}") + public R> typeCount(@PathVariable Long projectId) { + return R.ok(deviceInfoService.typeCount(projectId)); + } + + /** + * 新增设备信息 + */ + @SaCheckPermission("device:info:add") + @Log(title = "设备信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceInfoBo bo) { + return toAjax(deviceInfoService.insertByBo(bo)); + } + + /** + * 修改设备信息 + */ + @SaCheckPermission("device:info:edit") + @Log(title = "设备信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceInfoBo bo) { + return toAjax(deviceInfoService.updateByBo(bo)); + } + + /** + * 删除设备信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:info:remove") + @Log(title = "设备信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceInfoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java new file mode 100644 index 00000000..7cd8e4f3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java @@ -0,0 +1,162 @@ +package org.dromara.device.controller; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +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.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.service.IDeviceTypeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备类型 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/type") +public class DeviceTypeController extends BaseController { + + private final IDeviceTypeService deviceTypeService; + + /** + * 查询设备类型列表 + */ + @SaCheckPermission("device:type:list") + @GetMapping("/list") + public TableDataInfo list(DeviceTypeBo bo, PageQuery pageQuery) { + return deviceTypeService.queryPageList(bo, pageQuery); + } + + + /** + * 设备树状列表 + */ + @SaCheckPermission("device:type:list") + @GetMapping("/treeList") + public R> treeList(DeviceTypeBo bo) { + List list = deviceTypeService.queryList(bo); + buildTreeWithAutoRoot(list); + return R.ok(list); + } + + + public static List buildTreeWithAutoRoot(List list) { + // 1. 用 Map 缓存所有节点(key=节点ID,value=节点对象) + Map nodeMap = list.stream() + .collect(Collectors.toMap(DeviceTypeVo::getId, node -> node)); + + List rootNodes = new ArrayList<>(); // 存储自动识别的顶级节点 + List orphanNodes = new ArrayList<>(); // 存储孤儿节点(可选:单独处理) + + for (DeviceTypeVo node : list) { + Long parentId = node.getParentId(); + // 情况1:parent_id 为0或NULL → 直接视为顶级节点 + if (parentId == null || parentId == 0) { + rootNodes.add(node); + } else { + // 情况2:查找父节点 + DeviceTypeVo parentNode = nodeMap.get(parentId); + if (parentNode != null) { + // 父节点存在 → 挂载到子节点列表 + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList<>()); + } + parentNode.getChildren().add(node); + } else { + // 父节点不存在 → 视为顶级节点(或加入孤儿节点列表) + rootNodes.add(node); + // 可选:记录孤儿节点,用于后续告警或修复 + orphanNodes.add(node); + } + } + } + + // 可选:打印孤儿节点日志(便于排查数据问题) +// if (!orphanNodes.isEmpty()) { +// System.out.println("警告:存在孤儿节点(父节点不存在),节点ID:" + +// orphanNodes.stream().map(DeviceType::getId).collect(Collectors.toList())); +// } + + return rootNodes; + } + + + /** + * 导出设备类型列表 + */ + @SaCheckPermission("device:type:export") + @Log(title = "设备类型", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceTypeBo bo, HttpServletResponse response) { + List list = deviceTypeService.queryList(bo); + ExcelUtil.exportExcel(list, "设备类型", DeviceTypeVo.class, response); + } + + /** + * 获取设备类型详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("device:type:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceTypeService.queryById(id)); + } + + /** + * 新增设备类型 + */ + @SaCheckPermission("device:type:add") + @Log(title = "设备类型", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceTypeBo bo) { + return toAjax(deviceTypeService.insertByBo(bo)); + } + + /** + * 修改设备类型 + */ + @SaCheckPermission("device:type:edit") + @Log(title = "设备类型", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceTypeBo bo) { + return toAjax(deviceTypeService.updateByBo(bo)); + } + + /** + * 删除设备类型 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:type:remove") + @Log(title = "设备类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceTypeService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java new file mode 100644 index 00000000..06e4fef0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java @@ -0,0 +1,85 @@ +package org.dromara.device.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.LocalDateTime; + +/** + * 设备进出场记录对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_access_record") +public class DeviceAccessRecord extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + private Long deviceId; + + /** + * 设备名 + */ + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + private LocalDateTime operateTime; + + /** + * 子项目名字 + */ + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + private String details; + + /** + * 子项目ID + */ + private Long childProjectId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java new file mode 100644 index 00000000..8919dc7e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java @@ -0,0 +1,104 @@ +package org.dromara.device.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 设备信息对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_info") +public class DeviceInfo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 设备编号 + */ + private String deviceCode; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 型号规格 + */ + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + private Long typeId; + + /** + * 生产厂家 + */ + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + private String status; + + /** + * 负责人姓名 + */ + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + private String description; + + /** + * 图片 + */ + private String image; + + /** + * 附件 + */ + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java new file mode 100644 index 00000000..52a490e8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java @@ -0,0 +1,61 @@ +package org.dromara.device.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 设备类型对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_type") +public class DeviceType extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 设备类型编码 + */ + private String typeCode; + + /** + * 设备类型名称 + */ + private String typeName; + + /** + * 父类型ID + */ + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + private Integer level; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 设备类型描述 + */ + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java new file mode 100644 index 00000000..c9369261 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java @@ -0,0 +1,82 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceAccessRecord; +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; + +/** + * 设备进出场记录业务对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceAccessRecord.class, reverseConvertGenerate = false) +public class DeviceAccessRecordBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + private Long deviceId; + + /** + * 设备名 + */ + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + private LocalDateTime operateTime; + + /** + * 位置/目的地(如:A区-1号电站、B区仓库→A区电站) + */ + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + private String details; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java new file mode 100644 index 00000000..5c9cade1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java @@ -0,0 +1,104 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceInfo; +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 org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.time.LocalDate; + +/** + * 设备信息业务对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceInfo.class, reverseConvertGenerate = false) +public class DeviceInfoBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 设备编号 + */ + private String deviceCode; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 型号规格 + */ + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + private Long typeId; + + /** + * 生产厂家 + */ + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + private String status; + + /** + * 负责人姓名 + */ + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + private String description; + + /** + * 图片 + */ + private String image; + + /** + * 附件 + */ + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java new file mode 100644 index 00000000..a006f7fa --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java @@ -0,0 +1,53 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceType; +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.*; + +/** + * 设备类型业务对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceType.class, reverseConvertGenerate = false) +public class DeviceTypeBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + private String typeCode; + + /** + * 设备类型名称 + */ + @NotBlank(message = "设备类型名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String typeName; + + /** + * 父类型ID + */ + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + private Integer level; + + /** + * 设备类型描述 + */ + private String description; + + +} 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 new file mode 100644 index 00000000..b9639b15 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java @@ -0,0 +1,99 @@ +package org.dromara.device.domain.vo; + +import org.dromara.device.domain.DeviceAccessRecord; +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.LocalDateTime; +import java.util.Date; + + + +/** + * 设备进出场记录视图对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceAccessRecord.class) +public class DeviceAccessRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + @ExcelProperty(value = "记录编号", converter = ExcelDictConvert.class) + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + @ExcelProperty(value = "设备ID", converter = ExcelDictConvert.class) + private Long deviceId; + + /** + * 设备名 + */ + @ExcelProperty(value = "设备名") + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + @ExcelProperty(value = "操作时间", converter = ExcelDictConvert.class) + private LocalDateTime operateTime; + + /** + * 位置/目的地(如:A区-1号电站、B区仓库→A区电站) + */ + @ExcelProperty(value = "位置/目的地", converter = ExcelDictConvert.class) + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + @ExcelProperty(value = "操作人ID", converter = ExcelDictConvert.class) + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + @ExcelProperty(value = "操作人姓名", converter = ExcelDictConvert.class) + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + @ExcelProperty(value = "原因", converter = ExcelDictConvert.class) + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + @ExcelProperty(value = "详细说明", converter = ExcelDictConvert.class) + private String details; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java new file mode 100644 index 00000000..44a2840e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java @@ -0,0 +1,23 @@ +package org.dromara.device.domain.vo; + +import lombok.Data; + +@Data +public class DeviceInfoCountVo { + /** + * 总数 + */ + private Integer total; + /** + * 使用 + */ + private Integer use; + /** + * 维护 + */ + private Integer maintain; + /** + * 闲置 + */ + private Integer idle; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java new file mode 100644 index 00000000..6c4d9f08 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java @@ -0,0 +1,138 @@ +package org.dromara.device.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.device.domain.DeviceInfo; +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; + + + +/** + * 设备信息视图对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceInfo.class) +public class DeviceInfoVo 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 deviceCode; + + /** + * 设备名称 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 型号规格 + */ + @ExcelProperty(value = "型号规格") + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + @ExcelProperty(value = "设备类型ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联设备类型表device_type的id") + private Long typeId; + + private String typeName; + + /** + * 生产厂家 + */ + @ExcelProperty(value = "生产厂家") + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + @ExcelProperty(value = "出厂日期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "y=yyy-mm-dd") + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + @ExcelProperty(value = "保修日期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "y=yyy-mm-dd") + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + @ExcelProperty(value = "设备状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=-闲置,1-使用中,2-维修中,3-报废") + private String status; + + /** + * 负责人姓名 + */ + @ExcelProperty(value = "负责人姓名") + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + @ExcelProperty(value = "联系电话", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "支=持固定电话和手机号") + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + @ExcelProperty(value = "设备描述", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "详=细说明") + private String description; + + /** + * 图片 + */ + @ExcelProperty(value = "图片") + private String image; + + /** + * 图片Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "image") + private String imageUrl; + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java new file mode 100644 index 00000000..b7c477ba --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java @@ -0,0 +1,78 @@ +package org.dromara.device.domain.vo; + +import org.dromara.device.domain.DeviceType; +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; + + +/** + * 设备类型视图对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceType.class) +public class DeviceTypeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 设备类型编码 + */ + @ExcelProperty(value = "设备类型编码") + private String typeCode; + + /** + * 设备类型名称 + */ + @ExcelProperty(value = "设备类型名称") + private String typeName; + + /** + * 父类型ID + */ + @ExcelProperty(value = "父类型ID") + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + @ExcelProperty(value = "层级", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==顶级,2=二级,3=三级...,最大支持255级") + private Integer level; + + /** + * 祖级列表 + */ + @ExcelProperty(value = "祖级列表") + private String ancestors; + + /** + * 设备类型描述 + */ + @ExcelProperty(value = "设备类型描述") + private String description; + + + private List children; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java new file mode 100644 index 00000000..e8b8ccf2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceAccessRecord; +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备进出场记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceAccessRecordMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java new file mode 100644 index 00000000..bea69563 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceInfo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceInfoMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java new file mode 100644 index 00000000..12791784 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceType; +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备类型Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceTypeMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java new file mode 100644 index 00000000..fe3b8862 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java @@ -0,0 +1,70 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.domain.DeviceAccessRecord; +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-01 + */ +public interface IDeviceAccessRecordService extends IService{ + + /** + * 查询设备进出场记录 + * + * @param id 主键 + * @return 设备进出场记录 + */ + DeviceAccessRecordVo queryById(Long id); + + /** + * 分页查询设备进出场记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备进出场记录分页列表 + */ + TableDataInfo queryPageList(DeviceAccessRecordBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备进出场记录列表 + * + * @param bo 查询条件 + * @return 设备进出场记录列表 + */ + List queryList(DeviceAccessRecordBo bo); + + /** + * 新增设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceAccessRecordBo bo); + + /** + * 修改设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceAccessRecordBo 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/device/service/IDeviceInfoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java new file mode 100644 index 00000000..4b694d23 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java @@ -0,0 +1,85 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceInfoCountVo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.DeviceInfo; +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-01 + */ +public interface IDeviceInfoService extends IService{ + + /** + * 查询设备信息 + * + * @param id 主键 + * @return 设备信息 + */ + DeviceInfoVo queryById(Long id); + + /** + * 分页查询设备信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备信息分页列表 + */ + TableDataInfo queryPageList(DeviceInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备信息列表 + * + * @param bo 查询条件 + * @return 设备信息列表 + */ + List queryList(DeviceInfoBo bo); + + /** + * 新增设备信息 + * + * @param bo 设备信息 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceInfoBo bo); + + /** + * 修改设备信息 + * + * @param bo 设备信息 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceInfoBo bo); + + /** + * 校验并批量删除设备信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 设备数量统计 + */ + DeviceInfoCountVo count(Long projectId); + + /** + * 设备类型统计 + */ + Map typeCount(Long projectId); + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java new file mode 100644 index 00000000..e5f805b4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java @@ -0,0 +1,70 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.domain.DeviceType; +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-01 + */ +public interface IDeviceTypeService extends IService{ + + /** + * 查询设备类型 + * + * @param id 主键 + * @return 设备类型 + */ + DeviceTypeVo queryById(Long id); + + /** + * 分页查询设备类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备类型分页列表 + */ + TableDataInfo queryPageList(DeviceTypeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备类型列表 + * + * @param bo 查询条件 + * @return 设备类型列表 + */ + List queryList(DeviceTypeBo bo); + + /** + * 新增设备类型 + * + * @param bo 设备类型 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceTypeBo bo); + + /** + * 修改设备类型 + * + * @param bo 设备类型 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceTypeBo 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/device/service/impl/DeviceAccessRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java new file mode 100644 index 00000000..ee4297b5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java @@ -0,0 +1,140 @@ +package org.dromara.device.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.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.DeviceAccessRecord; +import org.dromara.device.mapper.DeviceAccessRecordMapper; +import org.dromara.device.service.IDeviceAccessRecordService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 设备进出场记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceAccessRecordServiceImpl extends ServiceImpl implements IDeviceAccessRecordService { + + private final DeviceAccessRecordMapper baseMapper; + + /** + * 查询设备进出场记录 + * + * @param id 主键 + * @return 设备进出场记录 + */ + @Override + public DeviceAccessRecordVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询设备进出场记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备进出场记录分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceAccessRecordBo 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(DeviceAccessRecordBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceAccessRecordBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceAccessRecord::getId); + lqw.eq(StringUtils.isNotBlank(bo.getRecordNo()), DeviceAccessRecord::getRecordNo, bo.getRecordNo()); + lqw.eq(bo.getDeviceId() != null, DeviceAccessRecord::getDeviceId, bo.getDeviceId()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceAccessRecord::getDeviceName, bo.getDeviceName()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DeviceAccessRecord::getStatus, bo.getStatus()); + lqw.eq(bo.getOperateTime() != null, DeviceAccessRecord::getOperateTime, bo.getOperateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getLocation()), DeviceAccessRecord::getLocation, bo.getLocation()); + lqw.eq(bo.getOperatorId() != null, DeviceAccessRecord::getOperatorId, bo.getOperatorId()); + lqw.like(StringUtils.isNotBlank(bo.getOperatorName()), DeviceAccessRecord::getOperatorName, bo.getOperatorName()); + lqw.eq(StringUtils.isNotBlank(bo.getReason()), DeviceAccessRecord::getReason, bo.getReason()); + lqw.eq(StringUtils.isNotBlank(bo.getDetails()), DeviceAccessRecord::getDetails, bo.getDetails()); + return lqw; + } + + /** + * 新增设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceAccessRecordBo bo) { + DeviceAccessRecord add = MapstructUtils.convert(bo, DeviceAccessRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceAccessRecordBo bo) { + DeviceAccessRecord update = MapstructUtils.convert(bo, DeviceAccessRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceAccessRecord 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/device/service/impl/DeviceInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java new file mode 100644 index 00000000..f95725bd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java @@ -0,0 +1,197 @@ +package org.dromara.device.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.device.domain.DeviceType; +import org.dromara.device.domain.vo.DeviceInfoCountVo; +import org.dromara.device.service.IDeviceTypeService; +import org.springframework.stereotype.Service; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.DeviceInfo; +import org.dromara.device.mapper.DeviceInfoMapper; +import org.dromara.device.service.IDeviceInfoService; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 设备信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceInfoServiceImpl extends ServiceImpl implements IDeviceInfoService { + + private final DeviceInfoMapper baseMapper; + + private final IDeviceTypeService deviceTypeService; + + /** + * 查询设备信息 + * + * @param id 主键 + * @return 设备信息 + */ + @Override + public DeviceInfoVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询设备信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备信息分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + Set collect = records.stream().map(DeviceInfoVo::getTypeId).collect(Collectors.toSet()); + if(CollectionUtil.isEmpty(collect)){ + return TableDataInfo.build(result); + } + List deviceTypes = deviceTypeService.listByIds(collect); + Map deviceTypeMap = deviceTypes.stream().collect(Collectors.toMap(DeviceType::getId, DeviceType::getTypeName)); + result.getRecords().forEach(deviceInfoVo -> { + deviceInfoVo.setTypeName(deviceTypeMap.get(deviceInfoVo.getTypeId())); + }); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的设备信息列表 + * + * @param bo 查询条件 + * @return 设备信息列表 + */ + @Override + public List queryList(DeviceInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceInfo::getId); + lqw.eq(bo.getProjectId() != null, DeviceInfo::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getDeviceCode()), DeviceInfo::getDeviceCode, bo.getDeviceCode()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceInfo::getDeviceName, bo.getDeviceName()); + lqw.eq(StringUtils.isNotBlank(bo.getModelSpec()), DeviceInfo::getModelSpec, bo.getModelSpec()); + lqw.eq(bo.getTypeId() != null, DeviceInfo::getTypeId, bo.getTypeId()); + lqw.eq(StringUtils.isNotBlank(bo.getManufacturer()), DeviceInfo::getManufacturer, bo.getManufacturer()); + lqw.eq(bo.getProductionDate() != null, DeviceInfo::getProductionDate, bo.getProductionDate()); + lqw.eq(bo.getWarrantyDate() != null, DeviceInfo::getWarrantyDate, bo.getWarrantyDate()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DeviceInfo::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getResponsiblePerson()), DeviceInfo::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), DeviceInfo::getContactPhone, bo.getContactPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), DeviceInfo::getDescription, bo.getDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getImage()), DeviceInfo::getImage, bo.getImage()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), DeviceInfo::getFile, bo.getFile()); + return lqw; + } + + /** + * 新增设备信息 + * + * @param bo 设备信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceInfoBo bo) { + DeviceInfo add = MapstructUtils.convert(bo, DeviceInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备信息 + * + * @param bo 设备信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceInfoBo bo) { + DeviceInfo update = MapstructUtils.convert(bo, DeviceInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceInfo 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 DeviceInfoCountVo count(Long projectId) { + List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); + DeviceInfoCountVo countVo = new DeviceInfoCountVo(); + countVo.setTotal(list.size()); + countVo.setUse((int)list.stream().filter(deviceInfo -> "1".equals(deviceInfo.getStatus())).count()); + countVo.setMaintain((int)list.stream().filter(deviceInfo -> "2".equals(deviceInfo.getStatus())).count()); + countVo.setIdle((int)list.stream().filter(deviceInfo -> "0".equals(deviceInfo.getStatus())).count()); + + return countVo; + } + + @Override + public Map typeCount(Long projectId) { + Map map = new LinkedHashMap<>(); + + List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); + Set collect = list.stream().map(DeviceInfo::getTypeId).collect(Collectors.toSet()); + List deviceTypes; + if(CollectionUtil.isEmpty(collect)){ + deviceTypes = new ArrayList<>(); + }else{ + deviceTypes = deviceTypeService.listByIds(collect); + } + List list1 = deviceTypeService.lambdaQuery().eq(DeviceType::getParentId, 0L).list(); + for (DeviceType deviceType : list1) { + Long id = deviceType.getId(); + long count = deviceTypes.stream() + .filter(vo -> vo.getAncestors().contains(StringUtils.SEPARATOR + id) ||vo.getId().equals(id)) + .count(); + map.put(deviceType.getTypeName(), (int)count); + } + + return map; + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java new file mode 100644 index 00000000..c30856a8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java @@ -0,0 +1,161 @@ +package org.dromara.device.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +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.device.domain.DeviceInfo; +import org.dromara.device.service.IDeviceInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.DeviceType; +import org.dromara.device.mapper.DeviceTypeMapper; +import org.dromara.device.service.IDeviceTypeService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 设备类型Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceTypeServiceImpl extends ServiceImpl implements IDeviceTypeService { + + private final DeviceTypeMapper baseMapper; + + @Resource + @Lazy + private IDeviceInfoService deviceInfoService; + + /** + * 查询设备类型 + * + * @param id 主键 + * @return 设备类型 + */ + @Override + public DeviceTypeVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询设备类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备类型分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceTypeBo 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(DeviceTypeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceTypeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceType::getId); + lqw.like(StringUtils.isNotBlank(bo.getTypeName()), DeviceType::getTypeName, bo.getTypeName()); + lqw.eq(bo.getParentId() != null, DeviceType::getParentId, bo.getParentId()); + lqw.eq(bo.getLevel() != null, DeviceType::getLevel, bo.getLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), DeviceType::getDescription, bo.getDescription()); + return lqw; + } + + /** + * 新增设备类型 + * + * @param bo 设备类型 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceTypeBo bo) { + DeviceType add = MapstructUtils.convert(bo, DeviceType.class); + validEntityBeforeSave(add); + handleLevelAndAcestors(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备类型 + * + * @param bo 设备类型 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceTypeBo bo) { + DeviceType update = MapstructUtils.convert(bo, DeviceType.class); + validEntityBeforeSave(update); + handleLevelAndAcestors(update); + return baseMapper.updateById(update) > 0; + } + + private void handleLevelAndAcestors(DeviceType deviceType) { + if(deviceType.getParentId() == 0L){ + deviceType.setAncestors("0"); + deviceType.setLevel(1); + }else { + DeviceType parent = baseMapper.selectById(deviceType.getParentId()); + deviceType.setAncestors(parent.getAncestors() + StringUtils.SEPARATOR + parent.getId()); + deviceType.setLevel(parent.getLevel() + 1); + } + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceType entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除设备类型信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, ids).list(); + if(CollectionUtil.isNotEmpty(list)){ + throw new ServiceException("请先删除该设备类型下的设备"); + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml new file mode 100644 index 00000000..9e9926f4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml new file mode 100644 index 00000000..c9288975 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml new file mode 100644 index 00000000..b80f47e9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + From 40b51e5e9dff1d92c07fc734bd1dc969bb2d88d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Mon, 1 Dec 2025 19:28:10 +0800 Subject: [PATCH 07/73] =?UTF-8?q?12-01-=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java index e342089c..a8567b7f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java @@ -118,6 +118,7 @@ public class XzdSpykpSpdjServiceImpl extends ServiceImpl Date: Mon, 1 Dec 2025 19:28:21 +0800 Subject: [PATCH 08/73] =?UTF-8?q?12-01-=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RydwWebSocketServer.java | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java new file mode 100644 index 00000000..0bbbea60 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -0,0 +1,149 @@ +package org.dromara.websocket.websocket.service;// 路径:com.ruoyi.web.websocket.InitOnStartWebSocketServer + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import jakarta.websocket.*; +import jakarta.websocket.server.ServerEndpoint; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.websocket.utils.WebSocketUtils; +import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.service.impl.SubConstructionUserServiceImpl; +import org.dromara.gps.domain.GpsEquipmentSon; +import org.dromara.gps.service.impl.GpsEquipmentSonServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 项目启动即自动启动的 WebSocket 服务端 + * 端点路径:/websocket/init-on-start(可自定义) + */ +@Slf4j +@ServerEndpoint("/websocket/rydw") // 定义 WebSocket 端点路径 +@Component +public class RydwWebSocketServer { + + @Autowired + private SubConstructionUserServiceImpl subConstructionUserService; + @Autowired + private GpsEquipmentSonServiceImpl gpsEquipmentSonService; + + // 2. 静态会话存储(线程安全,项目启动时即初始化) + private static final Map ONLINE_SESSIONS = new ConcurrentHashMap<>(); + + + // 3. 静态代码块:项目启动时执行(初始化资源、打印启动日志) + static { + // 此处可添加启动时的初始化逻辑(如加载配置、连接外部资源等) + log.info("✅ WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); + } + + /** + * 客户端连接时触发(无需手动启动,有客户端连接时自动调用) + */ + @OnOpen + public void onOpen(Session session) { + // 存储新会话 + ONLINE_SESSIONS.put(session.getId(), session); + log.info("📌 客户端连接成功!会话ID:{},当前在线数:{}", session.getId(), ONLINE_SESSIONS.size()); + // 2. 异步获取并推送初始化数据(避免阻塞连接) + CompletableFuture.runAsync(() -> { + try { + //连接成功过后 获取当前项目下所有成员最新坐标 + Map> params = session.getRequestParameterMap(); + 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()); + } + } + } + WebSocketUtils.sendMessage(Long.valueOf(session.getId()), "初始化数据为空"); + } catch (Exception e) { + log.error("会话[{}]初始化数据处理失败", session.getId(), e); + } + }); + } + + /** + * 接收客户端消息 + */ + @OnMessage + public void onMessage(String message, Session session) { + log.info("📥 收到会话[{}]消息:{}", session.getId(), message); + // 可选:回复客户端(示例) + try { + session.getBasicRemote().sendText("服务端已收到消息:" + message); + } catch (IOException e) { + log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage()); + } + } + + /** + * 客户端断开连接 + */ + @OnClose + public void onClose(Session session, CloseReason reason) { + ONLINE_SESSIONS.remove(session.getId()); + log.info("🔌 客户端断开连接!会话ID:{},原因:{},当前在线数:{}", + session.getId(), reason.getReasonPhrase(), ONLINE_SESSIONS.size()); + } + + /** + * 连接异常 + */ + @OnError + public void onError(Session session, Throwable error) { + log.error("⚠️ 会话[{}]异常:{}", session.getId(), error.getMessage(), error); + } + + // ------------------------------ 工具方法(可选,供其他服务调用) ------------------------------ + /** + * 向所有在线客户端发送消息(项目启动后,其他服务可直接调用) + */ + public static void sendToAll(String message) { + if (ONLINE_SESSIONS.isEmpty()) { + log.warn("⚠️ 无在线客户端,无需发送消息"); + return; + } + ONLINE_SESSIONS.values().forEach(session -> { + if (session.isOpen()) { + try { + session.getBasicRemote().sendText(message); + } catch (IOException e) { + log.error("📤 向会话[{}]发送消息失败:{}", session.getId(), e.getMessage()); + } + } + }); + } + + /** + * 获取当前在线数(供外部查询) + */ + public static int getOnlineCount() { + return ONLINE_SESSIONS.size(); + } +} From 6a06d8596d4f6c42aca6ce7d265ba11baacf9c3c Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Mon, 1 Dec 2025 19:49:40 +0800 Subject: [PATCH 09/73] =?UTF-8?q?=E6=84=8F=E8=A7=81=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 2 +- .../AppBusComplaintBoxController.java | 106 ++++++ .../domain/vo/AppDetailsOfTheOpinionVo.java | 16 + .../controller/BusComplaintBoxController.java | 109 ++++++ .../complaintBox/domain/BusComplaintBox.java | 91 +++++ .../domain/BusComplaintBoxDisposeLogging.java | 61 ++++ .../domain/BusComplaintBoxMessageLogging.java | 76 ++++ .../domain/bo/BusComplaintBoxBo.java | 90 +++++ .../bo/BusComplaintBoxDisposeLoggingBo.java | 60 ++++ .../bo/BusComplaintBoxMessageLoggingBo.java | 80 +++++ .../vo/BusComplaintBoxDisposeLoggingVo.java | 75 ++++ .../vo/BusComplaintBoxMessageLoggingVo.java | 99 ++++++ .../domain/vo/BusComplaintBoxVo.java | 125 +++++++ .../domain/vo/ComplaintBoxCountVo.java | 18 + .../domain/vo/DetailsOfTheOpinionVo.java | 14 + .../BusComplaintBoxDisposeLoggingMapper.java | 15 + .../mapper/BusComplaintBoxMapper.java | 26 ++ .../BusComplaintBoxMessageLoggingMapper.java | 15 + ...IBusComplaintBoxDisposeLoggingService.java | 70 ++++ ...IBusComplaintBoxMessageLoggingService.java | 84 +++++ .../service/IBusComplaintBoxService.java | 117 ++++++ ...ComplaintBoxDisposeLoggingServiceImpl.java | 136 +++++++ ...ComplaintBoxMessageLoggingServiceImpl.java | 217 ++++++++++++ .../impl/BusComplaintBoxServiceImpl.java | 333 ++++++++++++++++++ .../BusComplaintBoxDisposeLoggingMapper.xml | 7 + .../complaintBox/BusComplaintBoxMapper.xml | 82 +++++ .../BusComplaintBoxMessageLoggingMapper.xml | 7 + 27 files changed, 2130 insertions(+), 1 deletion(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/controller/AppBusComplaintBoxController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxDisposeLoggingMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index 229ef4d1..8fd1f4c6 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -41,7 +41,7 @@ spring: api-key: sk-8d8df92fcbac4bd2922edba30b0bb8fa chat: options: - model: qwen-plus + model: qwen3-max datasource: type: com.zaxxer.hikari.HikariDataSource # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/controller/AppBusComplaintBoxController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/controller/AppBusComplaintBoxController.java new file mode 100644 index 00000000..de992609 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/controller/AppBusComplaintBoxController.java @@ -0,0 +1,106 @@ +package org.dromara.complaintBox.app.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +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.satoken.utils.LoginHelper; +import org.dromara.common.web.core.BaseController; +import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.springframework.context.annotation.Lazy; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 意见箱 + * + * @author Lion Li + * @date 2025-11-29 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/app/complaintBox/complaintBox") +public class AppBusComplaintBoxController extends BaseController { + + @Lazy + private final IBusComplaintBoxService busComplaintBoxService; + @Lazy + private final IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService; + + + /** + * 查询意见箱列表 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:list") + @GetMapping("/list") + public TableDataInfo list(BusComplaintBoxBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser != null) { + bo.setUserId(loginUser.getUserId()); + } + return busComplaintBoxService.appQueryPageList(bo, pageQuery); + } + + + + /** + * 获取意见箱详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busComplaintBoxService.appQueryById(id)); + } + + /** + * 新增意见箱 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.insertByBo(bo)); + } + + + /** + * 新增意见回复 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/postAReply") + public R postAReply(@Validated(AddGroup.class) @RequestBody BusComplaintBoxMessageLoggingBo bo) { + return toAjax(busComplaintBoxMessageLoggingService.insertAppByBo(bo)); + } + + /** + * 修改意见阅读状态 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editCheckStatus") + public R editCheckStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editCheckStatus(bo)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java new file mode 100644 index 00000000..72e47704 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java @@ -0,0 +1,16 @@ +package org.dromara.complaintBox.app.domain.vo; + +import lombok.Data; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; + +import java.io.Serializable; +import java.util.List; + +@Data +public class AppDetailsOfTheOpinionVo implements Serializable { + + private BusComplaintBoxVo busComplaintBoxVo; + + private List messageLoggingVos; +} 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 new file mode 100644 index 00000000..2fef047d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java @@ -0,0 +1,109 @@ +package org.dromara.complaintBox.controller; + +import lombok.RequiredArgsConstructor; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; +import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.springframework.context.annotation.Lazy; +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.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +import java.util.List; + +/** + * 意见箱 + * + * @author Lion Li + * @date 2025-11-29 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/complaintBox/complaintBox") +public class BusComplaintBoxController extends BaseController { + + @Lazy + private final IBusComplaintBoxService busComplaintBoxService; + @Lazy + private final IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService; + + + /** + * 查询意见箱列表 + */ +// @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/list") + public TableDataInfo list(BusComplaintBoxBo bo, PageQuery pageQuery) { + return busComplaintBoxService.queryPageList(bo, pageQuery); + } + /** + * web获取各个处理状态数量 + */ +// @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/getCount") + public R> getCount(BusComplaintBoxBo bo) { + return R.ok(busComplaintBoxService.getCount(bo)); + } + + /** + * 获取意见箱详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("complaintBox:complaintBox:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busComplaintBoxService.getInfo(id)); + } + + /** + * 新增意见回复 + */ +// @SaCheckPermission("complaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/postAReply") + public R postAReply(@Validated(AddGroup.class) @RequestBody BusComplaintBoxMessageLoggingBo bo) { + return toAjax(busComplaintBoxMessageLoggingService.insertWebByBo(bo)); + } + + + /** + * 修改意见阅读状态 + */ +// @SaCheckPermission("complaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editCheckStatus") + public R editCheckStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editCheckStatus(bo)); + } + + /** + * 修改意见阅读状态 + */ +// @SaCheckPermission("complaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editStatus") + public R editStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editStatus(bo)); + } + +} 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 new file mode 100644 index 00000000..e1f417c9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java @@ -0,0 +1,91 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box") +public class BusComplaintBox extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + private Long companyId; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 标题 + */ + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + private String opinionType; + + /** + * 详细描述 + */ + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + private String fileId; + + /** + * 是否匿名提交(0、否,1、是) + */ + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,10、退回,14、关闭) + */ + private String status; + + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java new file mode 100644 index 00000000..8a874e68 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java @@ -0,0 +1,61 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱-意见处理记录对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box_dispose_logging") +public class BusComplaintBoxDisposeLogging extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + private String isRefund; + + /** + * 退回原因 + */ + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java new file mode 100644 index 00000000..9ccaf50a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java @@ -0,0 +1,76 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱-意见沟通记录对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box_message_logging") +public class BusComplaintBoxMessageLogging extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + + /** + * 消息内容 + */ + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + 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 new file mode 100644 index 00000000..2fc8c293 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java @@ -0,0 +1,90 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBox; +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.*; + +/** + * 意见箱业务对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBox.class, reverseConvertGenerate = false) +public class BusComplaintBoxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + private Long companyId; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class }) + private Long userId; + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 标题 + */ + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + private String opinionType; + + /** + * 详细描述 + */ + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + private String fileId; + + /** + * 是否匿名提交(0、否,1、是) + */ + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,14、关闭) + */ + private String status; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java new file mode 100644 index 00000000..a8b74939 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java @@ -0,0 +1,60 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +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.*; + +/** + * 意见箱-意见处理记录业务对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBoxDisposeLogging.class, reverseConvertGenerate = false) +public class BusComplaintBoxDisposeLoggingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + private String isRefund; + + /** + * 退回原因 + */ + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java new file mode 100644 index 00000000..1da3700c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java @@ -0,0 +1,80 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +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.*; + +/** + * 意见箱-意见沟通记录业务对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBoxMessageLogging.class, reverseConvertGenerate = false) +public class BusComplaintBoxMessageLoggingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + + /** + * 消息内容 + */ + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + private String status; + + /** + * 上一条沟通记录id + */ + private Long oldId; + + +} 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 new file mode 100644 index 00000000..fdb1e92c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java @@ -0,0 +1,75 @@ +package org.dromara.complaintBox.domain.vo; + +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +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; + + + +/** + * 意见箱-意见处理记录视图对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBoxDisposeLogging.class) +public class BusComplaintBoxDisposeLoggingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 意见id + */ + @ExcelProperty(value = "意见id") + private Long complaintId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + /** + * 头像地址 + */ + @ExcelProperty(value = "头像地址") + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + @ExcelProperty(value = "是否退回", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、否,1、是") + private String isRefund; + + /** + * 退回原因 + */ + @ExcelProperty(value = "退回原因") + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java new file mode 100644 index 00000000..d4fbea39 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java @@ -0,0 +1,99 @@ +package org.dromara.complaintBox.domain.vo; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +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; + + + +/** + * 意见箱-意见沟通记录视图对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBoxMessageLogging.class) +public class BusComplaintBoxMessageLoggingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 意见id + */ + @ExcelProperty(value = "意见id") + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + private String replyAvatarUrl; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + private String repliedAvatarUrl; + + /** + * 消息内容 + */ + @ExcelProperty(value = "消息内容") + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、未读,1、已读") + private String status; + + /** + * 发起人类型(0、发起人,1、处理人) + */ + private Integer type; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java new file mode 100644 index 00000000..a344d742 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java @@ -0,0 +1,125 @@ +package org.dromara.complaintBox.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.complaintBox.domain.BusComplaintBox; +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; + + +/** + * 意见箱视图对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBox.class) +public class BusComplaintBoxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + @ExcelProperty(value = "公司id", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=前登录人的顶层下一级部门id") + private Long companyId; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + /** + * 头像地址 + */ + @ExcelProperty(value = "头像地址") + private Long avatar; + private String avatarUrl; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + @ExcelProperty(value = "意见类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=、功能建议,2、Bug反馈,3、体验问题,4其他意见") + private String opinionType; + + /** + * 详细描述 + */ + @ExcelProperty(value = "详细描述") + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + @ExcelProperty(value = "上传图片", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "i=d,id之间使用','分割") + private String fileId; + private List fileUrls; + + /** + * 是否匿名提交(0、否,1、是) + */ + @ExcelProperty(value = "是否匿名提交", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、否,1、是") + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,14、关闭) + */ + @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、待处理,5、处理中,9、已解决,14、关闭") + private String status; + + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + private Integer count; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java new file mode 100644 index 00000000..646e0b70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java @@ -0,0 +1,18 @@ +package org.dromara.complaintBox.domain.vo; + +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.io.Serializable; + +@Data +public class ComplaintBoxCountVo implements Serializable { + + private String type; + +// @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "type",other = "opinion_processing_status") + private String typeName; + + private Integer count; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java new file mode 100644 index 00000000..d5e2bc22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java @@ -0,0 +1,14 @@ +package org.dromara.complaintBox.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class DetailsOfTheOpinionVo implements Serializable { + + private BusComplaintBoxVo busComplaintBoxVo; + + private List messageLoggingVos; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java new file mode 100644 index 00000000..833d26fb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.complaintBox.mapper; + +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 意见箱-意见处理记录Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxDisposeLoggingMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java new file mode 100644 index 00000000..03ba0d72 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java @@ -0,0 +1,26 @@ +package org.dromara.complaintBox.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; + +import java.util.List; + +/** + * 意见箱Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxMapper extends BaseMapperPlus { + + Page selectVoPageList(@Param("page") Page page, @Param("bo") BusComplaintBoxBo bo); + + Page selectVoPageWebList(@Param("page") Page page, @Param("bo") BusComplaintBoxBo bo); + + List getCount(@Param("bo") BusComplaintBoxBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java new file mode 100644 index 00000000..744f6045 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.complaintBox.mapper; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 意见箱-意见沟通记录Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxMessageLoggingMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java new file mode 100644 index 00000000..dcfbfb32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java @@ -0,0 +1,70 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +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-11-29 + */ +public interface IBusComplaintBoxDisposeLoggingService extends IService{ + + /** + * 查询意见箱-意见处理记录 + * + * @param id 主键 + * @return 意见箱-意见处理记录 + */ + BusComplaintBoxDisposeLoggingVo queryById(Long id); + + /** + * 分页查询意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见处理记录分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxDisposeLoggingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @return 意见箱-意见处理记录列表 + */ + List queryList(BusComplaintBoxDisposeLoggingBo bo); + + /** + * 新增意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否新增成功 + */ + Boolean insertByBo(BusComplaintBoxDisposeLoggingBo bo); + + /** + * 修改意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxDisposeLoggingBo 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/complaintBox/service/IBusComplaintBoxMessageLoggingService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java new file mode 100644 index 00000000..5bd0169a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java @@ -0,0 +1,84 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +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-11-29 + */ +public interface IBusComplaintBoxMessageLoggingService extends IService{ + + /** + * 查询意见箱-意见沟通记录 + * + * @param id 主键 + * @return 意见箱-意见沟通记录 + */ + BusComplaintBoxMessageLoggingVo queryById(Long id); + + /** + * 分页查询意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见沟通记录分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxMessageLoggingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @return 意见箱-意见沟通记录列表 + */ + List queryList(BusComplaintBoxMessageLoggingBo bo); + + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + Boolean insertAppByBo(BusComplaintBoxMessageLoggingBo bo); + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + Boolean insertWebByBo(BusComplaintBoxMessageLoggingBo bo); + + /** + * 修改意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxMessageLoggingBo bo); + + /** + * 校验并批量删除意见箱-意见沟通记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过意见id获取沟通记录 + * @param id + * @return + */ + List getMessageLogListByComplaintId(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java new file mode 100644 index 00000000..8400a950 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java @@ -0,0 +1,117 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.BusComplaintBox; +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.complaintBox.domain.vo.ComplaintBoxCountVo; +import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; + +import java.util.Collection; +import java.util.List; + +/** + * 意见箱Service接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface IBusComplaintBoxService extends IService{ + + /** + * 查询意见箱 + * + * @param id 主键 + * @return 意见箱 + */ + BusComplaintBoxVo queryById(Long id); + + /** + * 分页查询意见箱列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱列表 + * + * @param bo 查询条件 + * @return 意见箱列表 + */ + List queryList(BusComplaintBoxBo bo); + + /** + * 新增意见箱 + * + * @param bo 意见箱 + * @return 是否新增成功 + */ + Boolean insertByBo(BusComplaintBoxBo bo); + + /** + * 修改意见箱 + * + * @param bo 意见箱 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxBo bo); + + /** + * 校验并批量删除意见箱信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * app获取当前用户提出意见列表 + * @param bo + * @param pageQuery + * @return + */ + TableDataInfo appQueryPageList(BusComplaintBoxBo bo, PageQuery pageQuery); + + /** + * APP获取当前意见详情 + * @param id + * @return + */ + AppDetailsOfTheOpinionVo appQueryById(Long id); + + /** + * 获取当前意见详情 + * @param id + * @return + */ + DetailsOfTheOpinionVo getInfo(Long id); + + /** + * 修改沟通记录阅读状态 + * @param bo + * @return + */ + int editCheckStatus(BusComplaintBoxBo bo); + + /** + * web获取各个处理状态数量 + * @param bo + * @return + */ + List getCount(BusComplaintBoxBo bo); + + /** + * 修改意见状态 + * @param bo + * @return + */ + int editStatus(BusComplaintBoxBo bo); +} 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 new file mode 100644 index 00000000..ddc8ccae --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java @@ -0,0 +1,136 @@ +package org.dromara.complaintBox.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.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.complaintBox.mapper.BusComplaintBoxDisposeLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 意见箱-意见处理记录Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxDisposeLoggingServiceImpl extends ServiceImpl implements IBusComplaintBoxDisposeLoggingService { + + private final BusComplaintBoxDisposeLoggingMapper baseMapper; + + /** + * 查询意见箱-意见处理记录 + * + * @param id 主键 + * @return 意见箱-意见处理记录 + */ + @Override + public BusComplaintBoxDisposeLoggingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见处理记录分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxDisposeLoggingBo 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(BusComplaintBoxDisposeLoggingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxDisposeLoggingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBoxDisposeLogging::getId); + 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; + } + + /** + * 新增意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BusComplaintBoxDisposeLoggingBo bo) { + BusComplaintBoxDisposeLogging add = MapstructUtils.convert(bo, BusComplaintBoxDisposeLogging.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxDisposeLoggingBo bo) { + BusComplaintBoxDisposeLogging update = MapstructUtils.convert(bo, BusComplaintBoxDisposeLogging.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBoxDisposeLogging 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/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java new file mode 100644 index 00000000..de1c18dc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java @@ -0,0 +1,217 @@ +package org.dromara.complaintBox.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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; +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.satoken.utils.LoginHelper; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.complaintBox.mapper.BusComplaintBoxMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.complaintBox.mapper.BusComplaintBoxMessageLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 意见箱-意见沟通记录Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl implements IBusComplaintBoxMessageLoggingService { + + private final BusComplaintBoxMessageLoggingMapper baseMapper; + @Lazy + private final ISysUserService sysUserService; +// @Lazy + private final BusComplaintBoxMapper busComplaintBoxMapper; + + /** + * 查询意见箱-意见沟通记录 + * + * @param id 主键 + * @return 意见箱-意见沟通记录 + */ + @Override + public BusComplaintBoxMessageLoggingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见沟通记录分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxMessageLoggingBo 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(BusComplaintBoxMessageLoggingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxMessageLoggingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBoxMessageLogging::getId); + lqw.eq(bo.getComplaintId() != null, BusComplaintBoxMessageLogging::getComplaintId, bo.getComplaintId()); + lqw.eq(StringUtils.isNotBlank(bo.getDetails()), BusComplaintBoxMessageLogging::getDetails, bo.getDetails()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BusComplaintBoxMessageLogging::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertAppByBo(BusComplaintBoxMessageLoggingBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("登录信息出错,请重新登录!!!"); + } + BusComplaintBox busComplaintBox = busComplaintBoxMapper.selectById(bo.getComplaintId()); + if (busComplaintBox == null) { + throw new ServiceException("意见信息找不到!!!"); + } + if ("14".equals(busComplaintBox.getStatus())){ + throw new ServiceException("意见已关闭!!!"); + } + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + bo.setReplyUserId(sysUserVo.getUserId()); + bo.setReplyUserName(sysUserVo.getNickName()); + bo.setReplyAvatar(sysUserVo.getAvatar()); + BusComplaintBoxMessageLogging add = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + if (busComplaintBox.getCurrentDisposeUserId() != null) { + SysUserVo userVo = sysUserService.selectUserById(busComplaintBox.getCurrentDisposeUserId()); + if (userVo != null) { + add.setRepliedUserId(userVo.getUserId()); + add.setRepliedUserName(userVo.getUserName()); + add.setRepliedAvatar(userVo.getAvatar()); + } + } + + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertWebByBo(BusComplaintBoxMessageLoggingBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("登录信息出错,请重新登录!!!"); + } + BusComplaintBox busComplaintBox = busComplaintBoxMapper.selectById(bo.getComplaintId()); + if (busComplaintBox == null) { + throw new ServiceException("意见信息找不到!!!"); + } + if ("14".equals(busComplaintBox.getStatus())){ + throw new ServiceException("意见已关闭!!!"); + } + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + bo.setReplyUserId(sysUserVo.getUserId()); + bo.setReplyUserName(sysUserVo.getNickName()); + bo.setReplyAvatar(sysUserVo.getAvatar()); + BusComplaintBoxMessageLogging add = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + add.setRepliedUserId(busComplaintBox.getUserId()); + add.setRepliedUserName(busComplaintBox.getUserName()); + add.setRepliedAvatar(busComplaintBox.getAvatar()); + + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if ("0".equals(busComplaintBox.getStatus())){ + busComplaintBox.setStatus("5"); + busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId()); + busComplaintBoxMapper.updateById(busComplaintBox); + } + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxMessageLoggingBo bo) { + BusComplaintBoxMessageLogging update = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBoxMessageLogging entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除意见箱-意见沟通记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 根据意见id获取沟通记录 + * @param id + * @return + */ + @Override + public List getMessageLogListByComplaintId(Long id) { + return baseMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + } +} 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 new file mode 100644 index 00000000..c2beeb2a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java @@ -0,0 +1,333 @@ +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 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.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +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.IBusComplaintBoxMessageLoggingService; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysOssService; +import org.dromara.system.service.ISysUserService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +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 java.util.*; +import java.util.stream.Collectors; + +/** + * 意见箱Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxServiceImpl extends ServiceImpl implements IBusComplaintBoxService { + + private final BusComplaintBoxMapper baseMapper; +// @Lazy + private final BusComplaintBoxMessageLoggingMapper messageLoggingMapper; + @Lazy + private final ISysUserService sysUserService; + @Lazy + private final ISysDeptService sysDeptService; + @Lazy + private final ISysOssService sysOssService; + + /** + * 查询意见箱 + * + * @param id 主键 + * @return 意见箱 + */ + @Override + public BusComplaintBoxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectVoPageWebList(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的意见箱列表 + * + * @param bo 查询条件 + * @return 意见箱列表 + */ + @Override + public List queryList(BusComplaintBoxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBox::getId); + lqw.eq(bo.getCompanyId() != null, BusComplaintBox::getCompanyId, bo.getCompanyId()); + lqw.eq(bo.getProjectId() != null, BusComplaintBox::getProjectId, bo.getProjectId()); + lqw.eq(bo.getUserId() != null, BusComplaintBox::getUserId, bo.getUserId()); + lqw.eq(bo.getCurrentDisposeUserId() != null, + BusComplaintBox::getCurrentDisposeUserId, bo.getCurrentDisposeUserId()) + .or() + .isNull(BusComplaintBox::getCurrentDisposeUserId); + lqw.eq(StringUtils.isNotBlank(bo.getTitle()), BusComplaintBox::getTitle, bo.getTitle()); + lqw.eq(StringUtils.isNotBlank(bo.getOpinionType()), BusComplaintBox::getOpinionType, bo.getOpinionType()); + lqw.eq(StringUtils.isNotBlank(bo.getDetail()), BusComplaintBox::getDetail, bo.getDetail()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), BusComplaintBox::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getIsCryptonym()), BusComplaintBox::getIsCryptonym, bo.getIsCryptonym()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BusComplaintBox::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增意见箱 + * + * @param bo 意见箱 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BusComplaintBoxBo bo) { + BusComplaintBox add = MapstructUtils.convert(bo, BusComplaintBox.class); + //获取用户信息进行填充 + SysUserVo sysUserVo = sysUserService.selectUserById(add.getUserId()); + add.setAvatar(sysUserVo.getAvatar()); + add.setUserName(sysUserVo.getNickName()); + //获取部门信息 + SysDeptVo sysDeptVo =sysDeptService.selectDeptById(sysUserVo.getDeptId()); + if (sysDeptVo != null) { + String[] split = sysDeptVo.getAncestors().split(","); + if (split.length > 0) { + //当祖级列表长度大于3时取第2个作为公司id + if (split.length > 1) { + add.setCompanyId(Long.parseLong(split[1])); + }else { + add.setCompanyId(Long.parseLong(split[0])); + } + } + } + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱 + * + * @param bo 意见箱 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxBo bo) { + BusComplaintBox update = MapstructUtils.convert(bo, BusComplaintBox.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBox entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除意见箱信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * app获取当前用户提出意见列表 + * @param bo + * @param pageQuery + * @return + */ + @Override + public TableDataInfo appQueryPageList(BusComplaintBoxBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectVoPageList(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * app获取当前意见详情 + * @param id + * @return + */ + @Override + public AppDetailsOfTheOpinionVo appQueryById(Long id) { + AppDetailsOfTheOpinionVo vo = new AppDetailsOfTheOpinionVo(); + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(id); + if(busComplaintBoxVo == null){ + throw new ServiceException("找不到意见信息!!!"); + } + if (busComplaintBoxVo.getAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(busComplaintBoxVo.getAvatar()); + if (ossVo != null){ + busComplaintBoxVo.setAvatarUrl(ossVo.getUrl()); + } + } + if (busComplaintBoxVo.getFileId() != null){ + String[] split = busComplaintBoxVo.getFileId().split(","); + List fileIds = Arrays.stream(split) + .filter(str -> str != null && !str.trim().isEmpty()) // 过滤空值和空白字符串 + .map(str -> { + try { + return Long.valueOf(str.trim()); + } catch (NumberFormatException e) { + // 转换失败时可返回null,后续再过滤 + return null; + } + }) + .filter(Objects::nonNull) // 过滤转换失败的null值 + .toList(); + List sysOssVos = sysOssService.listByIds(fileIds); + List urls = new ArrayList<>(); + sysOssVos.forEach(sysOssVo -> { + if (sysOssVo != null){ + urls.add(sysOssVo.getUrl()); + } + }); + busComplaintBoxVo.setFileUrls(urls); + } + vo.setBusComplaintBoxVo(busComplaintBoxVo); + List messageLoggingVos = messageLoggingMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + if(CollectionUtils.isNotEmpty(messageLoggingVos)){ + messageLoggingVos.forEach(mvo->{ + if (mvo.getReplyAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(mvo.getReplyAvatar()); + if (ossVo != null){ + mvo.setReplyAvatarUrl(ossVo.getUrl()); + } + } + if (mvo.getRepliedAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(mvo.getRepliedAvatar()); + if (ossVo != null){ + mvo.setRepliedAvatarUrl(ossVo.getUrl()); + } + } + }); + vo.setMessageLoggingVos(messageLoggingVos); + } + return vo; + } + + @Override + public DetailsOfTheOpinionVo getInfo(Long id) { + DetailsOfTheOpinionVo vo = new DetailsOfTheOpinionVo(); + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(id); + if(busComplaintBoxVo == null){ + throw new ServiceException("找不到意见信息!!!"); + } + vo.setBusComplaintBoxVo(busComplaintBoxVo); + List messageLoggingVos = messageLoggingMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + if(CollectionUtils.isNotEmpty(messageLoggingVos)){ + messageLoggingVos.forEach(messageLoggingVo->{ + messageLoggingVo.setType(messageLoggingVo.getReplyUserId().equals(busComplaintBoxVo.getUserId()) ? 0 : 1); + if (messageLoggingVo.getReplyAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(messageLoggingVo.getReplyAvatar()); + if (ossVo != null){ + messageLoggingVo.setReplyAvatarUrl(ossVo.getUrl()); + } + } + if (messageLoggingVo.getRepliedAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(messageLoggingVo.getRepliedAvatar()); + if (ossVo != null){ + messageLoggingVo.setRepliedAvatarUrl(ossVo.getUrl()); + } + } + }); + vo.setMessageLoggingVos(messageLoggingVos); + } + return vo; + + } + + + + /** + * app修改沟通记录阅读状态 + * @param bo + * @return + */ + @Override + public int editCheckStatus(BusComplaintBoxBo bo) { + if (bo.getId() == null || bo.getUserId() == null) { + return 1; + } + Long count = messageLoggingMapper.selectCount(new LambdaQueryWrapper() + .eq(BusComplaintBoxMessageLogging::getStatus,"0") + .eq(BusComplaintBoxMessageLogging::getComplaintId, bo.getId()) + .eq(BusComplaintBoxMessageLogging::getRepliedUserId, bo.getUserId())); + if (count == 0) { + return 1; + } + return messageLoggingMapper.update(new LambdaUpdateWrapper() + .set(BusComplaintBoxMessageLogging::getStatus,"1") + .eq(BusComplaintBoxMessageLogging::getComplaintId,bo.getId()) + .eq(BusComplaintBoxMessageLogging::getRepliedUserId,bo.getUserId())); + } + + @Override + public List getCount(BusComplaintBoxBo bo) { + + return baseMapper.getCount(bo); + } + + @Override + public int editStatus(BusComplaintBoxBo bo) { + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(bo.getId()); + if (busComplaintBoxVo == null){ + throw new ServiceException("找不到意见!!"); + } + if ("14".equals(busComplaintBoxVo.getStatus())){ + throw new ServiceException("该意见已经关闭,不允许再修改状态"); + } + return baseMapper.update(new LambdaUpdateWrapper().set(BusComplaintBox::getStatus,bo.getStatus()).eq(BusComplaintBox::getId, bo.getId())); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxDisposeLoggingMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxDisposeLoggingMapper.xml new file mode 100644 index 00000000..d6a5ad8e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxDisposeLoggingMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml new file mode 100644 index 00000000..d6798ea1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml new file mode 100644 index 00000000..4fa66cef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml @@ -0,0 +1,7 @@ + + + + + From 4aaf384ce8334e5268c8ae28bf477a7fab9e80b5 Mon Sep 17 00:00:00 2001 From: lg Date: Mon, 1 Dec 2025 20:00:39 +0800 Subject: [PATCH 10/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 + .../jxgl/controller/JxGzwxController.java | 140 ++++++++++++ .../jxgl/controller/JxGzwxJlController.java | 118 +++++++++++ .../jxgl/controller/JxWhjhController.java | 138 ++++++++++++ .../jxgl/controller/JxWhjlController.java | 145 +++++++++++++ .../mechanical/jxgl/domain/JxGzwx.java | 91 ++++++++ .../mechanical/jxgl/domain/JxGzwxJl.java | 114 ++++++++++ .../mechanical/jxgl/domain/JxWhjh.java | 103 +++++++++ .../mechanical/jxgl/domain/JxWhjl.java | 96 +++++++++ .../mechanical/jxgl/domain/bo/JxGzwxBo.java | 95 +++++++++ .../mechanical/jxgl/domain/bo/JxGzwxJlBo.java | 111 ++++++++++ .../mechanical/jxgl/domain/bo/JxWhjhBo.java | 109 ++++++++++ .../mechanical/jxgl/domain/bo/JxWhjlBo.java | 97 +++++++++ .../jxgl/domain/vo/JxGzwxHeadVo.java | 21 ++ .../mechanical/jxgl/domain/vo/JxGzwxJlVo.java | 137 ++++++++++++ .../mechanical/jxgl/domain/vo/JxGzwxVo.java | 112 ++++++++++ .../jxgl/domain/vo/JxWhjhHeadVo.java | 23 ++ .../mechanical/jxgl/domain/vo/JxWhjhVo.java | 132 ++++++++++++ .../jxgl/domain/vo/JxWhjlHeadVo.java | 17 ++ .../mechanical/jxgl/domain/vo/JxWhjlVo.java | 122 +++++++++++ .../jxgl/mapper/JxGzwxJlMapper.java | 15 ++ .../mechanical/jxgl/mapper/JxGzwxMapper.java | 15 ++ .../mechanical/jxgl/mapper/JxWhjhMapper.java | 15 ++ .../mechanical/jxgl/mapper/JxWhjlMapper.java | 15 ++ .../jxgl/service/IJxGzwxJlService.java | 73 +++++++ .../jxgl/service/IJxGzwxService.java | 73 +++++++ .../jxgl/service/IJxWhjhService.java | 73 +++++++ .../jxgl/service/IJxWhjlService.java | 73 +++++++ .../service/impl/JxGzwxJlServiceImpl.java | 171 +++++++++++++++ .../jxgl/service/impl/JxGzwxServiceImpl.java | 178 ++++++++++++++++ .../jxgl/service/impl/JxWhjhServiceImpl.java | 177 ++++++++++++++++ .../jxgl/service/impl/JxWhjlServiceImpl.java | 200 ++++++++++++++++++ 32 files changed, 3001 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index f7945fe0..261ac1cb 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -305,6 +305,8 @@ 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 # knife4j的增强配置,不需要增强可以不配 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 new file mode 100644 index 00000000..1c57d717 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java @@ -0,0 +1,140 @@ +package org.dromara.mechanical.jxgl.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.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.system.service.impl.SysOssServiceImpl; +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.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械故障维修 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/gzwx") +public class JxGzwxController extends BaseController { + + private final IJxGzwxService jxGzwxService; + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 查询机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/list") + public TableDataInfo list(JxGzwxBo bo, PageQuery pageQuery) { + return jxGzwxService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwx:export") + @Log(title = "机械故障维修", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxGzwxBo bo, HttpServletResponse response) { + List list = jxGzwxService.queryList(bo); + ExcelUtil.exportExcel(list, "机械故障维修", JxGzwxVo.class, response); + } + + /** + * 获取机械故障维修详细信息 + * + * @param faultId 主键 + */ + @SaCheckPermission("jxgl:gzwx:query") + @GetMapping("/{faultId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long faultId) { + return R.ok(jxGzwxService.queryById(faultId)); + } + + /** + * 新增机械故障维修 + */ + @SaCheckPermission("jxgl:gzwx:add") + @Log(title = "机械故障维修", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxGzwxBo bo) { + return toAjax(jxGzwxService.insertByBo(bo)); + } + + /** + * 修改机械故障维修 + */ + @SaCheckPermission("jxgl:gzwx:edit") + @Log(title = "机械故障维修", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxGzwxBo bo) { + return toAjax(jxGzwxService.updateByBo(bo)); + } + + /** + * 删除机械故障维修 + * + * @param faultIds 主键串 + */ + @SaCheckPermission("jxgl:gzwx:remove") + @Log(title = "机械故障维修", businessType = BusinessType.DELETE) + @DeleteMapping("/{faultIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] faultIds) { + return toAjax(jxGzwxService.deleteWithValidByIds(List.of(faultIds), true)); + } + + /** + * 机械故障头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:gzwx:list") + @Log(title = "机械故障头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxgzwx") + public R jxgzwx() { + return R.ok(jxGzwxService.jxgzwx()); + } +} 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 new file mode 100644 index 00000000..22e39efd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java @@ -0,0 +1,118 @@ +package org.dromara.mechanical.jxgl.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.jxgl.domain.vo.JxGzwxHeadVo; +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.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.service.IJxGzwxJlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械故障维修记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/gzwxJl") +public class JxGzwxJlController extends BaseController { + + private final IJxGzwxJlService jxGzwxJlService; + + /** + * 查询机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @GetMapping("/list") + public TableDataInfo list(JxGzwxJlBo bo, PageQuery pageQuery) { + return jxGzwxJlService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwxJl:export") + @Log(title = "机械故障维修记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxGzwxJlBo bo, HttpServletResponse response) { + List list = jxGzwxJlService.queryList(bo); + ExcelUtil.exportExcel(list, "机械故障维修记录", JxGzwxJlVo.class, response); + } + + /** + * 获取机械故障维修记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:gzwxJl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxGzwxJlService.queryById(id)); + } + + /** + * 新增机械故障维修记录 + */ + @SaCheckPermission("jxgl:gzwxJl:add") + @Log(title = "机械故障维修记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxGzwxJlBo bo) { + return toAjax(jxGzwxJlService.insertByBo(bo)); + } + + /** + * 修改机械故障维修记录 + */ + @SaCheckPermission("jxgl:gzwxJl:edit") + @Log(title = "机械故障维修记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxGzwxJlBo bo) { + return toAjax(jxGzwxJlService.updateByBo(bo)); + } + + /** + * 删除机械故障维修记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:gzwxJl:remove") + @Log(title = "机械故障维修记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxGzwxJlService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 机械故障记录头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @Log(title = "机械故障记录头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxgzwx") + public R jxgzwx() { + return R.ok(jxGzwxJlService.jxgzwx()); + } +} 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 new file mode 100644 index 00000000..06a067e9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java @@ -0,0 +1,138 @@ +package org.dromara.mechanical.jxgl.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.jxgl.domain.vo.JxWhjhHeadVo; +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.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械维护计划 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/whjh") +public class JxWhjhController extends BaseController { + + private final IJxWhjhService jxWhjhService; + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 查询机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/list") + public TableDataInfo list(JxWhjhBo bo, PageQuery pageQuery) { + return jxWhjhService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjh:export") + @Log(title = "机械维护计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxWhjhBo bo, HttpServletResponse response) { + List list = jxWhjhService.queryList(bo); + ExcelUtil.exportExcel(list, "机械维护计划", JxWhjhVo.class, response); + } + + /** + * 获取机械维护计划详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:whjh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxWhjhService.queryById(id)); + } + + /** + * 新增机械维护计划 + */ + @SaCheckPermission("jxgl:whjh:add") + @Log(title = "机械维护计划", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxWhjhBo bo) { + return toAjax(jxWhjhService.insertByBo(bo)); + } + + /** + * 修改机械维护计划 + */ + @SaCheckPermission("jxgl:whjh:edit") + @Log(title = "机械维护计划", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxWhjhBo bo) { + return toAjax(jxWhjhService.updateByBo(bo)); + } + + /** + * 删除机械维护计划 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:whjh:remove") + @Log(title = "机械维护计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxWhjhService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 机械维护计划头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:whjh:list") + @Log(title = "机械维护计划", businessType = BusinessType.DELETE) + @GetMapping("/jxwh") + public R jxwhHead() { + return R.ok(jxWhjhService.jxwhHead()); + } +} 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 new file mode 100644 index 00000000..353ec7da --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java @@ -0,0 +1,145 @@ +package org.dromara.mechanical.jxgl.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.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +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.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械维护记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/whjl") +public class JxWhjlController extends BaseController { + + private final IJxWhjlService jxWhjlService; + + private final IJxWhjhService jxWhjhService; + + + + + + + /** + * 查询机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjl:list") + @GetMapping("/getlist") + public TableDataInfo list(JxWhjhBo bo, PageQuery pageQuery) { + return jxWhjhService.queryPageList(bo, pageQuery); + } + + /** + * 查询机械维护记录列表 + */ + @SaCheckPermission("jxgl:whjl:list") + @GetMapping("/list") + public TableDataInfo list(JxWhjlBo bo, PageQuery pageQuery) { + return jxWhjlService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械维护记录列表 + */ + @SaCheckPermission("jxgl:whjl:export") + @Log(title = "机械维护记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxWhjlBo bo, HttpServletResponse response) { + List list = jxWhjlService.queryList(bo); + ExcelUtil.exportExcel(list, "机械维护记录", JxWhjlVo.class, response); + } + + /** + * 获取机械维护记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:whjl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxWhjlService.queryById(id)); + } + + /** + * 新增机械维护记录 + */ + @SaCheckPermission("jxgl:whjl:add") + @Log(title = "机械维护记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxWhjlBo bo) { + return toAjax(jxWhjlService.insertByBo(bo)); + } + + /** + * 修改机械维护记录 + */ + @SaCheckPermission("jxgl:whjl:edit") + @Log(title = "机械维护记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxWhjlBo bo) { + return toAjax(jxWhjlService.updateByBo(bo)); + } + + /** + * 删除机械维护记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:whjl:remove") + @Log(title = "机械维护记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxWhjlService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 机械维护记录头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:whjl:list") + @Log(title = "机械维护记录头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxwjjl") + public R jxwhHead() { + return R.ok(jxWhjlService.jxwhHead()); + } + + + + + + +} 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 new file mode 100644 index 00000000..aa0cf93d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java @@ -0,0 +1,91 @@ +package org.dromara.mechanical.jxgl.domain; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +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; + +/** + * 机械故障维修对象 jx_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_gzwx") +public class JxGzwx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 故障ID + */ + @TableId(value = "fault_id") + private Long faultId; + + /** + * 台账ID + */ + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障发生时间 + */ + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + private String faultType; + + /** + * 故障描述 + */ + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + private String severity; + + /** + * 维修预期完成日期 + */ + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..b06e8a2d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java @@ -0,0 +1,114 @@ +package org.dromara.mechanical.jxgl.domain; + +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.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.LocalDateTime; + +/** + * 机械故障维修记录对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_gzwx_jl") +public class JxGzwxJl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 故障ID + */ + private Long faultId; + + + /** + * 台账ID + */ + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 维修开始时间 + */ + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + private Long repairPerson; + + /** + * 维修内容 + */ + private String repairContent; + + /** + * 更换配件 + */ + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + private BigDecimal repairCost; + + /** + * 原因分析 + */ + private String faultCause; + + /** + * 预防措施 + */ + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..076488d6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java @@ -0,0 +1,103 @@ +package org.dromara.mechanical.jxgl.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; + +/** + * 机械维护计划对象 jx_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_whjh") +public class JxWhjh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 计划ID(主键) + */ + @TableId(value = "id") + private Long id; + + /** + * 台账ID(关联设备台账) + */ + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 计划类型 字典 + */ + private String planType; + + /** + * 保养级别 字典 + */ + private String maintenanceLevel; + + /** + * 保养内容 + */ + private String maintenanceItems; + + /** + * 周期类型 字典 + */ + private String cycleType; + + /** + * 周期值 + */ + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + private Long responsiblePerson; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + private String status; + + /** + * 提前几天提醒 + */ + private Long remindBeforeDays; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..134cf973 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java @@ -0,0 +1,96 @@ +package org.dromara.mechanical.jxgl.domain; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +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; + +/** + * 机械维护记录对象 jx_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_whjl") +public class JxWhjl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 记录ID + */ + @TableId(value = "id") + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + private Long whjhId; + + /** + * 台账ID + */ + private Long equipmentId; + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + + /** + * 实际保养日期 + */ + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + private String maintenanceItems; + + /** + * 更换配件列表 + */ + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + private String materialsUsed; + + /** + * 执行人 + */ + private Long maintainer; + + /** + * 保养结果(正常/异常/需复检) + */ + private String maintenanceResult; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..dcb583e1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java @@ -0,0 +1,95 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxGzwx; +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; + +/** + * 机械故障维修业务对象 jx_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxGzwx.class, reverseConvertGenerate = false) +public class JxGzwxBo extends BaseEntity { + + /** + * 故障ID + */ + private Long faultId; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 故障发生时间 + */ + @NotNull(message = "故障发生时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + @NotBlank(message = "故障类型 (发动机/液压系统/电器系统/底盘/其他)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String faultType; + + /** + * 故障描述 + */ + @NotBlank(message = "故障描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + @NotBlank(message = "故障严重程度 (轻微/一般/严重/停机)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String severity; + + /** + * 维修预期完成日期 + */ + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + @NotBlank(message = "状态 维修中 已恢复 关闭不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..65bdab3d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java @@ -0,0 +1,111 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +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; + +/** + * 机械故障维修记录业务对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxGzwxJl.class, reverseConvertGenerate = false) +public class JxGzwxJlBo extends BaseEntity { + + /** + * ID + */ + private Long id; + + /** + * 故障ID + */ + @NotNull(message = "故障ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long faultId; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 维修开始时间 + */ + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + private Long repairPerson; + + /** + * 维修内容 + */ + private String repairContent; + + /** + * 更换配件 + */ + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + private BigDecimal repairCost; + + /** + * 原因分析 + */ + private String faultCause; + + /** + * 预防措施 + */ + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + @NotBlank(message = "状态 维修中 已恢复 关闭不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..b240229f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java @@ -0,0 +1,109 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxWhjh; +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; + +/** + * 机械维护计划业务对象 jx_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxWhjh.class, reverseConvertGenerate = false) +public class JxWhjhBo extends BaseEntity { + + /** + * 计划ID(主键) + */ + private Long id; + + /** + * 台账ID(关联设备台账) + */ + @NotNull(message = "台账ID(关联设备台账)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 计划类型 字典 + */ + @NotBlank(message = "计划类型 字典不能为空", groups = { AddGroup.class, EditGroup.class }) + private String planType; + + /** + * 保养级别 字典 + */ + @NotBlank(message = "保养级别 字典不能为空", groups = { AddGroup.class, EditGroup.class }) + private String maintenanceLevel; + + /** + * 保养内容 + */ + private String maintenanceItems; + + /** + * 周期类型 字典 + */ + private String cycleType; + + /** + * 周期值 + */ + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + @NotNull(message = "计划开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + @NotNull(message = "计划截止日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + @NotNull(message = "负责人员不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long responsiblePerson; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + @NotBlank(message = "状态 (未开始/进行中/已完成/逾期)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 提前几天提醒 + */ + private Long remindBeforeDays; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} 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 new file mode 100644 index 00000000..28808e00 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java @@ -0,0 +1,97 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxWhjl; +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; + +/** + * 机械维护记录业务对象 jx_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxWhjl.class, reverseConvertGenerate = false) +public class JxWhjlBo extends BaseEntity { + + /** + * 记录ID + */ + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + private Long whjhId; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + + /** + * 实际保养日期 + */ + @NotNull(message = "实际保养日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + @NotNull(message = "当日/累计工时(用于判断周期)不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + private String maintenanceItems; + + /** + * 更换配件列表 + */ + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + private String materialsUsed; + + /** + * 执行人 + */ + @NotNull(message = "执行人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long maintainer; + + /** + * 保养结果(正常/异常/需复检) + */ + @NotBlank(message = "保养结果(正常/异常/需复检)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String maintenanceResult; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java new file mode 100644 index 00000000..287bcb5c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java @@ -0,0 +1,21 @@ +package org.dromara.mechanical.jxgl.domain.vo; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxGzwxHeadVo implements Serializable { + + //总计划数 + private Long zs = 0L; + + //待处理 + private Long dcl = 0L; + + // 已完成 + private Long ywc = 0L; + + +} 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 new file mode 100644 index 00000000..22122ead --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java @@ -0,0 +1,137 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; + +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.mechanical.jxgl.domain.JxGzwxJl; +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.LocalDateTime; +import java.util.Date; + + + +/** + * 机械故障维修记录视图对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxGzwxJl.class) +public class JxGzwxJlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 台账ID + */ + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障ID + */ + @ExcelProperty(value = "故障ID") + private Long faultId; + + /** + * 维修开始时间 + */ + @ExcelProperty(value = "维修开始时间") + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + @ExcelProperty(value = "维修结束时间") + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + @ExcelProperty(value = "维修人员") + private Long repairPerson; + + /** + * 维修内容 + */ + @ExcelProperty(value = "维修内容") + private String repairContent; + + /** + * 更换配件 + */ + @ExcelProperty(value = "更换配件") + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + @ExcelProperty(value = "维修费用", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "材=料费,+=,工=时费") + private BigDecimal repairCost; + + /** + * 原因分析 + */ + @ExcelProperty(value = "原因分析 ") + private String faultCause; + + /** + * 预防措施 + */ + @ExcelProperty(value = "预防措施") + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + @ExcelProperty(value = "状态 维修中 已恢复 关闭", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzwxzt") + private String status; + + /** + * 故障照片、维修工单 + */ + @ExcelProperty(value = "故障照片、维修工单") + private String attachments; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件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/mechanical/jxgl/domain/vo/JxGzwxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java new file mode 100644 index 00000000..74f4b586 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java @@ -0,0 +1,112 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +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_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxGzwx.class) +public class JxGzwxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 故障ID + */ + @ExcelProperty(value = "故障ID") + private Long faultId; + + /** + * 台账ID + */ + @ExcelProperty(value = "台账ID") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障发生时间 + */ + @ExcelProperty(value = "故障发生时间") + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + @ExcelProperty(value = "故障类型 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzlx") + private String faultType; + + /** + * 故障描述 + */ + @ExcelProperty(value = "故障描述") + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + @ExcelProperty(value = "故障严重程度 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzyzcd") + private String severity; + + /** + * 维修预期完成日期 + */ + @ExcelProperty(value = "维修预期完成日期") + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + @ExcelProperty(value = "状态 维修中 已恢复 关闭", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzwxzt") + private String status; + + /** + * 故障照片、维修工单 + */ + @ExcelProperty(value = "故障照片、维修工单") + private String attachments; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件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/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java new file mode 100644 index 00000000..2ecb573b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java @@ -0,0 +1,23 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class JxWhjhHeadVo implements Serializable { + //总计划数 + private Long zs = 0L; + + //未完成 + private Long wwc = 0L; + //已完成 + private Long ywc = 0L; + //逾期 + private Long yq = 0L; + + + + +} 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 new file mode 100644 index 00000000..13c866eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java @@ -0,0 +1,132 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +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_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxWhjh.class) +public class JxWhjhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 计划ID(主键) + */ + @ExcelProperty(value = "计划ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "主=键") + private Long id; + + /** + * 台账ID(关联设备台账) + */ + @ExcelProperty(value = "台账ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联设备台账") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + @ExcelProperty(value = "设备名称/型号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "显=示用") + private String equipmentName; + + /** + * 计划类型 字典 + */ + @ExcelProperty(value = "计划类型 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_jhlx") + private String planType; + + /** + * 保养级别 字典 + */ + @ExcelProperty(value = "保养级别 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_byjb") + private String maintenanceLevel; + + /** + * 保养内容 + */ + @ExcelProperty(value = "保养内容") + private String maintenanceItems; + + /** + * 周期类型 字典 + */ + @ExcelProperty(value = "周期类型 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_zqlx") + private String cycleType; + + /** + * 周期值 + */ + @ExcelProperty(value = "周期值") + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + @ExcelProperty(value = "计划开始日期") + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + @ExcelProperty(value = "计划截止日期") + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + @ExcelProperty(value = "负责人员") + private Long responsiblePerson; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + @ExcelProperty(value = "状态 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_whjhzt") + private String status; + + /** + * 提前几天提醒 + */ + @ExcelProperty(value = "提前几天提醒") + private Long remindBeforeDays; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件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/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java new file mode 100644 index 00000000..24159744 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java @@ -0,0 +1,17 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxWhjlHeadVo implements Serializable { + //总数 + private Long zs = 0L; + //正常 + private Long zc = 0L; + //异常 + private Long yc = 0L; + //需复检 + private Long xfc = 0L; +} 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 new file mode 100644 index 00000000..805715b2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java @@ -0,0 +1,122 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +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_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxWhjl.class) +public class JxWhjlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 记录ID + */ + @ExcelProperty(value = "记录ID") + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + @ExcelProperty(value = "所属计划ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "可=空,因为有些是临时保养") + private Long whjhId; + + /** + * 台账ID + */ + @ExcelProperty(value = "台账ID") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + + /** + * 实际保养日期 + */ + @ExcelProperty(value = "实际保养日期") + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + @ExcelProperty(value = "当日/累计工时", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "用=于判断周期") + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + @ExcelProperty(value = "实际保养内容", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "J=SON") + private String maintenanceItems; + + /** + * 更换配件列表 + */ + @ExcelProperty(value = "更换配件列表") + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + @ExcelProperty(value = "使用耗材", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "润=滑油、滤芯等") + private String materialsUsed; + + /** + * 执行人 + */ + @ExcelProperty(value = "执行人") + private Long maintainer; + + /** + * 保养结果(正常/异常/需复检) + */ + @ExcelProperty(value = "保养结果", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "正=常/异常/需复检") + private String maintenanceResult; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件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/mechanical/jxgl/mapper/JxGzwxJlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java new file mode 100644 index 00000000..c31756f5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械故障维修记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxGzwxJlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java new file mode 100644 index 00000000..51d42287 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械故障维修Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxGzwxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java new file mode 100644 index 00000000..c4f3cf0e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械维护计划Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxWhjhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java new file mode 100644 index 00000000..d1b9570c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械维护记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxWhjlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java new file mode 100644 index 00000000..a4b2634d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java @@ -0,0 +1,73 @@ +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.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +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-01 + */ +public interface IJxGzwxJlService extends IService{ + + /** + * 查询机械故障维修记录 + * + * @param id 主键 + * @return 机械故障维修记录 + */ + JxGzwxJlVo queryById(Long id); + + /** + * 分页查询机械故障维修记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修记录分页列表 + */ + TableDataInfo queryPageList(JxGzwxJlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械故障维修记录列表 + * + * @param bo 查询条件 + * @return 机械故障维修记录列表 + */ + List queryList(JxGzwxJlBo bo); + + /** + * 新增机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxGzwxJlBo bo); + + /** + * 修改机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxGzwxJlBo bo); + + /** + * 校验并批量删除机械故障维修记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxGzwxHeadVo jxgzwx(); +} 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 new file mode 100644 index 00000000..f040ddc5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +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-01 + */ +public interface IJxGzwxService extends IService{ + + /** + * 查询机械故障维修 + * + * @param faultId 主键 + * @return 机械故障维修 + */ + JxGzwxVo queryById(Long faultId); + + /** + * 分页查询机械故障维修列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修分页列表 + */ + TableDataInfo queryPageList(JxGzwxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械故障维修列表 + * + * @param bo 查询条件 + * @return 机械故障维修列表 + */ + List queryList(JxGzwxBo bo); + + /** + * 新增机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否新增成功 + */ + Boolean insertByBo(JxGzwxBo bo); + + /** + * 修改机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否修改成功 + */ + Boolean updateByBo(JxGzwxBo bo); + + /** + * 校验并批量删除机械故障维修信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxGzwxHeadVo jxgzwx(); +} 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 new file mode 100644 index 00000000..3c4127d1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +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-01 + */ +public interface IJxWhjhService extends IService{ + + /** + * 查询机械维护计划 + * + * @param id 主键 + * @return 机械维护计划 + */ + JxWhjhVo queryById(Long id); + + /** + * 分页查询机械维护计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护计划分页列表 + */ + TableDataInfo queryPageList(JxWhjhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械维护计划列表 + * + * @param bo 查询条件 + * @return 机械维护计划列表 + */ + List queryList(JxWhjhBo bo); + + /** + * 新增机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否新增成功 + */ + Boolean insertByBo(JxWhjhBo bo); + + /** + * 修改机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否修改成功 + */ + Boolean updateByBo(JxWhjhBo bo); + + /** + * 校验并批量删除机械维护计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxWhjhHeadVo jxwhHead(); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java new file mode 100644 index 00000000..6f2255da --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +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-01 + */ +public interface IJxWhjlService extends IService{ + + /** + * 查询机械维护记录 + * + * @param id 主键 + * @return 机械维护记录 + */ + JxWhjlVo queryById(Long id); + + /** + * 分页查询机械维护记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护记录分页列表 + */ + TableDataInfo queryPageList(JxWhjlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械维护记录列表 + * + * @param bo 查询条件 + * @return 机械维护记录列表 + */ + List queryList(JxWhjlBo bo); + + /** + * 新增机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxWhjlBo bo); + + /** + * 修改机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxWhjlBo bo); + + /** + * 校验并批量删除机械维护记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxWhjlHeadVo jxwhHead(); +} 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 new file mode 100644 index 00000000..34ef2b9e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java @@ -0,0 +1,171 @@ +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.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.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.mechanical.jxgl.mapper.JxGzwxJlMapper; +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; + +/** + * 机械故障维修记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxGzwxJlServiceImpl extends ServiceImpl implements IJxGzwxJlService { + + private final JxGzwxJlMapper baseMapper; + + private final IJxGzwxService jxGzwxService; + + /** + * 查询机械故障维修记录 + * + * @param id 主键 + * @return 机械故障维修记录 + */ + @Override + public JxGzwxJlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械故障维修记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxGzwxJlBo 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(JxGzwxJlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxGzwxJlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxGzwxJl::getId); + lqw.eq(bo.getFaultId() != null, JxGzwxJl::getFaultId, bo.getFaultId()); + 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.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()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxGzwxJl::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getAttachments()), JxGzwxJl::getAttachments, bo.getAttachments()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxGzwxJl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxGzwxJlBo bo) { + JxGzwxJl add = MapstructUtils.convert(bo, JxGzwxJl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (bo != null){ + jxGzwxService.getBaseMapper().update(new UpdateWrapper().eq("fault_id", bo.getFaultId()).set("status",bo.getStatus())); + } + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxGzwxJlBo bo) { + JxGzwxJl update = MapstructUtils.convert(bo, JxGzwxJl.class); + validEntityBeforeSave(update); + if (bo != null){ + jxGzwxService.getBaseMapper().update(new UpdateWrapper().eq("fault_id", bo.getFaultId()).set("status",bo.getStatus())); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxGzwxJl 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 JxGzwxHeadVo jxgzwx() { + JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo(); + List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxGzwxJl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + 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(); + + jxGzwxHeadVo.setDcl(wxz); + jxGzwxHeadVo.setZs(Long.valueOf(jxGzwxes.size())); + jxGzwxHeadVo.setYwc(hf); + } + return jxGzwxHeadVo; + } +} 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 new file mode 100644 index 00000000..9f75c38d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java @@ -0,0 +1,178 @@ +package org.dromara.mechanical.jxgl.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.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.mapper.JxGzwxMapper; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械故障维修Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxGzwxServiceImpl extends ServiceImpl implements IJxGzwxService { + + private final JxGzwxMapper baseMapper; + + private final SysOssServiceImpl sysOssService; + + /** + * 查询机械故障维修 + * + * @param faultId 主键 + * @return 机械故障维修 + */ + @Override + public JxGzwxVo queryById(Long faultId){ + return baseMapper.selectVoById(faultId); + } + + /** + * 分页查询机械故障维修列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修分页列表 + */ + @Override + public TableDataInfo queryPageList(JxGzwxBo 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(JxGzwxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxGzwxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxGzwx::getFaultId); + lqw.eq(bo.getEquipmentId() != null, JxGzwx::getEquipmentId, bo.getEquipmentId()); + lqw.eq(bo.getFaultTime() != null, JxGzwx::getFaultTime, bo.getFaultTime()); + 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()); + lqw.eq(bo.getRepairStartTime() != null, JxGzwx::getRepairStartTime, bo.getRepairStartTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxGzwx::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getAttachments()), JxGzwx::getAttachments, bo.getAttachments()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxGzwx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxGzwxBo bo) { + JxGzwx add = MapstructUtils.convert(bo, JxGzwx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setFaultId(add.getFaultId()); + } + return flag; + } + + /** + * 修改机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxGzwxBo bo) { + JxGzwx update = MapstructUtils.convert(bo, JxGzwx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxGzwx 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) { + JxGzwxVo 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(JxGzwx::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + 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(); + + jxGzwxHeadVo.setDcl(wxz); + jxGzwxHeadVo.setZs(Long.valueOf(jxGzwxes.size())); + jxGzwxHeadVo.setYwc(hf); + } + + + return jxGzwxHeadVo; + } +} 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 new file mode 100644 index 00000000..cfe4bf09 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java @@ -0,0 +1,177 @@ +package org.dromara.mechanical.jxgl.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.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.settlement.domain.vo.XzdJsSjJungonVo; +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 java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械维护计划Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxWhjhServiceImpl extends ServiceImpl implements IJxWhjhService { + + private final JxWhjhMapper baseMapper; + private final SysOssServiceImpl sysOssService; + + /** + * 查询机械维护计划 + * + * @param id 主键 + * @return 机械维护计划 + */ + @Override + public JxWhjhVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械维护计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护计划分页列表 + */ + @Override + public TableDataInfo queryPageList(JxWhjhBo 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(JxWhjhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxWhjhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxWhjh::getId); + lqw.eq(bo.getEquipmentId() != null, JxWhjh::getEquipmentId, bo.getEquipmentId()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxWhjh::getEquipmentName, bo.getEquipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanType()), JxWhjh::getPlanType, bo.getPlanType()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceLevel()), JxWhjh::getMaintenanceLevel, bo.getMaintenanceLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceItems()), JxWhjh::getMaintenanceItems, bo.getMaintenanceItems()); + lqw.eq(StringUtils.isNotBlank(bo.getCycleType()), JxWhjh::getCycleType, bo.getCycleType()); + lqw.eq(bo.getCycleValue() != null, JxWhjh::getCycleValue, bo.getCycleValue()); + lqw.eq(bo.getExpectedStartDate() != null, JxWhjh::getExpectedStartDate, bo.getExpectedStartDate()); + lqw.eq(bo.getExpectedEndDate() != null, JxWhjh::getExpectedEndDate, bo.getExpectedEndDate()); + lqw.eq(bo.getResponsiblePerson() != null, JxWhjh::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxWhjh::getStatus, bo.getStatus()); + lqw.eq(bo.getRemindBeforeDays() != null, JxWhjh::getRemindBeforeDays, bo.getRemindBeforeDays()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxWhjh::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxWhjhBo bo) { + JxWhjh add = MapstructUtils.convert(bo, JxWhjh.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxWhjhBo bo) { + JxWhjh update = MapstructUtils.convert(bo, JxWhjh.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxWhjh 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) { + JxWhjhVo 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 JxWhjhHeadVo jxwhHead() { + JxWhjhHeadVo jxWhjhHeadVo = new JxWhjhHeadVo(); + List jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxWhjh::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + 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(); + long countyq = jxWhjhs.stream().filter(jxwhjh -> "4".equals(jxwhjh.getStatus())).count(); + jxWhjhHeadVo.setWwc(countwwc); + jxWhjhHeadVo.setYq(countyq); + jxWhjhHeadVo.setYwc(countywc); + jxWhjhHeadVo.setZs(Long.valueOf(jxWhjhs.size())); + } + return jxWhjhHeadVo; + } +} 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 new file mode 100644 index 00000000..2b9ccf12 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java @@ -0,0 +1,200 @@ +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.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.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.mapper.JxWhjlMapper; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械维护记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxWhjlServiceImpl extends ServiceImpl implements IJxWhjlService { + + private final JxWhjlMapper baseMapper; + + private final IJxWhjhService jxWhjhService; + + private final SysOssServiceImpl sysOssService; + + + /** + * 查询机械维护记录 + * + * @param id 主键 + * @return 机械维护记录 + */ + @Override + public JxWhjlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械维护记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxWhjlBo 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(JxWhjlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxWhjlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxWhjl::getId); + lqw.eq(bo.getWhjhId() != null, JxWhjl::getWhjhId, bo.getWhjhId()); + lqw.eq(bo.getEquipmentId() != null, JxWhjl::getEquipmentId, bo.getEquipmentId()); + lqw.eq(bo.getMaintenanceDate() != null, JxWhjl::getMaintenanceDate, bo.getMaintenanceDate()); + lqw.eq(bo.getMaintenanceHours() != null, JxWhjl::getMaintenanceHours, bo.getMaintenanceHours()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceItems()), JxWhjl::getMaintenanceItems, bo.getMaintenanceItems()); + lqw.eq(StringUtils.isNotBlank(bo.getPartsReplaced()), JxWhjl::getPartsReplaced, bo.getPartsReplaced()); + lqw.eq(StringUtils.isNotBlank(bo.getMaterialsUsed()), JxWhjl::getMaterialsUsed, bo.getMaterialsUsed()); + lqw.eq(bo.getMaintainer() != null, JxWhjl::getMaintainer, bo.getMaintainer()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceResult()), JxWhjl::getMaintenanceResult, bo.getMaintenanceResult()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxWhjl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(JxWhjlBo bo) { + JxWhjl add = MapstructUtils.convert(bo, JxWhjl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (bo != null){ + if ("1".equals(bo.getMaintenanceResult())){ + 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()); + } + return flag; + } + + /** + * 修改机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(JxWhjlBo bo) { + JxWhjl update = MapstructUtils.convert(bo, JxWhjl.class); + validEntityBeforeSave(update); + if (update != null){ + if ("1".equals(update.getMaintenanceResult())){ + 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")); + } + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxWhjl 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) { + JxWhjlVo 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 JxWhjlHeadVo jxwhHead() { + + JxWhjlHeadVo jxWhjlHeadVo = new JxWhjlHeadVo(); + List jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper().ge(JxWhjl::getCreateTime, LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()))); + 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(); + long fc = jxWhjls.stream().filter(jxwhjl -> "3".equals(jxwhjl.getMaintenanceResult())).count(); + jxWhjlHeadVo.setZs(Long.valueOf(jxWhjls.size())); + jxWhjlHeadVo.setZc(zc); + jxWhjlHeadVo.setYc(yc); + jxWhjlHeadVo.setXfc(fc); + } + return jxWhjlHeadVo; + } +} From 3e38cf9abb57fa515cfcbf7e67032d0cedc67197 Mon Sep 17 00:00:00 2001 From: lg Date: Tue, 2 Dec 2025 10:10:50 +0800 Subject: [PATCH 11/73] =?UTF-8?q?=E5=90=88=E5=90=8C=E6=98=BE=E7=A4=BAbug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/XzdSubcontractServiceImpl.java | 5 +++-- .../service/impl/XzdContractMachineryServiceImpl.java | 6 ++++-- .../impl/XzdPurchaseContractInformationServiceImpl.java | 5 +++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java index fb038f18..2893fada 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java @@ -19,6 +19,7 @@ import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; import org.dromara.xzd.comprehensive.service.IXzdHtglHtbgqdService; +import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.XzdPurchaseContractAlteration; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.service.IXzdSubcontractChangeService; @@ -201,11 +202,11 @@ public class XzdSubcontractServiceImpl extends ServiceImpl().eq(XzdSubcontractChange::getContractCode, item.getId())); + Long l = xzdSubcontractChangeService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractChange::getContractCode, item.getId()).eq(XzdSubcontractChange::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdSubcontractTerminationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractTermination::getContractNumber, item.getId())); + Long l1 = xzdSubcontractTerminationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractTermination::getContractNumber, item.getId()).eq(XzdSubcontractTermination::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } 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 2e430223..108f6b64 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 @@ -7,6 +7,7 @@ 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.service.XzdContractMachineryService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -19,6 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.XzdPurchaseContractAlteration; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange; import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination; import org.dromara.xzd.contractManagement.jixiehetongbiang.domain.XzdMachineryContractAlteration; @@ -168,11 +170,11 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl().eq(XzdMachineryContractAlteration::getContractInformationId, item.getId())); + Long l = xzdMachineryContractAlterationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractAlteration::getContractInformationId, item.getId()).eq(XzdMachineryContractAlteration::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdMachineryContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractSuspend::getContractInformationId, item.getId())); + Long l1 = xzdMachineryContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractSuspend::getContractInformationId, item.getId()).eq(XzdMachineryContractSuspend::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java index 7171e7bb..a8116902 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java @@ -10,6 +10,7 @@ import org.dromara.common.core.domain.R; 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.service.XzdPurchaseContractInformationService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -539,11 +540,11 @@ public class XzdPurchaseContractInformationServiceImpl extends ServiceImpl().eq(XzdPurchaseContractAlteration::getContractInformationId, item.getId())); + Long l = xzdPurchaseContractAlterationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractAlteration::getContractInformationId, item.getId()).eq(XzdPurchaseContractAlteration::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdPurchaseContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractSuspend::getContractInformationId, item.getId())); + Long l1 = xzdPurchaseContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractSuspend::getContractInformationId, item.getId()).eq(XzdPurchaseContractSuspend::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } From 37c95ab0bd60a4ea54941dbef2aaaac952b388af Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Tue, 2 Dec 2025 15:51:44 +0800 Subject: [PATCH 12/73] =?UTF-8?q?=E6=96=BD=E5=B7=A5=E4=BA=A7=E5=80=BC?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=EF=BC=8C=E5=A4=A7=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 4 +- .../org/dromara/ai/chat/DashScopeChat.java | 10 +- ...mpleChat.java => DashScopeSimpleChat.java} | 4 +- .../controller/PersonalHomeController.java | 4 +- .../OutConstructionValueController.java | 12 +- .../OutConstructionValueRangeController.java | 14 +- .../OutConstructionValueCategoryVo.java | 119 +++++ .../OutConstructionValueMatrixVo.java | 71 +++ .../OutConstructionValueProjectVo.java | 59 +++ .../OutConstructionValueSubProjectVo.java | 65 +++ .../OutConstructionValueVo.java | 2 +- .../OutConstructionValueRangeMatrixVo.java | 71 +++ .../OutConstructionValueRangeProjectVo.java | 59 +++ ...OutConstructionValueRangeSubProjectVo.java | 65 +++ .../OutConstructionValueRangeVo.java | 3 +- .../mapper/OutConstructionValueMapper.java | 2 +- .../OutConstructionValueRangeMapper.java | 2 +- .../IOutConstructionValueRangeService.java | 11 +- .../service/IOutConstructionValueService.java | 24 +- .../OutConstructionValueRangeServiceImpl.java | 386 +++++++++++++++- .../impl/OutConstructionValueServiceImpl.java | 413 +++++++++++++++++- .../PgsProgressCategoryImportTemp.java | 77 ++++ .../impl/PgsProgressCategoryServiceImpl.java | 23 +- .../PgsProgressPlanDetailServiceImpl.java | 7 +- .../service/impl/XzdBxBxsqServiceImpl.java | 6 +- .../service/impl/FlwTaskServiceImpl.java | 21 +- 26 files changed, 1489 insertions(+), 45 deletions(-) rename xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/{SimpleChat.java => DashScopeSimpleChat.java} (88%) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java rename xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/{ => outconstructionvalue}/OutConstructionValueVo.java (98%) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java rename xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/{ => outconstructionvaluerange}/OutConstructionValueRangeVo.java (93%) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryImportTemp.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index 8fd1f4c6..be349c0a 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ server: port: 8899 --- # 监控中心配置 spring.boot.admin.client: - # 增加客户端开关 + # 增加客户端开关 enabled: false url: http://192.168.110.119:9090/admin instance: @@ -66,7 +66,7 @@ spring: # username: xinnengyuan # password: mEZPC5Sdf3r2HENi # 从库数据源 -# slave: + # slave: # lazy: true # type: ${spring.datasource.type} # driverClassName: com.mysql.cj.jdbc.Driver diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java index b24f8d6d..91c9932f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java @@ -25,7 +25,7 @@ import java.util.concurrent.CompletableFuture; public class DashScopeChat { @Resource - private SimpleChat simpleChat; + private DashScopeSimpleChat dashScopeSimpleChat; @Resource private IAIChatMemoryService chatMemoryService; @@ -66,10 +66,8 @@ public class DashScopeChat { .collectList() .flatMapMany(tokens -> { String aiResponse = String.join("", tokens); - if (isFirst) { - // 异步生成标题 - generateChatTitleAsync(chatId, message, aiResponse, userId); - } + // 异步生成标题 + generateChatTitleAsync(chatId, message, aiResponse, userId); // 返回完整的流结果 return Flux.fromIterable(tokens); }); @@ -100,7 +98,7 @@ public class DashScopeChat { 用户:%s AI:%s """, userMessage, aiResponse); - String title = simpleChat.doChat(prompt); + String title = dashScopeSimpleChat.doChat(prompt); log.info("用户:{} 生成标题成功:{} -> {}", userId, chatId, title); // 保存对话数据 AIChatMemory memory = new AIChatMemory(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java similarity index 88% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java index 4f2dbdff..eaa2e68d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java @@ -9,11 +9,11 @@ import org.springframework.stereotype.Component; * @date 2025-11-04 15:26 */ @Component -public class SimpleChat { +public class DashScopeSimpleChat { private final ChatClient dashScopeChatClient; - public SimpleChat(ChatClient.Builder chatClientBuilder) { + public DashScopeSimpleChat(ChatClient.Builder chatClientBuilder) { this.dashScopeChatClient = chatClientBuilder // 设置 ChatClient 中 ChatModel 的 Options 参数 .defaultOptions( diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java index c481c94b..563b71b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java @@ -41,7 +41,6 @@ import org.dromara.patch.service.IPdMasterService; import org.dromara.project.service.IBusProjectService; import org.dromara.system.domain.SysMenu; import org.dromara.system.domain.vo.RouterVo; -import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.service.impl.SysMenuServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.warm.flow.core.FlowEngine; @@ -97,8 +96,7 @@ public class PersonalHomeController extends BaseController { @Resource private IBusProjectService projectService; - private final SysRoleMapper roleMapper; - private final SysMenuServiceImpl sysMenuService; + private final SysMenuServiceImpl sysMenuService; // region AI 模块 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 e54ea5e7..fb7bf5be 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 @@ -18,7 +18,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.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.service.IOutConstructionValueService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -59,6 +59,16 @@ public class OutConstructionValueController extends BaseController { ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response); } + /** + * 导出施工产值范围列表 + */ + @SaCheckPermission("out:constructionValue:export") + @Log(title = "施工产值", businessType = BusinessType.EXPORT) + @PostMapping("/exportByProject") + public void exportByProject(OutConstructionValueBo bo, HttpServletResponse response) { + outConstructionValueService.exportExcel(bo, response); + } + /** * 获取施工产值详细信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java index bf246ab6..ef2f1717 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java @@ -23,8 +23,8 @@ import org.dromara.out.domain.OutConstructionValue; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; import org.springframework.beans.BeanUtils; @@ -114,6 +114,16 @@ public class OutConstructionValueRangeController extends BaseController { } } + /** + * 导出施工产值范围列表 + */ + @SaCheckPermission("out:constructionValueRange:export") + @Log(title = "施工产值范围", businessType = BusinessType.EXPORT) + @PostMapping("/exportByProject") + public void exportByProject(OutConstructionValueRangeBo bo, HttpServletResponse response) { + outConstructionValueRangeService.exportExcel(bo, response); + } + /** * 获取施工产值范围详细信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java new file mode 100644 index 00000000..98cec4b6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java @@ -0,0 +1,119 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author lilemy + * @date 2025-12-01 15:46 + */ +@Data +public class OutConstructionValueCategoryVo { + + /** + * 主键ID + */ + private Long id; + + /** + * 范围ID + */ + private Long rangeId; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 方阵id + */ + private Long matrixId; + + /** + * 分项工程id + */ + private Long progressCategoryId; + + /** + * 分项工程名称 + */ + private String progressCategoryName; + + /** + * 计划详情id + */ + private Long detailId; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 计划数量 + */ + private Integer planNum; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 上报日期 + */ + private LocalDate reportDate; + + /** + * 计划日期 + */ + private LocalDate planDate; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 方阵名称 + */ + private String matrixName; + + /** + * 类别名称 + */ + private String name; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 计量单位 + */ + private String unit; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 关联结构(1子项目 2方阵 3项目) + */ + private String relevancyStructure; +} 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 new file mode 100644 index 00000000..b4950efb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java @@ -0,0 +1,71 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:09 + */ +@Data +public class OutConstructionValueMatrixVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 方阵名称 + */ + @ExcelProperty(value = "方阵") + private String matrixName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} 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 new file mode 100644 index 00000000..28da0f08 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java @@ -0,0 +1,59 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:08 + */ +@Data +public class OutConstructionValueProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} 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 new file mode 100644 index 00000000..991ec8bf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java @@ -0,0 +1,65 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:08 + */ +@Data +public class OutConstructionValueSubProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java similarity index 98% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java index bd9c2392..d4d55877 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java @@ -1,4 +1,4 @@ -package org.dromara.out.domain.vo; +package org.dromara.out.domain.vo.outconstructionvalue; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; 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 new file mode 100644 index 00000000..6356a7eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java @@ -0,0 +1,71 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:31 + */ +@Data +public class OutConstructionValueRangeMatrixVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 方阵名称 + */ + @ExcelProperty(value = "方阵") + private String matrixName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} 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 new file mode 100644 index 00000000..5e3d741f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java @@ -0,0 +1,59 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:30 + */ +@Data +public class OutConstructionValueRangeProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} 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 new file mode 100644 index 00000000..d1d9cfa1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java @@ -0,0 +1,65 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:30 + */ +@Data +public class OutConstructionValueRangeSubProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java similarity index 93% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java index a304b323..b9719c21 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java @@ -1,4 +1,4 @@ -package org.dromara.out.domain.vo; +package org.dromara.out.domain.vo.outconstructionvaluerange; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -7,6 +7,7 @@ import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.out.domain.OutConstructionValueRange; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import java.io.Serial; import java.io.Serializable; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java index b92f97a1..1ddbcf2d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java @@ -3,7 +3,7 @@ package org.dromara.out.mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.dromara.out.domain.OutConstructionValue; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.math.BigDecimal; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java index 12ad8a56..930246db 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java @@ -1,7 +1,7 @@ package org.dromara.out.mapper; import org.dromara.out.domain.OutConstructionValueRange; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java index 721900d9..cfe97b2e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java @@ -1,12 +1,13 @@ package org.dromara.out.service; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import java.util.Collection; import java.util.List; @@ -77,4 +78,12 @@ public interface IOutConstructionValueRangeService extends IService list); + + /** + * 导出数据 + * + * @param bo 查询条件 + * @param response 响应 + */ + void exportExcel(OutConstructionValueBo bo, HttpServletResponse response); + + /** + * 构建导出需要的数据 + * + * @param valueList 施工产值列表 + * @param valueCategoryList 进度类别列表 + * @param topList 顶层进度类别列表 + */ + void buildExportData(List valueList, + List valueCategoryList, + List topList); } 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 31826829..3c43cdf3 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 @@ -2,19 +2,27 @@ package org.dromara.out.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; 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 jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; 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.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.out.domain.OutConstructionValue; @@ -22,24 +30,36 @@ import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueCategoryVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeMatrixVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeProjectVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeSubProjectVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.out.mapper.OutConstructionValueRangeMapper; 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; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import java.time.format.DateTimeFormatter; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 施工产值范围Service业务层处理 @@ -61,6 +81,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(OutConstructionValueRange::getId); - lqw.eq(bo.getProjectId() != null, OutConstructionValueRange::getProjectId, bo.getProjectId()); + if (bo.getProjectId() != null) { + // 获取当前项目的子项目 + List projects = projectService.lambdaQuery() + .eq(BusProject::getPId, bo.getProjectId()) + .select(BusProject::getId) + .list(); + List list = new ArrayList<>(projects.stream().map(BusProject::getId).toList()); + list.add(bo.getProjectId()); + lqw.in(OutConstructionValueRange::getProjectId, list); + } // 日期范围过滤 if (bo.getStartDate() != null) { // 获取本周的星期一 @@ -219,6 +251,354 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl 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 list = this.list(lqw); + if (CollUtil.isEmpty(list)) { + throw new ServiceException("无数据导出"); + } + // 根据周产值查询具体产值 + Set rangeIds = list.stream().map(OutConstructionValueRange::getId).collect(Collectors.toSet()); + List valueList = constructionValueService.lambdaQuery() + .in(OutConstructionValue::getRangeId, rangeIds) + .list(); + if (CollUtil.isEmpty(valueList)) { + throw new ServiceException("无数据导出"); + } + List valueCategoryList = new ArrayList<>(); + List topList = new ArrayList<>(); + constructionValueService.buildExportData(valueList, valueCategoryList, topList); + // 汇总数据 + List projectVoList = new ArrayList<>(); + List subProjectVoList = new ArrayList<>(); + List matrixVoList = new ArrayList<>(); + // 合计 + BigDecimal totalNumber = BigDecimal.ZERO; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + 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); + OutConstructionValueRangeProjectVo projectVo = + buildProjectVo(project, name, childName, childrenEntryValue, summary); + projectVoList.add(projectVo); + totalNumber = totalNumber.add(summary.number); + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if (structure.equals("1") || structure.equals("2")) { + Map> subMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId)); + for (Map.Entry> subEntry : subMap.entrySet()) { + Summary subSummary = calculateSummary(subEntry.getValue()); + OutConstructionValueRangeSubProjectVo subVo = + buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); + subProjectVoList.add(subVo); + subTotalNumber = subTotalNumber.add(subSummary.number); + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.equals("2")) { + Map> matrixMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName)); + for (Map.Entry> matrixEntry : matrixMap.entrySet()) { + Summary matrixSummary = calculateSummary(matrixEntry.getValue()); + OutConstructionValueRangeMatrixVo matrixVo = + buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); + matrixVoList.add(matrixVo); + matrixTotalNumber = matrixTotalNumber.add(matrixSummary.number); + matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); + matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); + } + } + } + } + // 排序 + projectVoList.sort(Comparator.comparing(OutConstructionValueRangeProjectVo::getProgressCategoryName)); + subProjectVoList.sort(Comparator.comparing(OutConstructionValueRangeSubProjectVo::getSubProjectName) + .thenComparing(OutConstructionValueRangeSubProjectVo::getProgressCategoryName)); + matrixVoList.sort(Comparator.comparing(OutConstructionValueRangeMatrixVo::getSubProjectName) + .thenComparing(OutConstructionValueRangeMatrixVo::getMatrixName) + .thenComparing(OutConstructionValueRangeMatrixVo::getProgressCategoryName)); + // 填充合计 + OutConstructionValueRangeProjectVo rangeProjectVo = new OutConstructionValueRangeProjectVo(); + rangeProjectVo.setProjectName("合计"); + rangeProjectVo.setNumber(totalNumber); + rangeProjectVo.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueRangeSubProjectVo rangeSubProjectVo = new OutConstructionValueRangeSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueRangeMatrixVo rangeMatrixVo = new OutConstructionValueRangeMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + // 构建导出数据 + buildExportExcel(project.getProjectName(), response, projectVoList, subProjectVoList, matrixVoList); + } + + /** + * 查找子级 + * + * @param all 所有数据 + * @param topIds 顶级ID + * @return 子级 + */ + private List findChildren( + List all, + List topIds) { + return all.stream() + .filter(item -> { + String ancestors = item.getAncestors(); + if (ancestors == null) return false; + return topIds.stream().anyMatch(topId -> + ancestors.contains("," + topId + ",") || + ancestors.startsWith(topId + ",") || + ancestors.endsWith("," + topId) || + ancestors.equals(String.valueOf(topId)) + ); + }).toList(); + } + + /** + * 汇总静态类 + */ + static class Summary { + BigDecimal number; + BigDecimal ownerValue; + BigDecimal outValue; + } + + /** + * 计算汇总 + * + * @param list 数据 + * @return 汇总 + */ + private Summary calculateSummary(List list) { + Summary s = new Summary(); + s.number = BigDecimal.ZERO; + s.ownerValue = BigDecimal.ZERO; + s.outValue = BigDecimal.ZERO; + for (OutConstructionValueCategoryVo c : list) { + int num = (c.getConfirmNum() == null || c.getConfirmNum() == 0) + ? c.getArtificialNum() + c.getUavNum() + : c.getConfirmNum(); + + s.number = s.number.add(BigDecimal.valueOf(num)); + s.ownerValue = s.ownerValue.add(c.getOwnerValue()); + s.outValue = s.outValue.add(c.getOutValue()); + } + return s; + } + + /** + * 获取第一个非空的值 + * + * @param list 数据 + * @param getter 获取器 + * @return 值 + */ + private T getFirstNonNull(List list, + Function getter) { + return list.stream() + .map(getter) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } + + /** + * 构建项目VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param list 数据 + * @param summary 合计 + * @return 项目VO + */ + 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); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建子项VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param summary 合计 + * @return 子项VO + */ + 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())); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建方阵VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param projectNameMap 项目名称 + * @param summary 合计 + * @return 方阵VO + */ + 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()); + vo.setMatrixName(entry.getKey()); + vo.setProgressCategoryName(name + "/" + childName); + Long pid = list.stream() + .map(OutConstructionValueCategoryVo::getProjectId) + .filter(Objects::nonNull) + .findFirst().orElse(project.getId()); + vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName())); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建导出Excel + * + * @param projectName 项目名称 + * @param response 响应 + * @param projectVoList 项目VO + * @param subProjectVoList 子项VO + * @param matrixVoList 方阵VO + */ + private void buildExportExcel(String projectName, HttpServletResponse response, + List projectVoList, + List subProjectVoList, + List matrixVoList) { + String fileName = projectName + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "-" + "施工产值.xlsx"; + FileUtils.setAttachmentResponseHeader(response, fileName); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); + // 构建 ExcelWriter + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .autoCloseStream(false) + // 自动适配 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 大数值自动转换 防止失真 + .registerConverter(new ExcelBigNumberConvert()) + .build()) { + // === Sheet1 === + WriteSheet sheet1 = EasyExcel.writerSheet(0, "按项目汇总") + .head(OutConstructionValueRangeProjectVo.class) + .build(); + excelWriter.write(projectVoList, sheet1); + // === Sheet2 === + WriteSheet sheet2 = EasyExcel.writerSheet(1, "按子项汇总") + .head(OutConstructionValueRangeSubProjectVo.class) + .build(); + excelWriter.write(subProjectVoList, sheet2); + // === Sheet3 === + WriteSheet sheet3 = EasyExcel.writerSheet(2, "按方阵汇总") + .head(OutConstructionValueRangeMatrixVo.class) + .build(); + excelWriter.write(matrixVoList, sheet3); + } catch (IOException e) { + log.error("施工产值Excel导出失败", e); + throw new ServiceException("导出Excel失败"); + } + } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' 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 81f29acc..b5c8c5f8 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 @@ -1,16 +1,23 @@ package org.dromara.out.service.impl; import cn.hutool.core.collection.CollUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; 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.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.core.utils.file.FileUtils; +import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.facility.domain.FacMatrix; @@ -20,7 +27,7 @@ import org.dromara.out.domain.OutConstructionValueRange; 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.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.*; import org.dromara.out.mapper.OutConstructionValueMapper; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; @@ -35,11 +42,17 @@ import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 施工产值Service业务层处理 @@ -65,6 +78,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl 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)) { + throw new ServiceException("无数据导出"); + } + 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; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + 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(summary.number); + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if (structure.equals("1") || structure.equals("2")) { + 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(subSummary.number); + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.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(matrixSummary.number); + 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.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueSubProjectVo rangeSubProjectVo = new OutConstructionValueSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueMatrixVo rangeMatrixVo = new OutConstructionValueMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + // 构建导出数据 + buildExportExcel(project.getProjectName(), response, projectVoList, subProjectVoList, matrixVoList); + } + + /** + * 构建导出需要的数据 + * + * @param valueList 施工产值列表 + * @param valueCategoryList 进度类别列表 + * @param topList 顶层进度类别列表 + */ + @Override + public void buildExportData(List valueList, + List valueCategoryList, + List topList) { + // 获取对应进度类别 + Set progressCategoryIds = valueList.stream() + .map(OutConstructionValue::getProgressCategoryId) + .collect(Collectors.toSet()); + List progressCategoryList = progressCategoryService.lambdaQuery() + .in(PgsProgressCategory::getId, progressCategoryIds) + .list(); + valueCategoryList.addAll( + valueList.stream().map(value -> { + OutConstructionValueCategoryVo vo = new OutConstructionValueCategoryVo(); + BeanUtils.copyProperties(value, vo); + PgsProgressCategory category = progressCategoryList.stream() + .filter(p -> p.getId().equals(value.getProgressCategoryId())) + .findFirst().orElse(null); + if (category != null) { + vo.setProjectId(category.getProjectId()); + vo.setMatrixName(category.getMatrixName()); + vo.setName(category.getName()); + vo.setUnitType(category.getUnitType()); + vo.setUnit(category.getUnit()); + vo.setAncestors(category.getAncestors()); + vo.setRelevancyStructure(category.getRelevancyStructure()); + } + return vo; + }).toList() + ); + // 顶级进度类别 + Set topProgressCategoryIds = progressCategoryList.stream() + .map(p -> { + String ancestors = p.getAncestors(); + if (StringUtils.isNotBlank(ancestors)) { + String[] split = ancestors.split(","); + return split.length > 1 ? split[1] : null; + } + return null; + }).filter(Objects::nonNull) + .map(Long::parseLong) + .collect(Collectors.toSet()); + List tops = progressCategoryService.listByIds(topProgressCategoryIds) + .stream() + .sorted(Comparator.comparing(PgsProgressCategory::getSort)) + .toList(); + topList.addAll(tops); + } + + /** + * 查找子级 + * + * @param all 所有数据 + * @param topIds 顶级ID + * @return 子级 + */ + private List findChildren( + List all, + List topIds) { + return all.stream() + .filter(item -> { + String ancestors = item.getAncestors(); + if (ancestors == null) return false; + return topIds.stream().anyMatch(topId -> + ancestors.contains("," + topId + ",") || + ancestors.startsWith(topId + ",") || + ancestors.endsWith("," + topId) || + ancestors.equals(String.valueOf(topId)) + ); + }).toList(); + } + + /** + * 汇总静态类 + */ + static class Summary { + BigDecimal number; + BigDecimal ownerValue; + BigDecimal outValue; + } + + /** + * 计算汇总 + * + * @param list 数据 + * @return 汇总 + */ + private Summary calculateSummary(List list) { + Summary s = new Summary(); + s.number = BigDecimal.ZERO; + s.ownerValue = BigDecimal.ZERO; + s.outValue = BigDecimal.ZERO; + for (OutConstructionValueCategoryVo c : list) { + int num = (c.getConfirmNum() == null || c.getConfirmNum() == 0) + ? c.getArtificialNum() + c.getUavNum() + : c.getConfirmNum(); + + s.number = s.number.add(BigDecimal.valueOf(num)); + s.ownerValue = s.ownerValue.add(c.getOwnerValue()); + s.outValue = s.outValue.add(c.getOutValue()); + } + return s; + } + + /** + * 获取第一个非空的值 + * + * @param list 数据 + * @param getter 获取器 + * @return 值 + */ + private T getFirstNonNull(List list, + Function getter) { + return list.stream() + .map(getter) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } + + /** + * 构建项目VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param list 数据 + * @param summary 合计 + * @return 项目VO + */ + private OutConstructionValueProjectVo buildProjectVo( + BusProject project, + String name, + String childName, + List list, + Summary summary) { + OutConstructionValueProjectVo vo = new OutConstructionValueProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建子项VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param summary 合计 + * @return 子项VO + */ + private OutConstructionValueSubProjectVo buildSubProjectVo( + BusProject project, + String name, + String childName, + Map.Entry> entry, + Map projectNameMap, + Summary summary) { + OutConstructionValueSubProjectVo vo = new OutConstructionValueSubProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setSubProjectName(projectNameMap.get(entry.getKey())); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建方阵VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param projectNameMap 项目名称 + * @param summary 合计 + * @return 方阵VO + */ + private OutConstructionValueMatrixVo buildMatrixVo( + BusProject project, + String name, + String childName, + Map.Entry> entry, + Map projectNameMap, + Summary summary) { + List list = entry.getValue(); + OutConstructionValueMatrixVo vo = new OutConstructionValueMatrixVo(); + vo.setProjectName(project.getProjectName()); + vo.setMatrixName(entry.getKey()); + vo.setProgressCategoryName(name + "/" + childName); + Long pid = list.stream() + .map(OutConstructionValueCategoryVo::getProjectId) + .filter(Objects::nonNull) + .findFirst().orElse(project.getId()); + vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName())); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建导出Excel + * + * @param projectName 项目名称 + * @param response 响应 + * @param projectVoList 项目VO + * @param subProjectVoList 子项VO + * @param matrixVoList 方阵VO + */ + private void buildExportExcel(String projectName, HttpServletResponse response, + List projectVoList, + List subProjectVoList, + List matrixVoList) { + String fileName = projectName + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "-" + "施工产值.xlsx"; + FileUtils.setAttachmentResponseHeader(response, fileName); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); + // 构建 ExcelWriter + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .autoCloseStream(false) + // 自动适配 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 大数值自动转换 防止失真 + .registerConverter(new ExcelBigNumberConvert()) + .build()) { + // === Sheet1 === + WriteSheet sheet1 = EasyExcel.writerSheet(0, "按项目汇总") + .head(OutConstructionValueProjectVo.class) + .build(); + excelWriter.write(projectVoList, sheet1); + // === Sheet2 === + WriteSheet sheet2 = EasyExcel.writerSheet(1, "按子项汇总") + .head(OutConstructionValueSubProjectVo.class) + .build(); + excelWriter.write(subProjectVoList, sheet2); + // === Sheet3 === + WriteSheet sheet3 = EasyExcel.writerSheet(2, "按方阵汇总") + .head(OutConstructionValueMatrixVo.class) + .build(); + excelWriter.write(matrixVoList, sheet3); + } catch (IOException e) { + log.error("施工产值Excel导出失败", e); + throw new ServiceException("导出Excel失败"); + } + } + public void getName(OutConstructionValueVo vo) { //查询分部工程以及分项工程 PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryImportTemp.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryImportTemp.java new file mode 100644 index 00000000..a9948cbd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryImportTemp.java @@ -0,0 +1,77 @@ +package org.dromara.progress.domain.dto.progresscategory; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-11-28 14:24 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PgsProgressCategoryImportTemp { + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 方阵id + */ + private Long matrixId; + + /** + * 方阵名称 + */ + private String matrixName; + + /** + * 类别名称 + */ + private String name; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 总数量 + */ + private BigDecimal total; + + /** + * 已完成数量 + */ + private BigDecimal completed; + + /** + * 计划总数量 + */ + private BigDecimal planTotal; + + /** + * 完成状态(0未开始 1进行中 2已完成) + */ + private String status; + + /** + * 工作类型 + */ + private String workType; + + /** + * 新增完成数量 + */ + private BigDecimal newComplete; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java index 84df883b..af746ebd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java @@ -2850,6 +2850,9 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl ids = voList.stream().map(PgsProgressCategoryEnterTemplateVo::getId).toList(); + if (CollUtil.isEmpty(ids)) { + throw new ServiceException("数据错误,无法从当前表格中获取到有效数据"); + } List categoryList = this.listByIds(ids); if (CollUtil.isEmpty(categoryList)) { throw new ServiceException("数据错误,当前项目无此数据"); @@ -2862,18 +2865,22 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl allProjectIds = projects.stream().map(BusProject::getId).toList(); + List tempList = new ArrayList<>(); List list = voList.stream().map(vo -> { PgsProgressCategory update = new PgsProgressCategory(); + PgsProgressCategoryImportTemp temp = new PgsProgressCategoryImportTemp(); Long id = vo.getId(); update.setId(id); + temp.setId(id); if (progressCategoryMap.containsKey(id)) { PgsProgressCategory old = progressCategoryMap.get(id); // 如果不是当前项目,或当前项目的子项目,则返回 null if (!allProjectIds.contains(old.getProjectId())) { return null; } + BigDecimal oldCompleted = old.getCompleted(); // 当已完成数据等于总数,返回 null - if (old.getCompleted().compareTo(old.getTotal()) >= 0) { + if (old.getTotal().compareTo(BigDecimal.ZERO) == 0 || oldCompleted.compareTo(old.getTotal()) >= 0) { return null; } // 如果完成数量小于等于0,则返回 null @@ -2882,9 +2889,17 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl id:{},name:{}", id, vo.getName()); @@ -2895,7 +2910,6 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl detailList = progressPlanDetailService.lambdaQuery() .in(PgsProgressPlanDetail::getProgressCategoryId, updateList) .list(); + if (CollUtil.isEmpty(detailList)) { + // 详情为空,直接创建新详情数据 + } return "导入成功,共更新" + list.size() + "条数据"; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java index 3af2de33..71d5f92d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java @@ -1146,12 +1146,12 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl queryPageList(XzdBxBxsqBo bo, PageQuery pageQuery) { //暂时定为只能看见自己的报销 - if (bo.getBxr() == null && !LoginHelper.isSuperAdmin()) { +/* if (bo.getBxr() == null && !LoginHelper.isSuperAdmin()) { bo.setBxr(LoginHelper.getUserId()); - } + }*/ LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page result = baseMapper.selectPage(pageQuery.build(), lqw); setValue(result.getRecords()); return TableDataInfo.build(result); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 22864fc2..6ade9119 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -276,10 +276,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) - .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + .like(StringUtils.isNotBlank(flowTaskBo.getProjectId()), FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); if (flowDefinitions != null && !flowDefinitions.isEmpty()) { flowDefinitions.forEach(flowDefinition -> { definitionIds.add(flowDefinition.getId()); @@ -292,7 +292,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); - Page page = this.getFlowTaskDefinitionIdsVoPage(pageQuery,definitionIds, queryWrapper); + Page page = this.getFlowTaskDefinitionIdsVoPage(pageQuery, definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -306,7 +306,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); @@ -322,7 +322,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.approver", LoginHelper.getUserIdStr()); queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time"); - Page page = flwTaskMapper.getListFinishDefinitionIdsTask(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getListFinishDefinitionIdsTask(pageQuery.build(), definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -356,8 +356,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } return page; } + private Page getFlowTaskDefinitionIdsVoPage(PageQuery pageQuery, List definitionIds, QueryWrapper queryWrapper) { - Page page = flwTaskMapper.getListRunTaskDefinitionIds(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getListRunTaskDefinitionIds(pageQuery.build(), definitionIds, queryWrapper); List records = page.getRecords(); if (CollUtil.isNotEmpty(records)) { List taskIds = StreamUtils.toList(records, FlowTaskVo::getId); @@ -396,7 +397,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); @@ -409,9 +410,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return null; } } - queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getIsRead()),"t.is_read", flowTaskBo.getIsRead()); + queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getIsRead()), "t.is_read", flowTaskBo.getIsRead()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); - Page page = flwTaskMapper.getTaskCopyDefinitionIdsByPage(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getTaskCopyDefinitionIdsByPage(pageQuery.build(), definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -598,7 +599,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { for (FlowNode flowNode : nextFlowNodes) { buildNextTaskList.stream().filter(t -> t.getNodeCode().equals(flowNode.getNodeCode())).findFirst().ifPresent(t -> { if (CollUtil.isNotEmpty(t.getPermissionList())) { - List users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()),null); + List users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()), null); if (CollUtil.isNotEmpty(users)) { flowNode.setPermissionFlag(StreamUtils.join(users, e -> String.valueOf(e.getUserId()))); } From 7816fec7aa888bf80a793d237dda42ab5091be0b Mon Sep 17 00:00:00 2001 From: zt Date: Tue, 2 Dec 2025 15:57:39 +0800 Subject: [PATCH 13/73] =?UTF-8?q?=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceAccessRecordController.java | 28 +++++++-- .../controller/DeviceInfoController.java | 8 ++- .../controller/DeviceTypeController.java | 62 +++++++++++++------ .../domain/bo/DeviceAccessRecordBo.java | 4 ++ .../device/domain/vo/DeviceInfoCountVo.java | 4 ++ .../device/domain/vo/DeviceInfoVo.java | 1 - .../device/service/IDeviceInfoService.java | 4 +- .../service/impl/DeviceInfoServiceImpl.java | 39 +++++++++--- .../service/impl/DeviceTypeServiceImpl.java | 26 ++++++-- 9 files changed, 131 insertions(+), 45 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java index 5c646628..26d7e647 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.project.domain.BusProject; +import org.dromara.project.service.IBusProjectService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -36,17 +38,17 @@ public class DeviceAccessRecordController extends BaseController { private final IDeviceAccessRecordService deviceAccessRecordService; + private final IBusProjectService projectService; + /** * 查询设备进出场记录列表 */ - @SaCheckPermission("device:accessRecord:list") +// @SaCheckPermission("device:accessRecord:list") @GetMapping("/list") public TableDataInfo list(DeviceAccessRecordBo bo, PageQuery pageQuery) { return deviceAccessRecordService.queryPageList(bo, pageQuery); } - - /** * 导出设备进出场记录列表 */ @@ -63,17 +65,29 @@ public class DeviceAccessRecordController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("device:accessRecord:query") +// @SaCheckPermission("device:accessRecord:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(deviceAccessRecordService.queryById(id)); } + /** + * 子项目列表 + */ + @GetMapping("/childProjectList/{projectId}") + public R> childProjectId(@PathVariable Long projectId) { + List list = projectService.lambdaQuery() + .select(BusProject::getId, BusProject::getProjectName) + .eq(BusProject::getPId, projectId).list(); + return R.ok(list); + } + + /** * 新增设备进出场记录 */ - @SaCheckPermission("device:accessRecord:add") +// @SaCheckPermission("device:accessRecord:add") @Log(title = "设备进出场记录", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -81,10 +95,12 @@ public class DeviceAccessRecordController extends BaseController { return toAjax(deviceAccessRecordService.insertByBo(bo)); } + + /** * 修改设备进出场记录 */ - @SaCheckPermission("device:accessRecord:edit") +// @SaCheckPermission("device:accessRecord:edit") @Log(title = "设备进出场记录", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() 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 ad34b887..e108eb1e 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 @@ -85,12 +85,18 @@ public class DeviceInfoController extends BaseController { } + /** + * 设备信息统计 + */ @SaCheckPermission("device:info:list") @GetMapping("/count/{projectId}") - public R count(@PathVariable Long projectId) { + public R> count(@PathVariable Long projectId) { return R.ok(deviceInfoService.count(projectId)); } + /** + * 设备类型统计 + */ @SaCheckPermission("device:info:list") @GetMapping("/typeCount/{projectId}") public R> typeCount(@PathVariable Long projectId) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java index 7cd8e4f3..881ce274 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java @@ -3,6 +3,7 @@ package org.dromara.device.controller; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; @@ -56,47 +57,72 @@ public class DeviceTypeController extends BaseController { @GetMapping("/treeList") public R> treeList(DeviceTypeBo bo) { List list = deviceTypeService.queryList(bo); - buildTreeWithAutoRoot(list); - return R.ok(list); + List deviceTypeVos = buildTreeWithAutoRoot(list); + return R.ok(deviceTypeVos); } public static List buildTreeWithAutoRoot(List list) { // 1. 用 Map 缓存所有节点(key=节点ID,value=节点对象) + // 防御性判断:空列表直接返回,避免空指针 + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + + // 1. 提取所有有效节点ID(用于判断父ID是否存在) + Set validNodeIds = list.stream() + .map(DeviceTypeVo::getId) + .collect(Collectors.toSet()); + + // 2. 用Map缓存所有节点(key=节点ID,value=节点对象),O(1)查找 Map nodeMap = list.stream() .collect(Collectors.toMap(DeviceTypeVo::getId, node -> node)); - List rootNodes = new ArrayList<>(); // 存储自动识别的顶级节点 - List orphanNodes = new ArrayList<>(); // 存储孤儿节点(可选:单独处理) + List rootNodes = new ArrayList<>(); + List orphanNodes = new ArrayList<>(); for (DeviceTypeVo node : list) { Long parentId = node.getParentId(); - // 情况1:parent_id 为0或NULL → 直接视为顶级节点 + boolean isRoot = false; + + // 判定是否为顶级节点(满足以下任一条件) if (parentId == null || parentId == 0) { + // 条件1:parentId为0或NULL(设计约定的顶级节点) + isRoot = true; + } else if (!validNodeIds.contains(parentId)) { + // 条件2:parentId不在有效节点ID中(孤儿节点,视为顶级) + isRoot = true; + orphanNodes.add(node); + } + + if (isRoot) { + // 顶级节点直接加入根列表,无需挂载 rootNodes.add(node); } else { - // 情况2:查找父节点 + // 非顶级节点:挂载到父节点的children中 DeviceTypeVo parentNode = nodeMap.get(parentId); if (parentNode != null) { - // 父节点存在 → 挂载到子节点列表 if (parentNode.getChildren() == null) { parentNode.setChildren(new ArrayList<>()); } - parentNode.getChildren().add(node); - } else { - // 父节点不存在 → 视为顶级节点(或加入孤儿节点列表) - rootNodes.add(node); - // 可选:记录孤儿节点,用于后续告警或修复 - orphanNodes.add(node); + // 关键:避免重复挂载(判断子节点中是否已存在当前节点) + boolean isAlreadyMounted = parentNode.getChildren().stream() + .anyMatch(child -> child.getId().equals(node.getId())); + if (!isAlreadyMounted) { + parentNode.getChildren().add(node); + } } } } - // 可选:打印孤儿节点日志(便于排查数据问题) -// if (!orphanNodes.isEmpty()) { -// System.out.println("警告:存在孤儿节点(父节点不存在),节点ID:" + -// orphanNodes.stream().map(DeviceType::getId).collect(Collectors.toList())); -// } + // 打印孤儿节点日志(便于排查数据问题) + if (!orphanNodes.isEmpty()) { + String orphanIds = orphanNodes.stream() + .map(DeviceTypeVo::getId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + System.out.println("警告:存在孤儿节点(父节点不存在),节点ID:" + orphanIds); + } return rootNodes; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java index c9369261..472e47f0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java @@ -78,5 +78,9 @@ public class DeviceAccessRecordBo extends BaseEntity { */ private String details; + /** + * 子项目ID + */ + private Long childProjectId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java index 44a2840e..a47e7d92 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java @@ -20,4 +20,8 @@ public class DeviceInfoCountVo { * 闲置 */ private Integer idle; + /** + * 报废 + */ + private Integer broken; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java index 6c4d9f08..3a5ed8ed 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java @@ -65,7 +65,6 @@ public class DeviceInfoVo implements Serializable { * 设备类型ID(关联设备类型表device_type的id) */ @ExcelProperty(value = "设备类型ID", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "关=联设备类型表device_type的id") private Long typeId; private String typeName; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java index 4b694d23..85c2e7a9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java @@ -1,6 +1,5 @@ package org.dromara.device.service; -import org.dromara.device.domain.vo.DeviceInfoCountVo; import org.dromara.device.domain.vo.DeviceInfoVo; import org.dromara.device.domain.bo.DeviceInfoBo; import org.dromara.device.domain.DeviceInfo; @@ -8,7 +7,6 @@ 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; @@ -75,7 +73,7 @@ public interface IDeviceInfoService extends IService{ /** * 设备数量统计 */ - DeviceInfoCountVo count(Long projectId); + Map count(Long projectId); /** * 设备类型统计 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java index f95725bd..63f3793f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.device.service.impl; import cn.hutool.core.collection.CollectionUtil; 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; @@ -10,9 +11,14 @@ 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.DeviceAccessRecord; import org.dromara.device.domain.DeviceType; import org.dromara.device.domain.vo.DeviceInfoCountVo; +import org.dromara.device.service.IDeviceAccessRecordService; import org.dromara.device.service.IDeviceTypeService; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictDataService; +import org.dromara.system.service.ISysDictTypeService; import org.springframework.stereotype.Service; import org.dromara.device.domain.bo.DeviceInfoBo; import org.dromara.device.domain.vo.DeviceInfoVo; @@ -37,6 +43,10 @@ public class DeviceInfoServiceImpl extends ServiceImpl ids, Boolean isValid) { if(isValid){ - //TODO 做一些业务上的校验,判断是否需要校验 + List list = deviceAccessRecordService.lambdaQuery().in(DeviceAccessRecord::getDeviceId, ids).list(); + if(CollectionUtil.isNotEmpty(list)){ + throw new ServiceException("设备存在进出场记录,不能删除"); + } } + return baseMapper.deleteByIds(ids) > 0; } @Override - public DeviceInfoCountVo count(Long projectId) { - List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); - DeviceInfoCountVo countVo = new DeviceInfoCountVo(); - countVo.setTotal(list.size()); - countVo.setUse((int)list.stream().filter(deviceInfo -> "1".equals(deviceInfo.getStatus())).count()); - countVo.setMaintain((int)list.stream().filter(deviceInfo -> "2".equals(deviceInfo.getStatus())).count()); - countVo.setIdle((int)list.stream().filter(deviceInfo -> "0".equals(deviceInfo.getStatus())).count()); + public Map count(Long projectId) { - return countVo; + Map map = new LinkedHashMap<>(); + List deviceStatus = dictTypeService.selectDictDataByType("device_status"); + + List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); + for (SysDictDataVo status : deviceStatus) { + map.put(status.getDictLabel(), (int)list.stream().filter(deviceInfo -> status.getDictValue().equals(deviceInfo.getStatus())).count()); + } + return map; } @Override diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java index c30856a8..6f6392fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java @@ -22,6 +22,7 @@ import org.dromara.device.domain.DeviceType; import org.dromara.device.mapper.DeviceTypeMapper; import org.dromara.device.service.IDeviceTypeService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -83,6 +84,7 @@ public class DeviceTypeServiceImpl extends ServiceImpl params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(DeviceType::getId); + lqw.like(StringUtils.isNotBlank(bo.getTypeCode()), DeviceType::getTypeCode, bo.getTypeCode()); lqw.like(StringUtils.isNotBlank(bo.getTypeName()), DeviceType::getTypeName, bo.getTypeName()); lqw.eq(bo.getParentId() != null, DeviceType::getParentId, bo.getParentId()); lqw.eq(bo.getLevel() != null, DeviceType::getLevel, bo.getLevel()); @@ -149,13 +151,25 @@ public class DeviceTypeServiceImpl extends ServiceImpl ids, Boolean isValid) { + List checkIds = new ArrayList<>(); if(isValid){ - //TODO 做一些业务上的校验,判断是否需要校验 + for (Long id : ids) { + DeviceType deviceType = baseMapper.selectById(id); + if(deviceType == null){ + continue; + } + String prefix = deviceType.getAncestors() + "," + deviceType.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .like(DeviceType::getAncestors, prefix) + .orderByAsc(DeviceType::getLevel, DeviceType::getId); + List list = baseMapper.selectList(queryWrapper); + checkIds.addAll(list.stream().map(DeviceType::getId).toList()); + } + List list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, checkIds).list(); + if(CollectionUtil.isNotEmpty(list)){ + throw new ServiceException("当前类型或子级类型存在设备"); + } } - List list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, ids).list(); - if(CollectionUtil.isNotEmpty(list)){ - throw new ServiceException("请先删除该设备类型下的设备"); - } - return baseMapper.deleteByIds(ids) > 0; + return baseMapper.deleteByIds(checkIds) > 0; } } From 40559d4d7316f9ddfd0dc5b89d9be38aa9490861 Mon Sep 17 00:00:00 2001 From: zt Date: Tue, 2 Dec 2025 15:59:06 +0800 Subject: [PATCH 14/73] =?UTF-8?q?=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/device/service/impl/DeviceInfoServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java index 63f3793f..36c36ba2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java @@ -99,7 +99,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(DeviceInfo::getId); lqw.eq(bo.getProjectId() != null, DeviceInfo::getProjectId, bo.getProjectId()); - lqw.eq(StringUtils.isNotBlank(bo.getDeviceCode()), DeviceInfo::getDeviceCode, bo.getDeviceCode()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceCode()), DeviceInfo::getDeviceCode, bo.getDeviceCode()); lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceInfo::getDeviceName, bo.getDeviceName()); lqw.eq(StringUtils.isNotBlank(bo.getModelSpec()), DeviceInfo::getModelSpec, bo.getModelSpec()); lqw.eq(bo.getTypeId() != null, DeviceInfo::getTypeId, bo.getTypeId()); From 4e3faa7a23d88ed782625dd6603066c88d732f2c Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Tue, 2 Dec 2025 16:12:07 +0800 Subject: [PATCH 15/73] =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PgsProgressPlanDetailServiceImpl.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java index 71d5f92d..0e03ffbf 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java @@ -1220,7 +1220,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl recognizeAsync(Long bigPictureId, String fileUrl, String tifUrl, List projectIds) { // 调用识别算法 - RecognizeVo recognizeVo = null; + RecognizeVo recognizeVo; try { recognizeVo = recognizerManager.recognize(fileUrl); } catch (Exception e) { @@ -1278,18 +1278,20 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl Date: Tue, 2 Dec 2025 16:22:42 +0800 Subject: [PATCH 16/73] =?UTF-8?q?=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/controller/DeviceAccessRecordController.java | 2 +- .../dromara/device/service/impl/DeviceTypeServiceImpl.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java index 26d7e647..fcb25f86 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java @@ -87,7 +87,7 @@ public class DeviceAccessRecordController extends BaseController { /** * 新增设备进出场记录 */ -// @SaCheckPermission("device:accessRecord:add") + @SaCheckPermission("device:accessRecord:add") @Log(title = "设备进出场记录", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java index 6f6392fa..f06462f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java @@ -102,7 +102,7 @@ public class DeviceTypeServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -120,11 +120,11 @@ public class DeviceTypeServiceImpl extends ServiceImpl 0; } - private void handleLevelAndAcestors(DeviceType deviceType) { + private void handleLevelAndAncestors(DeviceType deviceType) { if(deviceType.getParentId() == 0L){ deviceType.setAncestors("0"); deviceType.setLevel(1); From f0802432ed835fc5455c55aee984dd1045cfd1e0 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Tue, 2 Dec 2025 17:43:59 +0800 Subject: [PATCH 17/73] =?UTF-8?q?=E4=BF=AE=E6=94=B9execl=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BusTotalsupplyplanServiceImpl.java | 14 +++++++++++--- .../land/controller/BusLandBlockController.java | 4 +++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java index 1b2c659f..a6959892 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.cailiaoshebei.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; @@ -104,7 +105,7 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl buildQueryWrapper(BusTotalsupplyplanBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getProjectId() != null ,BusTotalsupplyplan::getProjectId,bo.getProjectId()); + lqw.eq(bo.getProjectId() != null, BusTotalsupplyplan::getProjectId, bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getTexture()), BusTotalsupplyplan::getTexture, bo.getTexture()); lqw.eq(StringUtils.isNotBlank(bo.getBrand()), BusTotalsupplyplan::getBrand, bo.getBrand()); lqw.eq(StringUtils.isNotBlank(bo.getQualityStandard()), BusTotalsupplyplan::getQualityStandard, bo.getQualityStandard()); @@ -239,7 +240,14 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl data.getId() != null).toList(); + if (CollUtil.isEmpty(allData)) { throw new ServiceException("未读取到有效数据", HttpStatus.BAD_REQUEST); } // 处理导入的数据 @@ -248,7 +256,7 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl Date: Tue, 2 Dec 2025 19:07:26 +0800 Subject: [PATCH 18/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E4=B8=8E=E6=95=85=E9=9A=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxgl/controller/JxGzwxController.java | 11 ++++ .../jxgl/controller/JxGzwxJlController.java | 17 +++++++ .../jxgl/controller/JxWhjhController.java | 15 ++++++ .../mechanical/jxgl/domain/JxGzwx.java | 6 +++ .../mechanical/jxgl/domain/JxGzwxJl.java | 10 ++++ .../mechanical/jxgl/domain/JxWhjh.java | 5 ++ .../mechanical/jxgl/domain/JxWhjl.java | 10 ++++ .../mechanical/jxgl/domain/bo/JxGzwxBo.java | 11 ++++ .../mechanical/jxgl/domain/bo/JxGzwxJlBo.java | 17 +++++++ .../mechanical/jxgl/domain/bo/JxWhjhBo.java | 6 +++ .../mechanical/jxgl/domain/bo/JxWhjlBo.java | 10 ++++ .../mechanical/jxgl/domain/vo/JxGzwxJlVo.java | 51 +++++++++++++++++-- .../mechanical/jxgl/domain/vo/JxGzwxVo.java | 24 +++++++++ .../mechanical/jxgl/domain/vo/JxWhjhVo.java | 33 ++++++++++++ .../mechanical/jxgl/domain/vo/JxWhjlVo.java | 39 ++++++++++++++ .../jxgl/service/IJxGzwxService.java | 3 ++ .../jxgl/service/IJxWhjhService.java | 5 ++ .../service/impl/JxGzwxJlServiceImpl.java | 3 ++ .../jxgl/service/impl/JxGzwxServiceImpl.java | 18 ++++++- .../jxgl/service/impl/JxWhjhServiceImpl.java | 18 +++++++ 20 files changed, 307 insertions(+), 5 deletions(-) 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/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..87f8bb28 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 @@ -82,11 +82,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()); 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..35e90bf4 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()); @@ -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..4fa3d81d 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 @@ -9,9 +9,14 @@ 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.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; @@ -34,6 +39,12 @@ import java.util.*; public class JxWhjhServiceImpl extends ServiceImpl implements IJxWhjhService { private final JxWhjhMapper baseMapper; + + @Lazy + @Autowired + private IJxWhjlService jxWhjlService; + + private final SysOssServiceImpl sysOssService; /** @@ -174,4 +185,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); + } } From 03cf7ebac75be6760e00970982db7e86f7bcd776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Tue, 2 Dec 2025 21:57:46 +0800 Subject: [PATCH 19/73] =?UTF-8?q?12-01-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/GpsEquipmentServiceImpl.java | 40 ++- .../dromara/system/domain/vo/SysUserVo.java | 26 ++ .../dromara/websocket/ChatServerHandler.java | 2 +- .../service/RydwWebSocketServer.java | 243 +++++++++++++++--- 4 files changed, 275 insertions(+), 36 deletions(-) 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..cdafc790 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 @@ -52,9 +52,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.*; /** @@ -605,6 +603,29 @@ public class GpsEquipmentServiceImpl extends ServiceImpl ONLINE_SESSIONS = new ConcurrentHashMap<>(); @@ -54,34 +73,15 @@ public class RydwWebSocketServer { // 2. 异步获取并推送初始化数据(避免阻塞连接) CompletableFuture.runAsync(() -> { try { + //初始化 + Map map; //连接成功过后 获取当前项目下所有成员最新坐标 Map> params = session.getRequestParameterMap(); 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()); - } - } - } - WebSocketUtils.sendMessage(Long.valueOf(session.getId()), "初始化数据为空"); + String projectId = subscriptionIds.getFirst(); + map = getData(projectId); + + session.getBasicRemote().sendText(JSON.toJSONString(map)); } catch (Exception e) { log.error("会话[{}]初始化数据处理失败", session.getId(), e); } @@ -96,6 +96,22 @@ public class RydwWebSocketServer { log.info("📥 收到会话[{}]消息:{}", session.getId(), message); // 可选:回复客户端(示例) try { + /* 解析消息 暂定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){ + Map objectMap = getData(jsonObject.get("projectId").toString()); + session.getBasicRemote().sendText(JSON.toJSONString(objectMap)); + } + } session.getBasicRemote().sendText("服务端已收到消息:" + message); } catch (IOException e) { log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage()); @@ -146,4 +162,167 @@ public class RydwWebSocketServer { public static int getOnlineCount() { return ONLINE_SESSIONS.size(); } + + /** + * 获取数据 用于首次和心跳 + */ + public Map getData(String projectId){ + Map map = new HashMap<>(); + if (projectId != null && !projectId.isEmpty()){ + //拿到项目下所有人员 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SubConstructionUser::getProjectId, projectId); + List list = subConstructionUserService.list(queryWrapper); + //获取此项目打卡范围 + LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); + //打卡范围 + List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); + //通过打卡范围构建下方统计数据 + List> allValue = new ArrayList<>(); + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + Map map2 = new HashMap<>(); + map2.put("06:00",0); + map2.put("08:00",0); + map2.put("10:00",0); + map2.put("12:00",0); + map2.put("14:00",0); + map2.put("16:00",0); + map2.put("18:00",0); + + Map map1 = new HashMap<>(); + map1.put(busProjectPunchrange.getId()+":"+busProjectPunchrange.getPunchName(),map2); + allValue.add(map1); + } + + int zrys = 0; + int ycry = 0; + int dwcs = 0; + int zgry = 0; + + if (list != null && !list.isEmpty()){ + //初始化 + List gpsList = new ArrayList<>(); + List onlineUserList = ChatServerHandler.getOnlineUserList(); + + + //循环班组人员列表 + for (SubConstructionUser constructionUser : list) { + //从redis拿到缓存最新坐标 + boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); + if (!existsObject){ + continue; + }else { +// zgry++; + } + GpsEquipmentSon one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); + + if (one != null){ + //获取人员 + SysUserVo sysUserVo = sysUserService.selectUserById(constructionUser.getSysUserId()); + sysUserVo.setJd(one.getLocLongitude()); + sysUserVo.setWd(one.getLocLatitude()); + sysUserVo.setZhdwsj(one.getCreateTime()); + boolean isFind = false; + //循环打卡范围 判断是否是异常状态 + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + //转换范围 + Gson gson = new Gson(); + Type listType = new TypeToken>() {}.getType(); + List coordinates = gson.fromJson(busProjectPunchrange.getPunchRange(), listType); + List matchingRange = JSTUtil.findMatchingRange(one.getLocLatitude().toString(), one.getLocLongitude().toString(), coordinates); + //如果范围外为 空 + if (matchingRange != null && !matchingRange.isEmpty() && !isFind) { + sysUserVo.setQy(busProjectPunchrange.getPunchName()); + isFind = true; + + //判断在线状态 如果在线 范围外 则为异常 目前从聊天服务获取 + if (onlineUserList.contains(constructionUser.getSysUserId().toString())) { + sysUserVo.setZxzt("在线"); + //坐标在范围内在岗 + zgry++; + + String key = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(); + //给打卡柱状图赋值 + for (Map mapMap : allValue) { + //这个map为 id+名字 : 时间段 MAP + if (mapMap.containsKey(key)){ + //找到了时间段map + LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + // 获取小时数 + int hour = dateTime.getHour(); + // 根据小时数判断所属区间并增加计数 + if (hour >= 6 && hour < 8) { + mapMap.get(mapMap.get(key)).put("06:00", (int)mapMap.get(key).get("06:00") + 1); + } else if (hour >= 8 && hour < 10) { +// map2.put("08:00", ((Integer) map2.get("08:00")) + 1); + mapMap.get(mapMap.get(key)).put("08:00", (int)mapMap.get(key).get("08:00") + 1); + } else if (hour >= 10 && hour < 12) { +// map2.put("10:00", ((Integer) map2.get("10:00")) + 1); + mapMap.get(mapMap.get(key)).put("10:00", (int)mapMap.get(key).get("10:00") + 1); + } else if (hour >= 12 && hour < 14) { +// map2.put("12:00", ((Integer) map2.get("12:00")) + 1); + mapMap.get(mapMap.get(key)).put("12:00", (int)mapMap.get(key).get("12:00") + 1); + } else if (hour >= 14 && hour < 16) { +// map2.put("14:00", ((Integer) map2.get("14:00")) + 1); + mapMap.get(mapMap.get(key)).put("14:00", (int)mapMap.get(key).get("14:00") + 1); + } else if (hour >= 16 && hour < 18) { +// map2.put("16:00", ((Integer) map2.get("16:00")) + 1); + mapMap.get(mapMap.get(key)).put("16:00", (int)mapMap.get(key).get("16:00") + 1); + } else if (hour >= 18 && hour < 20) { +// map2.put("18:00", ((Integer) map2.get("18:00")) + 1); + mapMap.get(mapMap.get(key)).put("18:00", (int)mapMap.get(key).get("18:00") + 1); + } + } + } + } + } + } + //进一步判断状态 + if (sysUserVo.getZxzt() == null || sysUserVo.getZxzt().isEmpty()){ + if (onlineUserList.contains(constructionUser.getSysUserId().toString()) && !isFind){ + sysUserVo.setZxzt("异常"); + }else if (!onlineUserList.contains(constructionUser.getSysUserId().toString())){ + sysUserVo.setZxzt("离线"); + } + } + + //统计异常数 + if (!isFind){ + ycry++; + } + + gpsList.add(sysUserVo); + } +// if (constructionUser.getStatus().equals("0")){ +// zgry++; +// } + } + + //地图实时坐标 + map.put("gpsList", gpsList); + + //在岗人员 + map.put("zgry",zgry); + + //异常人员 + map.put("ycry",ycry); + + //总人员数 +// map.put("zrys",list.size()); + map.put("zrys",zgry + ycry); + //定位次数 + Long cacheObject = RedisUtils.getCacheObject("rydw_"); + if (cacheObject != null){ + dwcs = cacheObject.intValue(); + } + map.put("dwcs",dwcs); + + //柱状图数据 + map.put("zztsj",allValue); + } + } + return map; + } + } From 8ae5614ce9a5034a06801f64dee386bc5b2397ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 3 Dec 2025 09:34:45 +0800 Subject: [PATCH 20/73] =?UTF-8?q?12-03-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E6=9F=B1=E7=8A=B6=E5=9B=BE=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RydwWebSocketServer.java | 96 +++++++++++++++---- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index 813475c5..27986bdb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -24,8 +24,7 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.time.ZoneId; +import java.time.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -112,7 +111,7 @@ public class RydwWebSocketServer { session.getBasicRemote().sendText(JSON.toJSONString(objectMap)); } } - session.getBasicRemote().sendText("服务端已收到消息:" + message); +// session.getBasicRemote().sendText("服务端已收到消息:" + message); } catch (IOException e) { log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage()); } @@ -169,6 +168,13 @@ public class RydwWebSocketServer { public Map getData(String projectId){ 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); @@ -182,13 +188,61 @@ public class RydwWebSocketServer { List> allValue = new ArrayList<>(); for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { Map map2 = new HashMap<>(); - map2.put("06:00",0); - map2.put("08:00",0); - map2.put("10:00",0); - map2.put("12:00",0); - map2.put("14:00",0); - map2.put("16:00",0); - map2.put("18:00",0); + + boolean existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("06:00",0); + }else { + map2.put("06:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00")); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("08:00",0); + }else { + map2.put("08:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00")); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("10:00",0); + }else { + map2.put("10:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00")); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("12:00",0); + }else { + map2.put("12:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00")); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("14:00",0); + }else { + map2.put("14:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00")); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("16:00",0); + }else { + map2.put("16:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00")); + } + + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("18:00",0); + }else { + map2.put("18:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00")); + } Map map1 = new HashMap<>(); map1.put(busProjectPunchrange.getId()+":"+busProjectPunchrange.getPunchName(),map2); @@ -254,24 +308,31 @@ public class RydwWebSocketServer { // 根据小时数判断所属区间并增加计数 if (hour >= 6 && hour < 8) { mapMap.get(mapMap.get(key)).put("06:00", (int)mapMap.get(key).get("06:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int)mapMap.get(key).get("06:00") + 1, Duration.ofSeconds(expireSeconds)); + } else if (hour >= 8 && hour < 10) { -// map2.put("08:00", ((Integer) map2.get("08:00")) + 1); mapMap.get(mapMap.get(key)).put("08:00", (int)mapMap.get(key).get("08:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int)mapMap.get(key).get("08:00") + 1, Duration.ofSeconds(expireSeconds)); } else if (hour >= 10 && hour < 12) { -// map2.put("10:00", ((Integer) map2.get("10:00")) + 1); mapMap.get(mapMap.get(key)).put("10:00", (int)mapMap.get(key).get("10:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int)mapMap.get(key).get("10:00") + 1, Duration.ofSeconds(expireSeconds)); + } else if (hour >= 12 && hour < 14) { -// map2.put("12:00", ((Integer) map2.get("12:00")) + 1); mapMap.get(mapMap.get(key)).put("12:00", (int)mapMap.get(key).get("12:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int)mapMap.get(key).get("12:00") + 1, Duration.ofSeconds(expireSeconds)); + } else if (hour >= 14 && hour < 16) { -// map2.put("14:00", ((Integer) map2.get("14:00")) + 1); mapMap.get(mapMap.get(key)).put("14:00", (int)mapMap.get(key).get("14:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int)mapMap.get(key).get("14:00") + 1, Duration.ofSeconds(expireSeconds)); + } else if (hour >= 16 && hour < 18) { -// map2.put("16:00", ((Integer) map2.get("16:00")) + 1); mapMap.get(mapMap.get(key)).put("16:00", (int)mapMap.get(key).get("16:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int)mapMap.get(key).get("16:00") + 1, Duration.ofSeconds(expireSeconds)); + } else if (hour >= 18 && hour < 20) { -// map2.put("18:00", ((Integer) map2.get("18:00")) + 1); mapMap.get(mapMap.get(key)).put("18:00", (int)mapMap.get(key).get("18:00") + 1); + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int)mapMap.get(key).get("18:00") + 1, Duration.ofSeconds(expireSeconds)); + } } } @@ -294,9 +355,6 @@ public class RydwWebSocketServer { gpsList.add(sysUserVo); } -// if (constructionUser.getStatus().equals("0")){ -// zgry++; -// } } //地图实时坐标 From b39aa7be71e019184865132263f34e059f568ccd Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 3 Dec 2025 15:46:28 +0800 Subject: [PATCH 21/73] =?UTF-8?q?=E6=96=BD=E5=B7=A5=E4=BA=A7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OutConstructionValueController.java | 15 +- .../out/domain/bo/OutConstructionValueBo.java | 4 + .../OutConstructionValueMatrixVo.java | 15 ++ .../OutConstructionValueProjectVo.java | 15 ++ .../OutConstructionValueSubProjectVo.java | 15 ++ .../OutConstructionValueTotalVo.java | 73 ++++++ .../OutConstructionValueRangeVo.java | 4 +- .../service/IOutConstructionValueService.java | 3 +- .../OutConstructionValueRangeServiceImpl.java | 29 +-- .../impl/OutConstructionValueServiceImpl.java | 224 ++++++++++++++++-- 10 files changed, 350 insertions(+), 47 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java 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 fb7bf5be..4fb72a16 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.queryList(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..8f59e2cf 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 @@ -57,6 +57,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..23d726b4 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 @@ -45,6 +45,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..a1280344 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 @@ -51,6 +51,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/OutConstructionValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java index b9719c21..df3e3cd9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java @@ -7,7 +7,7 @@ import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.out.domain.OutConstructionValueRange; -import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo; import java.io.Serial; import java.io.Serializable; @@ -82,6 +82,6 @@ public class OutConstructionValueRangeVo implements Serializable { /** * 子项列表 */ - private List constructionValueVoList; + private List constructionValueVoList; } 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..5d81da02 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; @@ -47,7 +48,7 @@ public interface IOutConstructionValueService extends IService queryList(OutConstructionValueBo bo); + List queryList(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..b141e8ab 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; @@ -472,12 +471,8 @@ 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 +494,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 +520,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..888771c8 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; @@ -115,11 +116,179 @@ public class OutConstructionValueServiceImpl extends ServiceImpl queryList(OutConstructionValueBo bo) { + public List queryList(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 outConstructionValueVos = baseMapper.selectVoList(lqw); - supplementaryData(outConstructionValueVos); - return outConstructionValueVos; + 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(); } private LambdaQueryWrapper buildQueryWrapper(OutConstructionValueBo bo) { @@ -155,9 +324,16 @@ public class OutConstructionValueServiceImpl extends ServiceImpl progressCategories = pgsProgressCategoryService.list(categoryLqw); if (CollUtil.isNotEmpty(progressCategories)) { List categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList(); @@ -441,7 +617,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 +790,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl Date: Wed, 3 Dec 2025 17:00:43 +0800 Subject: [PATCH 22/73] =?UTF-8?q?=E9=9A=90=E6=82=A3=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HazardRuleController.java | 105 ++++++++++++++ .../org/dromara/safety/domain/HazardRule.java | 77 ++++++++++ .../safety/domain/HazardRuleNotifyObject.java | 37 +++++ .../safety/domain/bo/HazardRuleBo.java | 83 +++++++++++ .../domain/bo/HazardRuleNotifyObjectBo.java | 42 ++++++ .../domain/vo/HazardRuleNotifyObjectVo.java | 46 ++++++ .../safety/domain/vo/HazardRuleVo.java | 93 ++++++++++++ .../safety/mapper/HazardRuleMapper.java | 15 ++ .../mapper/HazardRuleNotifyObjectMapper.java | 15 ++ .../IHazardRuleNotifyObjectService.java | 70 +++++++++ .../safety/service/IHazardRuleService.java | 70 +++++++++ .../HazardRuleNotifyObjectServiceImpl.java | 131 +++++++++++++++++ .../service/impl/HazardRuleServiceImpl.java | 137 ++++++++++++++++++ .../mapper/safety/HazardRuleMapper.xml | 7 + .../safety/HazardRuleNotifyObjectMapper.xml | 7 + xinnengyuan/script/sql/xinnengyuan.sql | 50 +++++++ 16 files changed, 985 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml 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..906b41a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java @@ -0,0 +1,105 @@ +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.HazardRuleVo; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.service.IHazardRuleService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 隐患分级通知规则 + * + * @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/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..7b8120a8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java @@ -0,0 +1,37 @@ +package org.dromara.safety.domain; + +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 + */ + 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/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..fd13e90c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java @@ -0,0 +1,83 @@ +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; + +/** + * 隐患分级通知规则业务对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardRule.class, reverseConvertGenerate = false) +public class HazardRuleBo extends BaseEntity { + + /** + * 主键 + */ + @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; + + /** + * 额外设置 + */ + @NotBlank(message = "额外设置不能为空", groups = {AddGroup.class, EditGroup.class}) + private String extraSetting; + + /** + * 备注 + */ + private String remark; + +} 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..1815b4c9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java @@ -0,0 +1,42 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HazardRuleNotifyObject; +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.*; + +/** + * 隐患规则通知对象业务对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardRuleNotifyObject.class, reverseConvertGenerate = false) +public class HazardRuleNotifyObjectBo extends BaseEntity { + + /** + * 规则ID + */ + @NotNull(message = "规则ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long ruleId; + + /** + * 通知ID + */ + @NotNull(message = "通知ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long notifyId; + + /** + * 通知类型 + */ + @NotBlank(message = "通知类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String notifyType; + + +} 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..285767d5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java @@ -0,0 +1,46 @@ +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; + + /** + * 通知类型 + */ + @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..54c23bc0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java @@ -0,0 +1,93 @@ +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; + + +/** + * 隐患分级通知规则视图对象 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; + + +} 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/service/IHazardRuleNotifyObjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java new file mode 100644 index 00000000..e54a0b74 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.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.HazardRuleNotifyObject; +import org.dromara.safety.domain.bo.HazardRuleNotifyObjectBo; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患规则通知对象Service接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface IHazardRuleNotifyObjectService extends IService { + + /** + * 查询隐患规则通知对象 + * + * @param ruleId 主键 + * @return 隐患规则通知对象 + */ + HazardRuleNotifyObjectVo queryById(Long ruleId); + + /** + * 分页查询隐患规则通知对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患规则通知对象分页列表 + */ + TableDataInfo queryPageList(HazardRuleNotifyObjectBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的隐患规则通知对象列表 + * + * @param bo 查询条件 + * @return 隐患规则通知对象列表 + */ + List queryList(HazardRuleNotifyObjectBo bo); + + /** + * 新增隐患规则通知对象 + * + * @param bo 隐患规则通知对象 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardRuleNotifyObjectBo bo); + + /** + * 修改隐患规则通知对象 + * + * @param bo 隐患规则通知对象 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardRuleNotifyObjectBo 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/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/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..3ce043b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java @@ -0,0 +1,131 @@ +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 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.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.bo.HazardRuleNotifyObjectBo; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.mapper.HazardRuleNotifyObjectMapper; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 隐患规则通知对象Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl + implements IHazardRuleNotifyObjectService { + + /** + * 查询隐患规则通知对象 + * + * @param ruleId 主键 + * @return 隐患规则通知对象 + */ + @Override + public HazardRuleNotifyObjectVo queryById(Long ruleId) { + return baseMapper.selectVoById(ruleId); + } + + /** + * 分页查询隐患规则通知对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患规则通知对象分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardRuleNotifyObjectBo 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(HazardRuleNotifyObjectBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardRuleNotifyObjectBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getRuleId() != null, HazardRuleNotifyObject::getRuleId, bo.getRuleId()); + lqw.eq(bo.getNotifyId() != null, HazardRuleNotifyObject::getNotifyId, bo.getNotifyId()); + lqw.eq(StringUtils.isNotBlank(bo.getNotifyType()), HazardRuleNotifyObject::getNotifyType, bo.getNotifyType()); + return lqw; + } + + /** + * 新增隐患规则通知对象 + * + * @param bo 隐患规则通知对象 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HazardRuleNotifyObjectBo bo) { + HazardRuleNotifyObject add = MapstructUtils.convert(bo, HazardRuleNotifyObject.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setRuleId(add.getRuleId()); + } + return flag; + } + + /** + * 修改隐患规则通知对象 + * + * @param bo 隐患规则通知对象 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardRuleNotifyObjectBo bo) { + HazardRuleNotifyObject update = MapstructUtils.convert(bo, HazardRuleNotifyObject.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardRuleNotifyObject 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/HazardRuleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java new file mode 100644 index 00000000..768babfc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java @@ -0,0 +1,137 @@ +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 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.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.mapper.HazardRuleMapper; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 隐患分级通知规则Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleServiceImpl extends ServiceImpl + implements IHazardRuleService { + + /** + * 查询隐患分级通知规则 + * + * @param id 主键 + * @return 隐患分级通知规则 + */ + @Override + public HazardRuleVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询隐患分级通知规则列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患分级通知规则分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardRuleBo 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(HazardRuleBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardRuleBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardRule::getId); + lqw.eq(bo.getProjectId() != null, HazardRule::getProjectId, bo.getProjectId()); + lqw.eq(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 + 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()); + } + return flag; + } + + /** + * 修改隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardRuleBo bo) { + HazardRule update = MapstructUtils.convert(bo, HazardRule.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardRule 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/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/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 0d6c75df..54a6fe2a 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -1974,3 +1974,53 @@ 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, ''); From b171ec6af0b75dc1fac552af55ad73455e0fb1b8 Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 3 Dec 2025 17:01:37 +0800 Subject: [PATCH 23/73] =?UTF-8?q?=E9=9A=90=E6=82=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesVolumeCatalogController.java | 19 +- .../DesVolumeCatalogQueryReq.java | 5 + .../dromara/design/domain/vo/DelayContVo.java | 23 +++ .../service/IDesVolumeCatalogService.java | 7 + .../design/service/IDesVolumeFileService.java | 3 + .../impl/DesVolumeCatalogServiceImpl.java | 25 +++ .../domain/QltQualityConstructionLog.java | 10 ++ .../QltQualityConstructionLogCreateReq.java | 10 ++ .../QltQualityConstructionLogVo.java | 11 ++ .../QltQualityConstructionLogServiceImpl.java | 2 + .../HazardHiddenDangerController.java | 105 ++++++++++++ .../safety/domain/HazardHiddenDanger.java | 138 +++++++++++++++ .../dromara/safety/domain/HseSafetyLog.java | 10 ++ .../domain/bo/HazardHiddenDangerBo.java | 138 +++++++++++++++ .../dto/safetylog/HseSafetyLogCreateReq.java | 10 ++ .../domain/vo/HazardHiddenDangerVo.java | 162 ++++++++++++++++++ .../domain/vo/safetylog/HseSafetyLogVo.java | 12 ++ .../mapper/HazardHiddenDangerMapper.java | 15 ++ .../service/IHazardHiddenDangerService.java | 70 ++++++++ .../impl/HazardHiddenDangerServiceImpl.java | 145 ++++++++++++++++ .../safety/HazardHiddenDangerMapper.xml | 7 + 21 files changed, 923 insertions(+), 4 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java index b46d5a9a..7abb4fcc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java @@ -26,6 +26,7 @@ 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.CopyUserVo; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.DesUserVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; @@ -45,10 +46,7 @@ import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -131,6 +129,16 @@ public class DesVolumeCatalogController extends BaseController { return toAjax(desVolumeCatalogService.viewerFile(id)); } + /** + * 计划过期统计 + */ + @GetMapping("/delayCont/{projectId}") + public R 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 f1a03153..4f66d4ef 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/quality/domain/QltQualityConstructionLog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java index dc0f3e94..76a4f904 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java @@ -34,6 +34,11 @@ public class QltQualityConstructionLog extends BaseEntity { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 标题 */ @@ -44,6 +49,11 @@ public class QltQualityConstructionLog extends BaseEntity { */ private LocalDate happenDate; + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java index aecdda4c..8c98031c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java @@ -21,11 +21,21 @@ public class QltQualityConstructionLogCreateReq implements Serializable { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ private LocalDate happenDate; + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java index cb0b3bbd..235850f3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java @@ -40,6 +40,11 @@ public class QltQualityConstructionLogVo implements Serializable { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 项目名称 */ @@ -52,6 +57,12 @@ public class QltQualityConstructionLogVo implements Serializable { @ExcelProperty(value = "发生日期") private LocalDate happenDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java index 8a57c237..85b34e1d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java @@ -224,6 +224,8 @@ public class QltQualityConstructionLogServiceImpl extends ServiceImpl 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)); + } +} 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..c9b42cd5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -0,0 +1,138 @@ +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.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; + + /** + * 角色ID + */ + @TableId(value = "id") + private Long id; + + /** + * 隐患编号 + */ + private String dangerCode; + + /** + * 隐患名称 + */ + private String dangerName; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + + /** + * 上报位置 + */ + private String reportLocation; + + /** + * 上报人 + */ + private Long reporter; + + /** + * 上报人电话 + */ + private String reportPhone; + + /** + * 上报时间 + */ + 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/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/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..29de86f0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java @@ -0,0 +1,138 @@ +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 reportPhone; + + /** + * 上报时间 + */ + 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-已闭环) + */ + @NotBlank(message = "状态(1-待评估,2-待整改,3-待复查,4-已闭环)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 备注 + */ + private String remark; + + +} 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/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..4c002e41 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -0,0 +1,162 @@ +package org.dromara.safety.domain.vo; + +import org.dromara.safety.domain.HazardHiddenDanger; +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.LocalDateTime; +import java.util.Date; + + + +/** + * 隐患信息视图对象 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; + + /** + * 隐患编号 + */ + @ExcelProperty(value = "隐患编号") + private String dangerCode; + + /** + * 隐患名称 + */ + @ExcelProperty(value = "隐患名称") + private String dangerName; + + /** + * 上报位置 + */ + @ExcelProperty(value = "上报位置") + private String reportLocation; + + /** + * 上报人 + */ + @ExcelProperty(value = "上报人") + private Long reporter; + + /** + * 上报人电话 + */ + private String reportPhone; + + /** + * 上报时间 + */ + @ExcelProperty(value = "上报时间") + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + @ExcelProperty(value = "隐患等级ID") + private Long dangerLevelId; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + /** + * 评估人 + */ + @ExcelProperty(value = "评估人") + private Long evaluator; + + /** + * 评估时间 + */ + @ExcelProperty(value = "评估时间") + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + @ExcelProperty(value = "评估依据") + private String evaluateBasis; + + /** + * 评估意见 + */ + @ExcelProperty(value = "评估意见") + private String reporterOpinion; + + /** + * 评估附件 + */ + @ExcelProperty(value = "评估附件") + private String reporterFile; + + /** + * 整改时间 + */ + @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; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=-待评估,2-待整改,3-待复查,4-已闭环") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} 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/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/service/IHazardHiddenDangerService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java new file mode 100644 index 00000000..8ceff413 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.HazardHiddenDanger; +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 IHazardHiddenDangerService 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(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); +} 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..bdb47321 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.safety.service.impl; + +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.HazardHiddenDangerBo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.mapper.HazardHiddenDangerMapper; +import org.dromara.safety.service.IHazardHiddenDangerService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 隐患信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerServiceImpl extends ServiceImpl implements IHazardHiddenDangerService { + + private final HazardHiddenDangerMapper baseMapper; + + /** + * 查询隐患信息 + * + * @param id 主键 + * @return 隐患信息 + */ + @Override + public HazardHiddenDangerVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询隐患信息列表 + * + * @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 bo 查询条件 + * @return 隐患信息列表 + */ + @Override + public List queryList(HazardHiddenDangerBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardHiddenDanger::getId); + 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); + 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; + } +} 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 @@ + + + + + From b5b7324f7ce4ea652f9c6a312a9b2a4e6037e371 Mon Sep 17 00:00:00 2001 From: lg Date: Wed, 3 Dec 2025 17:14:31 +0800 Subject: [PATCH 24/73] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xinnengyuan/ruoyi-admin/src/main/resources/application.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 261ac1cb..3e511be9 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -309,6 +309,8 @@ springdoc: packages-to-scan: org.dromara.mechanical.jxgl - group: 32.设备模块 packages-to-scan: org.dromara.device + - group: 34.机械安全模块 + packages-to-scan: org.dromara.mechanical.jxaqgl # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true From 79a2dbfcd38a1e050ea607599d50be76c8bd269b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 3 Dec 2025 18:57:00 +0800 Subject: [PATCH 25/73] =?UTF-8?q?12-03-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/GpsEquipmentServiceImpl.java | 10 +- .../dromara/websocket/ChatServerHandler.java | 57 +--- .../service/RydwWebSocketServer.java | 250 ++++++++++++++---- 3 files changed, 207 insertions(+), 110 deletions(-) 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 cdafc790..39652c4d 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 @@ -615,15 +615,15 @@ public class GpsEquipmentServiceImpl extends ServiceImpl 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<>(); @@ -71,14 +66,39 @@ 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"); - String projectId = subscriptionIds.getFirst(); - map = getData(projectId); + if (subscriptionIds != null && !subscriptionIds.isEmpty()) { + projectId = subscriptionIds.getFirst(); + } + //分包单位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) { @@ -107,7 +127,17 @@ public class RydwWebSocketServer { JSONObject jsonObject = JSON.parseObject(message); if (jsonObject.get("type").equals("1")){ if (jsonObject.get("projectId") != null){ - Map objectMap = getData(jsonObject.get("projectId").toString()); + String fbdwId = null; + //分包单位id + 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)); } } @@ -165,7 +195,7 @@ public class RydwWebSocketServer { /** * 获取数据 用于首次和心跳 */ - public Map getData(String projectId){ + public Map getData(String projectId,String fbdwId,String bzId){ Map map = new HashMap<>(); if (projectId != null && !projectId.isEmpty()){ // 获取当天结束时间 @@ -178,11 +208,12 @@ public class RydwWebSocketServer { //拿到项目下所有人员 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 list = subConstructionUserService.list(queryWrapper); //获取此项目打卡范围 LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); - //打卡范围 List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); //通过打卡范围构建下方统计数据 List> allValue = new ArrayList<>(); @@ -251,15 +282,12 @@ public class RydwWebSocketServer { int zrys = 0; int ycry = 0; - int dwcs = 0; + Integer dwcs = 0; int zgry = 0; if (list != null && !list.isEmpty()){ //初始化 List gpsList = new ArrayList<>(); - List onlineUserList = ChatServerHandler.getOnlineUserList(); - - //循环班组人员列表 for (SubConstructionUser constructionUser : list) { //从redis拿到缓存最新坐标 @@ -269,7 +297,8 @@ public class RydwWebSocketServer { }else { // zgry++; } - GpsEquipmentSon one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); + GpsEquipmentSonBo bo = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); + GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); if (one != null){ //获取人员 @@ -277,13 +306,12 @@ public class RydwWebSocketServer { sysUserVo.setJd(one.getLocLongitude()); sysUserVo.setWd(one.getLocLatitude()); sysUserVo.setZhdwsj(one.getCreateTime()); +// sysUserVo.setAvatar(1000000L); boolean isFind = false; //循环打卡范围 判断是否是异常状态 for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { //转换范围 - Gson gson = new Gson(); - Type listType = new TypeToken>() {}.getType(); - List coordinates = gson.fromJson(busProjectPunchrange.getPunchRange(), listType); + List coordinates = List.of(busProjectPunchrange.getPunchRange()); List matchingRange = JSTUtil.findMatchingRange(one.getLocLatitude().toString(), one.getLocLongitude().toString(), coordinates); //如果范围外为 空 if (matchingRange != null && !matchingRange.isEmpty() && !isFind) { @@ -291,13 +319,13 @@ public class RydwWebSocketServer { isFind = true; //判断在线状态 如果在线 范围外 则为异常 目前从聊天服务获取 - if (onlineUserList.contains(constructionUser.getSysUserId().toString())) { + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())) { sysUserVo.setZxzt("在线"); //坐标在范围内在岗 zgry++; String key = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(); - //给打卡柱状图赋值 + //给坐标柱状图赋值 for (Map mapMap : allValue) { //这个map为 id+名字 : 时间段 MAP if (mapMap.containsKey(key)){ @@ -305,34 +333,90 @@ public class RydwWebSocketServer { LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); // 获取小时数 int hour = dateTime.getHour(); - // 根据小时数判断所属区间并增加计数 + // 根据小时数判断所属区间并增加计数 一个人在一个时间段只能增加一次 设计一个新的redis存储 Key = 范围ID + 时间段 + 用户ID value = 0(未统计)1(已统计) 过期时间 = 今天为止 if (hour >= 6 && hour < 8) { - mapMap.get(mapMap.get(key)).put("06:00", (int)mapMap.get(key).get("06:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int)mapMap.get(key).get("06:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("06:00", (int) mapMap.get(key).get("06:00") + 1); + //将redis中该时间段人数+1 map中已经加过 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int) mapMap.get(key).get("06:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } else if (hour >= 8 && hour < 10) { - mapMap.get(mapMap.get(key)).put("08:00", (int)mapMap.get(key).get("08:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int)mapMap.get(key).get("08:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("08:00", (int) mapMap.get(key).get("08:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int) mapMap.get(key).get("08:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + } else if (hour >= 10 && hour < 12) { - mapMap.get(mapMap.get(key)).put("10:00", (int)mapMap.get(key).get("10:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int)mapMap.get(key).get("10:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("10:00", (int) mapMap.get(key).get("10:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int) mapMap.get(key).get("10:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } else if (hour >= 12 && hour < 14) { - mapMap.get(mapMap.get(key)).put("12:00", (int)mapMap.get(key).get("12:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int)mapMap.get(key).get("12:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("12:00", (int) mapMap.get(key).get("12:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int) mapMap.get(key).get("12:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } else if (hour >= 14 && hour < 16) { - mapMap.get(mapMap.get(key)).put("14:00", (int)mapMap.get(key).get("14:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int)mapMap.get(key).get("14:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("14:00", (int) mapMap.get(key).get("14:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int) mapMap.get(key).get("14:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } else if (hour >= 16 && hour < 18) { - mapMap.get(mapMap.get(key)).put("16:00", (int)mapMap.get(key).get("16:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int)mapMap.get(key).get("16:00") + 1, Duration.ofSeconds(expireSeconds)); + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("16:00", (int) mapMap.get(key).get("16:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int) mapMap.get(key).get("16:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } else if (hour >= 18 && hour < 20) { - mapMap.get(mapMap.get(key)).put("18:00", (int)mapMap.get(key).get("18:00") + 1); - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int)mapMap.get(key).get("18:00") + 1, Duration.ofSeconds(expireSeconds)); - + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("18:00", (int) mapMap.get(key).get("18:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int) mapMap.get(key).get("18:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } } } } @@ -341,9 +425,9 @@ public class RydwWebSocketServer { } //进一步判断状态 if (sysUserVo.getZxzt() == null || sysUserVo.getZxzt().isEmpty()){ - if (onlineUserList.contains(constructionUser.getSysUserId().toString()) && !isFind){ + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString()) && !isFind){ sysUserVo.setZxzt("异常"); - }else if (!onlineUserList.contains(constructionUser.getSysUserId().toString())){ + }else if (!ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())){ sysUserVo.setZxzt("离线"); } } @@ -353,6 +437,7 @@ public class RydwWebSocketServer { ycry++; } + //人员级GPS坐标列表 gpsList.add(sysUserVo); } } @@ -367,20 +452,85 @@ public class RydwWebSocketServer { map.put("ycry",ycry); //总人员数 -// map.put("zrys",list.size()); map.put("zrys",zgry + ycry); + //定位次数 - Long cacheObject = RedisUtils.getCacheObject("rydw_"); - if (cacheObject != null){ - dwcs = cacheObject.intValue(); + if (RedisUtils.isExistsObject("rydw_cs")){ + dwcs = RedisUtils.getCacheObject("rydw_cs"); } map.put("dwcs",dwcs); //柱状图数据 map.put("zztsj",allValue); + + //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 + map.put("bztsj",getPieData(allValue, list, busProjectPunchranges)); } } return map; } + /** + * 统计饼状图 数据 + */ + public List> getPieData(List> value,List persons,List dkfw) { + //redis中有判断标识数据: "rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId() + + //饼状图数据Map + Map map = new HashMap<>(); + + for (Map mapMap : value) { + //打卡范围ID : 打卡范围名称 + Set keys = mapMap.keySet(); + for (String fwIdMc : keys) { + //时间段 + Set keySet = mapMap.get(fwIdMc).keySet(); + for (Object time : keySet) { + //组合key值进行查询redis: 打卡范围ID + "_" + 时间段 + "_" + 用户ID + String[] split = fwIdMc.split(":"); + //分离出范围ID + String fwId = split[0]; + //范围名称 + String fwMc = split[1]; + //组合用户id进行循环查询 + for (SubConstructionUser person : persons) { + //在此范围 此时间 循环用户 -> 在此范围 下一个时间 循环用户 -> 在下一个范围 此时间 循环用户 + String key = "rydw_tj_"+fwId + "_" + time + "_" + person.getSysUserId(); + //针对时间去重 一个范围内只需要有一个时间段在范围内 其余不统计 + if (RedisUtils.isExistsObject( key)){ + //在map中判断 如果有 则不进行添加 + if (!map.containsKey(fwId + "_" + person.getSysUserId())) { + //如果没有 则说明该用户在 这个范围 这个时间段 有数据 可以添加 + map.put(fwId + "_" + person.getSysUserId(), 1); + } + } + } + } + } + } + + //循环完成后 可以统计出 在此范围 此用户 是否活跃过 + Map countMap = new HashMap<>(); + //再次进行循环 统计出 一个范围内 多少活跃 用一个新map进行计数 + map.forEach((key, num) -> { + for (BusProjectPunchrange fw : dkfw) { + //提取出范围ID + String fwId = key.split("_")[0]; + if (fw.getId().toString().equals(fwId)) { + if (!countMap.containsKey(fw.getId() + ":" + fw.getPunchName())){ + //如果没有则初始化为1人 + countMap.put(fw.getId() + ":" + fw.getPunchName(), 1); + }else { + //如果有则进行累加 + countMap.put(fw.getId() + ":" + fw.getPunchName(), countMap.get(fw.getId() + ":" + fw.getPunchName()) + 1); + } + //放一条测试数据 + countMap.put("1000000:测试数据", 8); + } + } + }); + + return new ArrayList<>(countMap.entrySet()); + } + } From 9c7f9ad98049b1998a4757785209a113b1219121 Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 3 Dec 2025 19:54:45 +0800 Subject: [PATCH 26/73] =?UTF-8?q?=E9=9A=90=E6=82=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HazardHiddenDangerController.java | 57 ++++++++++++++++++ .../safety/domain/HazardHiddenDanger.java | 16 ++++- .../domain/bo/HazardHiddenDangerBo.java | 8 ++- .../safety/domain/dto/EvaluateDto.java | 59 +++++++++++++++++++ .../domain/vo/HazardHiddenDangerVo.java | 40 ++++++++++++- .../safety/domain/vo/HiddenDangerCountVo.java | 33 +++++++++++ .../service/IHazardHiddenDangerService.java | 22 +++++++ .../impl/HazardHiddenDangerServiceImpl.java | 51 +++++++++++++++- .../impl/HseSafetyInspectionServiceImpl.java | 1 + 9 files changed, 282 insertions(+), 5 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java index cd976c12..fd21a5eb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java @@ -6,6 +6,11 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.service.IHazardRuleService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -36,6 +41,8 @@ public class HazardHiddenDangerController extends BaseController { private final IHazardHiddenDangerService hazardHiddenDangerService; + private final IHazardRuleService hazardRuleService; + /** * 查询隐患信息列表 */ @@ -102,4 +109,54 @@ public class HazardHiddenDangerController extends BaseController { @PathVariable Long[] ids) { return toAjax(hazardHiddenDangerService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 隐患统计 + */ + @GetMapping("/dangerCount/{projectId}") + public R dangerCount(@PathVariable Long projectId) { + HiddenDangerCountVo count = hazardHiddenDangerService.dangerCount(projectId); + return R.ok(count); + } + + + + /** + * 隐患级别列表 + */ + @GetMapping("/levelList") + public R> export(HazardRuleBo bo) { + List list = hazardRuleService.queryList(bo); + return R.ok(list); + } + + + /** + * 评估隐患 + */ + @SaCheckPermission("safety:hiddenDanger:edit") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/evaluate") + public R evaluate(@RequestBody EvaluateDto dto) { + return toAjax(hazardHiddenDangerService.evaluate(dto)); + } + + + + + + + + + + + + + + + + + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java index c9b42cd5..238bc8a2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -22,12 +22,26 @@ public class HazardHiddenDanger extends BaseEntity { @Serial private static final long serialVersionUID = 1L; + // 待评估 + public static final String EVALUATE = "1"; + // 待整改 + public static final String RECTIFY = "2"; + // 待复查 + public static final String REVIEW = "3"; + // 已闭环 + public static final String CLOSED = "4"; + /** * 角色ID */ @TableId(value = "id") private Long id; + /** + * 项目ID + */ + private Long projectId; + /** * 隐患编号 */ @@ -67,7 +81,7 @@ public class HazardHiddenDanger extends BaseEntity { /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java index 29de86f0..11a51589 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java @@ -66,7 +66,7 @@ public class HazardHiddenDangerBo extends BaseEntity { /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 @@ -126,7 +126,6 @@ public class HazardHiddenDangerBo extends BaseEntity { /** * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) */ - @NotBlank(message = "状态(1-待评估,2-待整改,3-待复查,4-已闭环)不能为空", groups = { AddGroup.class, EditGroup.class }) private String status; /** @@ -135,4 +134,9 @@ public class HazardHiddenDangerBo extends BaseEntity { private String remark; + /** + * 项目ID + */ + private Long projectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java new file mode 100644 index 00000000..80e01efe --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java @@ -0,0 +1,59 @@ +package org.dromara.safety.domain.dto; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.domain.HazardHiddenDanger; + +import java.time.LocalDateTime; + +/** + * 隐患信息业务对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@AutoMapper(target = HazardHiddenDanger.class, reverseConvertGenerate = false) +public class EvaluateDto { + + /** + * ID + */ + private Long id; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java index 4c002e41..c2b6a31b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -1,5 +1,7 @@ package org.dromara.safety.domain.vo; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.safety.domain.HazardHiddenDanger; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -35,6 +37,11 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "角色ID") private Long id; + /** + * 项目ID + */ + private Long projectId; + /** * 隐患编号 */ @@ -59,10 +66,16 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "上报人") private Long reporter; + /** + * 上报人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reporter") + private String reporterName; + /** * 上报人电话 */ - private String reportPhone; + private String reporterPhone; /** * 上报时间 @@ -91,12 +104,24 @@ public class HazardHiddenDangerVo implements Serializable { */ private String dangerFile; + /** + * 隐患附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "dangerFile") + private String dangerFileUrl; + /** * 评估人 */ @ExcelProperty(value = "评估人") private Long evaluator; + /** + * 评估人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "evaluator") + private String evaluatorName; + /** * 评估时间 */ @@ -121,6 +146,12 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "评估附件") private String reporterFile; + /** + * 评估附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reporterFile") + private String reporterFileUrl; + /** * 整改时间 */ @@ -145,6 +176,12 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "整改负责人Id") private Long rectifyUserId; + /** + * 整改负责人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + /** * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) */ @@ -159,4 +196,5 @@ public class HazardHiddenDangerVo implements Serializable { private String remark; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java new file mode 100644 index 00000000..049c3dff --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java @@ -0,0 +1,33 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HiddenDangerCountVo { + + /** + * 总数量 + */ + private Integer total; + /** + * 待评估数量 + */ + private Long waitEvaluate; + /** + * 待整改数量 + */ + private Long waitRectify; + /** + * 待复查数量 + */ + private Long waitReview; + /** + * 已闭环数量 + */ + private Long closed; + /** + * 逾期数量 + */ + private Long overdue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java index 8ceff413..5366ebad 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -1,5 +1,6 @@ package org.dromara.safety.service; +import org.dromara.safety.domain.dto.EvaluateDto; import org.dromara.safety.domain.vo.HazardHiddenDangerVo; import org.dromara.safety.domain.bo.HazardHiddenDangerBo; import org.dromara.safety.domain.HazardHiddenDanger; @@ -7,6 +8,10 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; + import java.util.Collection; import java.util.List; @@ -67,4 +72,21 @@ public interface IHazardHiddenDangerService extends IService * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 隐患统计 + * + * @param projectId 项目ID + * @return 隐患统计信息 + */ + HiddenDangerCountVo dangerCount(Long projectId); + + /** + * 评估隐患 + * + * @param dto 评估信息 + * @return 是否评估成功 + */ + Boolean evaluate(EvaluateDto dto); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java index bdb47321..00bfe7ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -1,5 +1,9 @@ package org.dromara.safety.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -8,6 +12,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.service.IHazardRuleService; import org.springframework.stereotype.Service; import org.dromara.safety.domain.bo.HazardHiddenDangerBo; import org.dromara.safety.domain.vo.HazardHiddenDangerVo; @@ -15,6 +23,7 @@ import org.dromara.safety.domain.HazardHiddenDanger; import org.dromara.safety.mapper.HazardHiddenDangerMapper; import org.dromara.safety.service.IHazardHiddenDangerService; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Collection; @@ -27,10 +36,13 @@ import java.util.Collection; */ @RequiredArgsConstructor @Service -public class HazardHiddenDangerServiceImpl extends ServiceImpl implements IHazardHiddenDangerService { +public class HazardHiddenDangerServiceImpl extends ServiceImpl + implements IHazardHiddenDangerService { private final HazardHiddenDangerMapper baseMapper; + private final IHazardRuleService hazardRuleService; + /** * 查询隐患信息 * @@ -72,6 +84,8 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(HazardHiddenDanger::getId); + lqw.eq(bo.getProjectId()!=null, HazardHiddenDanger::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getDangerType()), HazardHiddenDanger::getDangerType, bo.getDangerType()); lqw.eq(StringUtils.isNotBlank(bo.getDangerCode()), HazardHiddenDanger::getDangerCode, bo.getDangerCode()); lqw.like(StringUtils.isNotBlank(bo.getDangerName()), HazardHiddenDanger::getDangerName, bo.getDangerName()); lqw.eq(StringUtils.isNotBlank(bo.getReportLocation()), HazardHiddenDanger::getReportLocation, bo.getReportLocation()); @@ -101,6 +115,9 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -142,4 +159,36 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; } + + @Override + public HiddenDangerCountVo dangerCount(Long projectId) { + List list = lambdaQuery().eq(HazardHiddenDanger::getProjectId, projectId).list(); + HiddenDangerCountVo count = new HiddenDangerCountVo(); + count.setTotal(list.size()); + count.setWaitEvaluate(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.EVALUATE)).count()); + count.setWaitRectify(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + count.setWaitReview(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.REVIEW)).count()); + count.setClosed(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.CLOSED)).count()); + count.setOverdue(list.stream().filter(item ->item.getRectifyTime()!=null && item.getRectifyTime().isBefore(LocalDateTime.now()) + && item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + return count; + } + + @Override + public Boolean evaluate(EvaluateDto dto) { + HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId()); + BeanUtil.copyProperties(dto,hazardHiddenDanger); + HazardRule byId = hazardRuleService.getById(hazardHiddenDanger.getDangerLevelId()); + String responseUnit = byId.getResponseUnit(); + hazardHiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); + LocalDateTime now = LocalDateTime.now(); + if (responseUnit.equals("3")) { + hazardHiddenDanger.setRectifyTime(now.plusDays(byId.getResponseTime())); + } else if (responseUnit.equals("2")) { + hazardHiddenDanger.setRectifyTime(now.plusHours(byId.getResponseTime())); + } else if (responseUnit.equals("1")) { + hazardHiddenDanger.setRectifyTime(now.plusMinutes(byId.getResponseTime())); + } + return baseMapper.updateById(hazardHiddenDanger) > 0; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java index 440fade3..65104867 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java @@ -234,6 +234,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl inspections = safetyInspectionList.stream() // .filter(q -> "2".equals(q.getIsReply())) + .sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed()) .toList() .stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); From 35d2a10c0e9633d0d080fa1404face9721101de7 Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 3 Dec 2025 20:09:19 +0800 Subject: [PATCH 27/73] =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safety/service/impl/HseSafetyInspectionServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 65104867..315f7aa3 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 @@ -224,6 +224,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl passList = safetyInspectionList.stream() + .sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed()) .filter(q -> "1".equals(q.getIsReply())) .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) .toList(); From 2f0b3236807e9f7cbdde0fc28904d84c79f38e46 Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 3 Dec 2025 20:18:34 +0800 Subject: [PATCH 28/73] =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safety/service/impl/HseSafetyInspectionServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 315f7aa3..7cd502d2 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,7 +224,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl passList = safetyInspectionList.stream() - .sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed()) + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .filter(q -> "1".equals(q.getIsReply())) .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) .toList(); @@ -235,7 +235,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl inspections = safetyInspectionList.stream() // .filter(q -> "2".equals(q.getIsReply())) - .sorted(Comparator.comparing(HseSafetyInspection::getCreateTime).reversed()) + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .toList() .stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); From 0c38c42bfe90e2a542d016e2a12861a59e34b681 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Wed, 3 Dec 2025 20:28:58 +0800 Subject: [PATCH 29/73] =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4=E5=9B=9E?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 + .../common/core/utils/TimestampUtils.java | 146 ++++++++++++++ .../controller/BusComplaintBoxController.java | 10 +- .../impl/BusComplaintBoxServiceImpl.java | 8 +- .../manager/ys7manager/Ys7Constant.java | 10 + .../manager/ys7manager/Ys7RequestUtils.java | 166 +++++++++++++++- .../dto/DeviceLocalVideoRequstDto.java | 18 ++ .../dto/DevicePlayBackUrlRequstDto.java | 23 +++ .../ys7manager/vo/DeviceLocalVideoDataVo.java | 29 +++ .../ys7manager/vo/DeviceLocalVideoMetaVo.java | 27 +++ .../vo/DeviceLocalVideoRecordsVo.java | 27 +++ .../controller/OthYs7DeviceController.java | 125 ++++++++++++ .../dromara/other/domain/OthYs7DeviceImg.java | 6 + .../ys7device/OthYs7DevicePlayBackUrlReq.java | 31 +++ .../ys7deviceimg/AddViolattionRecordReq.java | 36 ++++ .../OthYs7DeviceImgCaptureReq.java | 4 + .../ys7device/DateAndDeviceLocalVideoVo.java | 29 +++ .../vo/ys7deviceimg/OthYs7DeviceImgVo.java | 10 + .../service/IOthYs7DeviceImgService.java | 22 +++ .../other/service/IOthYs7DeviceService.java | 22 +++ .../impl/OthYs7DeviceImgServiceImpl.java | 185 +++++++++++++++++- .../service/impl/OthYs7DeviceServiceImpl.java | 54 +++++ .../dromara/other/utils/DateRangeUtils.java | 166 ++++++++++++++++ .../safety/domain/HseRecognizeRecord.java | 5 + .../HseRecognizeRecordCreateDto.java | 5 + .../recognizerecord/HseRecognizeRecordVo.java | 5 + 26 files changed, 1160 insertions(+), 11 deletions(-) create mode 100644 xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 3e511be9..6876167c 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -309,6 +309,8 @@ springdoc: 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.jxaqgl # knife4j的增强配置,不需要增强可以不配 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/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..a9fc88be 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 @@ -46,7 +46,7 @@ public class BusComplaintBoxController extends BaseController { /** * 查询意见箱列表 */ -// @SaCheckPermission("complaintBox:complaintBox:list") + @SaCheckPermission("complaintBox:complaintBox:list") @GetMapping("/list") public TableDataInfo list(BusComplaintBoxBo bo, PageQuery pageQuery) { return busComplaintBoxService.queryPageList(bo, pageQuery); @@ -54,7 +54,7 @@ public class BusComplaintBoxController extends BaseController { /** * web获取各个处理状态数量 */ -// @SaCheckPermission("complaintBox:complaintBox:list") + @SaCheckPermission("complaintBox:complaintBox:list") @GetMapping("/getCount") public R> getCount(BusComplaintBoxBo bo) { return R.ok(busComplaintBoxService.getCount(bo)); @@ -75,7 +75,7 @@ public class BusComplaintBoxController extends BaseController { /** * 新增意见回复 */ -// @SaCheckPermission("complaintBox:complaintBox:add") + @SaCheckPermission("complaintBox:complaintBox:add") @Log(title = "意见箱", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/postAReply") @@ -87,7 +87,7 @@ public class BusComplaintBoxController extends BaseController { /** * 修改意见阅读状态 */ -// @SaCheckPermission("complaintBox:complaintBox:edit") + @SaCheckPermission("complaintBox:complaintBox:edit") @Log(title = "意见箱", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/editCheckStatus") @@ -98,7 +98,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/service/impl/BusComplaintBoxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java index c2beeb2a..c199b20a 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 @@ -327,7 +327,13 @@ 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 ("0".equals(bo.getStatus())){ + lqw.set(BusComplaintBox::getCurrentDisposeUserId, null); + } + return baseMapper.update(lqw); } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java index a919dc35..b15f11f8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java @@ -61,4 +61,14 @@ public interface Ys7Constant { */ String setDeviceVideoUrlByPost = "https://open.ys7.com/api/lapp/device/fullday/record/switch/set"; + /** + * 摄像头查询设备本地录像 Get + */ + String getDeviceLocalVideoUrlByGet = "https://open.ys7.com/api/v3/device/local/video/unify/query"; + + /** + * 获取播放地址 POST + */ + String getDeviceLappVideoUrlByPost = "https://open.ys7.com/api/lapp/v2/live/address/get"; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java index dfb29cb2..636ba096 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java @@ -4,17 +4,20 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; -import org.dromara.manager.ys7manager.vo.Ys7NoDataResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7PageResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7ResponseVo; +import org.dromara.common.core.utils.TimestampUtils; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.dto.DevicePlayBackUrlRequstDto; +import org.dromara.manager.ys7manager.vo.*; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Objects; /** * @author lilemy @@ -290,4 +293,159 @@ public class Ys7RequestUtils { } } + + /** + * 获取播放地址 + * @param dto + * @return + */ + public static String getDevicePlayBackUrl(DevicePlayBackUrlRequstDto dto) { + if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial())) { + throw new ServiceException("获取回放录像参数为空", HttpStatus.BAD_REQUEST); + } + HashMap 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/other/controller/OthYs7DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java index cf6d66c7..db479efd 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 @@ -8,6 +8,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; @@ -17,9 +18,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; @@ -46,6 +58,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.addHMCapturePic(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))); + } /** * 查询萤石摄像头列表 @@ -157,4 +236,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/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/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/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; + /** * 原始图片 */ From 982ec184900d33abc1980ca7849594314e1419e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 3 Dec 2025 22:23:12 +0800 Subject: [PATCH 30/73] =?UTF-8?q?12-03-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E5=86=8D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/domain/vo/SysUserVo.java | 11 ++ .../service/RydwWebSocketServer.java | 150 +++++++++++++----- 2 files changed, 119 insertions(+), 42 deletions(-) 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 2830e79c..1c4a29fd 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 @@ -192,4 +192,15 @@ public class SysUserVo implements Serializable { * 纬度 */ private BigDecimal wd; + + /** + * 工种 + */ + private String gz; + + /** + * 班组 + */ + private String bz; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index 9d7e0aac..b85f1035 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -17,6 +17,8 @@ import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.service.impl.GpsEquipmentSonServiceImpl; import org.dromara.project.domain.BusProjectPunchrange; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; +import org.dromara.project.service.IBusProjectTeamService; import org.dromara.project.service.impl.BusProjectPunchrangeServiceImpl; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.impl.SysUserServiceImpl; @@ -46,6 +48,8 @@ public class RydwWebSocketServer { private final static GpsEquipmentSonServiceImpl gpsEquipmentSonService = SpringUtils.getBean(GpsEquipmentSonServiceImpl.class); + private final IBusProjectTeamService busProjectTeamService = SpringUtils.getBean(IBusProjectTeamService.class); + // 2. 静态会话存储(线程安全,项目启动时即初始化) private static final Map ONLINE_SESSIONS = new ConcurrentHashMap<>(); @@ -210,7 +214,7 @@ public class RydwWebSocketServer { queryWrapper.eq(SubConstructionUser::getProjectId, projectId); queryWrapper.eq(StringUtils.isNotBlank(fbdwId), SubConstructionUser::getContractorId, fbdwId); queryWrapper.eq(StringUtils.isNotBlank(bzId), SubConstructionUser::getTeamId, bzId); - List list = subConstructionUserService.list(queryWrapper); + List persons = subConstructionUserService.list(queryWrapper); //获取此项目打卡范围 LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); @@ -225,7 +229,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("06:00",0); }else { - map2.put("06:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "6:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("06:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); @@ -233,7 +245,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("08:00",0); }else { - map2.put("08:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "8:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("08:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); @@ -241,7 +261,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("10:00",0); }else { - map2.put("10:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("10:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); @@ -249,7 +277,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("12:00",0); }else { - map2.put("12:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("12:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); @@ -257,7 +293,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("14:00",0); }else { - map2.put("14:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("14:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); @@ -265,14 +309,30 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("16:00",0); }else { - map2.put("16:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("16:00",i); } if (!existsObject) { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("18:00",0); }else { - map2.put("18:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("18:00",i); } Map map1 = new HashMap<>(); @@ -280,22 +340,21 @@ public class RydwWebSocketServer { allValue.add(map1); } - int zrys = 0; + //初始化 + List gpsList = new ArrayList<>(); +// int zrys = 0; int ycry = 0; Integer dwcs = 0; int zgry = 0; - if (list != null && !list.isEmpty()){ - //初始化 - List gpsList = new ArrayList<>(); + if (persons != null && !persons.isEmpty()){ + //循环班组人员列表 - for (SubConstructionUser constructionUser : list) { + for (SubConstructionUser constructionUser : persons) { //从redis拿到缓存最新坐标 boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); if (!existsObject){ continue; - }else { -// zgry++; } GpsEquipmentSonBo bo = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); @@ -306,7 +365,13 @@ public class RydwWebSocketServer { sysUserVo.setJd(one.getLocLongitude()); sysUserVo.setWd(one.getLocLatitude()); sysUserVo.setZhdwsj(one.getCreateTime()); -// sysUserVo.setAvatar(1000000L); + sysUserVo.setGz(constructionUser.getTypeOfWork()); + if (constructionUser.getTeamId() != null) { + BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); + if (teamVo != null) { + sysUserVo.setBz(teamVo.getTeamName()); + } + } boolean isFind = false; //循环打卡范围 判断是否是异常状态 for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { @@ -417,6 +482,7 @@ public class RydwWebSocketServer { //判断数据添加到redis RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); } + } } } @@ -441,31 +507,31 @@ public class RydwWebSocketServer { gpsList.add(sysUserVo); } } - - //地图实时坐标 - map.put("gpsList", gpsList); - - //在岗人员 - map.put("zgry",zgry); - - //异常人员 - map.put("ycry",ycry); - - //总人员数 - map.put("zrys",zgry + ycry); - - //定位次数 - if (RedisUtils.isExistsObject("rydw_cs")){ - dwcs = RedisUtils.getCacheObject("rydw_cs"); - } - map.put("dwcs",dwcs); - - //柱状图数据 - map.put("zztsj",allValue); - - //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 - map.put("bztsj",getPieData(allValue, list, busProjectPunchranges)); } + + //在岗人员 + 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; } @@ -524,10 +590,10 @@ public class RydwWebSocketServer { //如果有则进行累加 countMap.put(fw.getId() + ":" + fw.getPunchName(), countMap.get(fw.getId() + ":" + fw.getPunchName()) + 1); } - //放一条测试数据 - countMap.put("1000000:测试数据", 8); } } + //放一条测试数据 + countMap.put("1000000:测试数据", 8); }); return new ArrayList<>(countMap.entrySet()); From 556f3b6535e1ee6009dc98ae47a951faee093aee Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 4 Dec 2025 10:18:26 +0800 Subject: [PATCH 31/73] =?UTF-8?q?=E9=9A=90=E6=82=A3=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HazardRuleController.java | 33 ++-- .../safety/domain/HazardRuleNotifyObject.java | 3 + .../safety/domain/bo/HazardRuleBo.java | 13 +- .../domain/bo/HazardRuleNotifyObjectBo.java | 24 +-- .../domain/vo/HazardRuleNotifyObjectVo.java | 6 +- .../safety/domain/vo/HazardRuleVo.java | 5 + .../IHazardRuleNotifyObjectService.java | 54 ++----- .../HazardRuleNotifyObjectServiceImpl.java | 151 ++++++++---------- .../service/impl/HazardRuleServiceImpl.java | 59 ++++++- xinnengyuan/script/sql/xinnengyuan.sql | 70 ++++++-- 10 files changed, 236 insertions(+), 182 deletions(-) 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 index 906b41a1..b109175d 100644 --- 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 @@ -1,26 +1,27 @@ 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 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.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.safety.domain.vo.HazardRuleVo; -import org.dromara.safety.domain.bo.HazardRuleBo; -import org.dromara.safety.service.IHazardRuleService; +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; /** * 隐患分级通知规则 @@ -64,7 +65,7 @@ public class HazardRuleController extends BaseController { @SaCheckPermission("safety:rule:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(hazardRuleService.queryById(id)); } 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 index 7b8120a8..ac379709 100644 --- 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 @@ -1,5 +1,7 @@ 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; @@ -22,6 +24,7 @@ public class HazardRuleNotifyObject implements Serializable { /** * 规则ID */ + @TableId(type = IdType.INPUT) private Long ruleId; /** 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 index fd13e90c..1ac99ebe 100644 --- 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 @@ -10,6 +10,9 @@ 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 * @@ -21,6 +24,9 @@ import org.dromara.safety.domain.HazardRule; @AutoMapper(target = HazardRule.class, reverseConvertGenerate = false) public class HazardRuleBo extends BaseEntity { + @Serial + private static final long serialVersionUID = 1523915364119852788L; + /** * 主键 */ @@ -72,7 +78,6 @@ public class HazardRuleBo extends BaseEntity { /** * 额外设置 */ - @NotBlank(message = "额外设置不能为空", groups = {AddGroup.class, EditGroup.class}) private String extraSetting; /** @@ -80,4 +85,10 @@ public class HazardRuleBo extends BaseEntity { */ 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 index 1815b4c9..6b607f13 100644 --- 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 @@ -1,13 +1,8 @@ package org.dromara.safety.domain.bo; -import org.dromara.safety.domain.HazardRuleNotifyObject; -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.AllArgsConstructor; import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import lombok.NoArgsConstructor; /** * 隐患规则通知对象业务对象 hazard_rule_notify_object @@ -16,27 +11,18 @@ import jakarta.validation.constraints.*; * @date 2025-12-03 */ @Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = HazardRuleNotifyObject.class, reverseConvertGenerate = false) -public class HazardRuleNotifyObjectBo extends BaseEntity { - - /** - * 规则ID - */ - @NotNull(message = "规则ID不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long ruleId; +@NoArgsConstructor +@AllArgsConstructor +public class HazardRuleNotifyObjectBo { /** * 通知ID */ - @NotNull(message = "通知ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long notifyId; /** * 通知类型 */ - @NotBlank(message = "通知类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String notifyType; - } 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 index 285767d5..d6694a3e 100644 --- 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 @@ -36,11 +36,15 @@ public class HazardRuleNotifyObjectVo implements Serializable { @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 index 54c23bc0..72997c46 100644 --- 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 @@ -10,6 +10,7 @@ import org.dromara.safety.domain.HazardRule; import java.io.Serial; import java.io.Serializable; +import java.util.List; /** @@ -89,5 +90,9 @@ public class HazardRuleVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 通知对象 + */ + List notifyObjects; } 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 index e54a0b74..6f5b2f51 100644 --- 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 @@ -1,13 +1,10 @@ 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.HazardRuleNotifyObject; -import org.dromara.safety.domain.bo.HazardRuleNotifyObjectBo; import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; -import java.util.Collection; import java.util.List; /** @@ -19,52 +16,25 @@ import java.util.List; public interface IHazardRuleNotifyObjectService extends IService { /** - * 查询隐患规则通知对象 + * 根据规则查询通知对象 * - * @param ruleId 主键 - * @return 隐患规则通知对象 + * @param ruleId 规则id + * @return 通知对象 */ - HazardRuleNotifyObjectVo queryById(Long ruleId); + List queryVoByRule(Long ruleId); /** - * 分页查询隐患规则通知对象列表 + * 根据对象列表查询对象列表 * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 隐患规则通知对象分页列表 + * @param objectList 对象列表 + * @return 对象列表 */ - TableDataInfo queryPageList(HazardRuleNotifyObjectBo bo, PageQuery pageQuery); + List queryVo(List objectList); /** - * 查询符合条件的隐患规则通知对象列表 + * 补充数据 * - * @param bo 查询条件 - * @return 隐患规则通知对象列表 + * @param voList 规则列表 */ - List queryList(HazardRuleNotifyObjectBo bo); - - /** - * 新增隐患规则通知对象 - * - * @param bo 隐患规则通知对象 - * @return 是否新增成功 - */ - Boolean insertByBo(HazardRuleNotifyObjectBo bo); - - /** - * 修改隐患规则通知对象 - * - * @param bo 隐患规则通知对象 - * @return 是否修改成功 - */ - Boolean updateByBo(HazardRuleNotifyObjectBo bo); - - /** - * 校验并批量删除隐患规则通知对象信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + void supplementDataByRule(List voList); } 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 index 3ce043b7..a5c0c869 100644 --- 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 @@ -1,24 +1,21 @@ 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 cn.hutool.core.collection.CollUtil; 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.safety.domain.HazardRuleNotifyObject; -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.HazardRuleNotifyObjectMapper; import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.springframework.stereotype.Service; -import java.util.Collection; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 隐患规则通知对象Service业务层处理 @@ -31,101 +28,81 @@ import java.util.Map; public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl implements IHazardRuleNotifyObjectService { + private final ISysUserService userService; + /** - * 查询隐患规则通知对象 + * 根据规则查询通知对象 * - * @param ruleId 主键 - * @return 隐患规则通知对象 + * @param ruleId 规则id + * @return 通知对象 */ @Override - public HazardRuleNotifyObjectVo queryById(Long ruleId) { - return baseMapper.selectVoById(ruleId); + public List queryVoByRule(Long ruleId) { + List objectList = this.lambdaQuery() + .eq(HazardRuleNotifyObject::getRuleId, ruleId) + .list(); + return this.queryVo(objectList); } /** - * 分页查询隐患规则通知对象列表 + * 根据对象列表查询对象列表 * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 隐患规则通知对象分页列表 + * @param objectList 对象列表 + * @return 对象列表 */ @Override - public TableDataInfo queryPageList(HazardRuleNotifyObjectBo 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(HazardRuleNotifyObjectBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(HazardRuleNotifyObjectBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getRuleId() != null, HazardRuleNotifyObject::getRuleId, bo.getRuleId()); - lqw.eq(bo.getNotifyId() != null, HazardRuleNotifyObject::getNotifyId, bo.getNotifyId()); - lqw.eq(StringUtils.isNotBlank(bo.getNotifyType()), HazardRuleNotifyObject::getNotifyType, bo.getNotifyType()); - return lqw; - } - - /** - * 新增隐患规则通知对象 - * - * @param bo 隐患规则通知对象 - * @return 是否新增成功 - */ - @Override - public Boolean insertByBo(HazardRuleNotifyObjectBo bo) { - HazardRuleNotifyObject add = MapstructUtils.convert(bo, HazardRuleNotifyObject.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setRuleId(add.getRuleId()); + 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(); + switch (key) { + case "1": { + List userIds = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + List userVos = userService.selectUserByIds(userIds, 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 null, default: + break; + } } - return flag; + return voList; } /** - * 修改隐患规则通知对象 + * 补充数据 * - * @param bo 隐患规则通知对象 - * @return 是否修改成功 + * @param voList 规则列表 */ @Override - public Boolean updateByBo(HazardRuleNotifyObjectBo bo) { - HazardRuleNotifyObject update = MapstructUtils.convert(bo, HazardRuleNotifyObject.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(HazardRuleNotifyObject entity) { - //TODO 做一些数据校验,如唯一约束 - } - - /** - * 校验并批量删除隐患规则通知对象信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + 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); } - return baseMapper.deleteByIds(ids) > 0; } } 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 index 768babfc..0c5f8cb5 100644 --- 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 @@ -5,20 +5,26 @@ 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.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.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.IHazardRuleNotifyObjectService; import org.dromara.safety.service.IHazardRuleService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; -import java.util.Map; /** * 隐患分级通知规则Service业务层处理 @@ -31,6 +37,8 @@ import java.util.Map; public class HazardRuleServiceImpl extends ServiceImpl implements IHazardRuleService { + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + /** * 查询隐患分级通知规则 * @@ -39,7 +47,10 @@ public class HazardRuleServiceImpl extends ServiceImpl objectVos = hazardRuleNotifyObjectService.queryVoByRule(id); + hazardRuleVo.setNotifyObjects(objectVos); + return hazardRuleVo; } /** @@ -53,6 +64,7 @@ public class HazardRuleServiceImpl extends ServiceImpl queryPageList(HazardRuleBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + hazardRuleNotifyObjectService.supplementDataByRule(result.getRecords()); return TableDataInfo.build(result); } @@ -69,7 +81,6 @@ public class HazardRuleServiceImpl extends ServiceImpl buildQueryWrapper(HazardRuleBo bo) { - Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(HazardRule::getId); lqw.eq(bo.getProjectId() != null, HazardRule::getProjectId, bo.getProjectId()); @@ -90,12 +101,25 @@ public class HazardRuleServiceImpl extends ServiceImpl 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; } @@ -107,10 +131,37 @@ public class HazardRuleServiceImpl extends ServiceImpl 0; + 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; } /** diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 54a6fe2a..55ae5e37 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -2006,21 +2006,67 @@ CREATE TABLE hazard_rule_notify_object ) 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, '隐患分级通知规则菜单'); +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 (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 (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 (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 (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, ''); +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, ''); + + +-- 隐患整改情况表 +create table hazard_hidden_danger_rectify +( + `id` bigint not null auto_increment comment '主键', + hidden_danger_id bigint not null comment '关联隐患ID', + rectify_times int not null comment '整改次数', + + rectify_desc text null comment '整改说明', + rectify_files varchar(1000) null comment '整改凭证附件', + rectify_finish_time datetime null comment '完成整改时间', + + review_user_id bigint null comment '复查人ID', + review_opinion text null comment '复查意见', + review_files varchar(1000) null comment '复查凭证附件', + review_time datetime null comment '复查时间', + + review_status char not null default '0' comment '复查状态 0-待复查 1-复查通过 2-复查不通过', + `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 '隐患整改情况表' row_format = DYNAMIC; + +-- 索引 + +create index idx_rectify_times + on hazard_hidden_danger_rectify (hidden_danger_id, rectify_times); From 188172692b0bbec7a6bce277e70acfbef2ecf916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Thu, 4 Dec 2025 14:31:48 +0800 Subject: [PATCH 32/73] =?UTF-8?q?12-03-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E7=BB=88=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RydwWebSocketServer.java | 448 +++++++++--------- 1 file changed, 232 insertions(+), 216 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index b85f1035..e6f5a96a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -57,7 +57,7 @@ public class RydwWebSocketServer { // 3. 静态代码块:项目启动时执行(初始化资源、打印启动日志) static { // 此处可添加启动时的初始化逻辑(如加载配置、连接外部资源等) - log.info("✅ WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); + log.info("✅ 人员定位WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); } /** @@ -131,8 +131,8 @@ public class RydwWebSocketServer { JSONObject jsonObject = JSON.parseObject(message); if (jsonObject.get("type").equals("1")){ if (jsonObject.get("projectId") != null){ - String fbdwId = null; //分包单位id + String fbdwId = null; if (jsonObject.get("fbdwId") != null) { fbdwId = jsonObject.get("fbdwId").toString(); } @@ -221,124 +221,8 @@ public class RydwWebSocketServer { List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); //通过打卡范围构建下方统计数据 List> allValue = new ArrayList<>(); - for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { - Map map2 = new HashMap<>(); - - boolean existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("06:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "6:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("06:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("08:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "8:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("08:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("10:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("10:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("12:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("12:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("14:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("14:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("16:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("16:00",i); - } - - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("18:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("18:00",i); - } - - Map map1 = new HashMap<>(); - map1.put(busProjectPunchrange.getId()+":"+busProjectPunchrange.getPunchName(),map2); - allValue.add(map1); - } + //初始化柱状图数据 + zztcsh(allValue, busProjectPunchranges, persons, expireSeconds); //初始化 List gpsList = new ArrayList<>(); @@ -388,104 +272,10 @@ public class RydwWebSocketServer { sysUserVo.setZxzt("在线"); //坐标在范围内在岗 zgry++; - + //定义Key String key = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(); //给坐标柱状图赋值 - for (Map mapMap : allValue) { - //这个map为 id+名字 : 时间段 MAP - if (mapMap.containsKey(key)){ - //找到了时间段map - LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - // 获取小时数 - int hour = dateTime.getHour(); - // 根据小时数判断所属区间并增加计数 一个人在一个时间段只能增加一次 设计一个新的redis存储 Key = 范围ID + 时间段 + 用户ID value = 0(未统计)1(已统计) 过期时间 = 今天为止 - if (hour >= 6 && hour < 8) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("06:00", (int) mapMap.get(key).get("06:00") + 1); - //将redis中该时间段人数+1 map中已经加过 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int) mapMap.get(key).get("06:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 8 && hour < 10) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("08:00", (int) mapMap.get(key).get("08:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int) mapMap.get(key).get("08:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 10 && hour < 12) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("10:00", (int) mapMap.get(key).get("10:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int) mapMap.get(key).get("10:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 12 && hour < 14) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("12:00", (int) mapMap.get(key).get("12:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int) mapMap.get(key).get("12:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 14 && hour < 16) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("14:00", (int) mapMap.get(key).get("14:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int) mapMap.get(key).get("14:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 16 && hour < 18) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("16:00", (int) mapMap.get(key).get("16:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int) mapMap.get(key).get("16:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } else if (hour >= 18 && hour < 20) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("18:00", (int) mapMap.get(key).get("18:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int) mapMap.get(key).get("18:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } - - } - } - } + setZztData(key,allValue,one,busProjectPunchrange,constructionUser,expireSeconds); } } } @@ -536,6 +326,232 @@ public class RydwWebSocketServer { return map; } + /** + * 柱状图数据初始化 + */ + public void zztcsh (List> allValue,List busProjectPunchranges,List persons,long expireSeconds){ + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + Map map2 = new HashMap<>(); + + boolean existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("06:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + //这个人 在6点 是否活跃过 "rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId() + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("06:00",i); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("08:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("08:00",i); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("10:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("10:00",i); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("12:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("12:00",i); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("14:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("14:00",i); + } + + existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("16:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("16:00",i); + } + + if (!existsObject) { + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); + map2.put("18:00",0); + }else { + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("18:00",i); + } + + Map map1 = new HashMap<>(); + map1.put(busProjectPunchrange.getId()+":"+busProjectPunchrange.getPunchName(),map2); + allValue.add(map1); + } + } + + /** + * 柱状图 数据 + */ + public void setZztData(String key,List> allValue,GpsEquipmentSon one,BusProjectPunchrange busProjectPunchrange,SubConstructionUser constructionUser,long expireSeconds){ + for (Map mapMap : allValue) { + //这个map为 id+名字 : 时间段 MAP + if (mapMap.containsKey(key)){ + //找到了时间段map + LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + // 获取小时数 + int hour = dateTime.getHour(); + // 根据小时数判断所属区间并增加计数 一个人在一个时间段只能增加一次 设计一个新的redis存储 Key = 范围ID + 时间段 + 用户ID value = 0(未统计)1(已统计) 过期时间 = 今天为止 + if (hour >= 6 && hour < 8) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("06:00", (int) mapMap.get(key).get("06:00") + 1); + //将redis中该时间段人数+1 map中已经加过 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int) mapMap.get(key).get("06:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 8 && hour < 10) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("08:00", (int) mapMap.get(key).get("08:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int) mapMap.get(key).get("08:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 10 && hour < 12) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("10:00", (int) mapMap.get(key).get("10:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int) mapMap.get(key).get("10:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 12 && hour < 14) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("12:00", (int) mapMap.get(key).get("12:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int) mapMap.get(key).get("12:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 14 && hour < 16) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("14:00", (int) mapMap.get(key).get("14:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int) mapMap.get(key).get("14:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 16 && hour < 18) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("16:00", (int) mapMap.get(key).get("16:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int) mapMap.get(key).get("16:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } else if (hour >= 18 && hour < 20) { + //先从redis判断此人在该时间段是否已经活动过 + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId()); + //如果不存在 + if (!b) { + mapMap.get(key).put("18:00", (int) mapMap.get(key).get("18:00") + 1); + //将redis中该时间段人数+1 + RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int) mapMap.get(key).get("18:00"), Duration.ofSeconds(expireSeconds)); + //判断数据添加到redis + RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + } + + } + } + } + } + /** * 统计饼状图 数据 */ From 8b60d13c0a0f25d497599d293627a25644b589c2 Mon Sep 17 00:00:00 2001 From: lg Date: Thu, 4 Dec 2025 15:10:41 +0800 Subject: [PATCH 33/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 +- .../jxaqgl/controller/JxAqjcglController.java | 149 ++++++++ .../mechanical/jxaqgl/domain/JxAqjcgl.java | 125 +++++++ .../jxaqgl/domain/JxAqjcglJcnr.java | 46 +++ .../jxaqgl/domain/JxAqjcglWtxq.java | 41 +++ .../jxaqgl/domain/MonthDateRange.java | 24 ++ .../jxaqgl/domain/bo/JxAqjcglBo.java | 148 ++++++++ .../jxaqgl/domain/bo/JxAqjcglJcnrBo.java | 47 +++ .../jxaqgl/domain/bo/JxAqjcglWtxqBo.java | 42 +++ .../jxaqgl/domain/vo/JxAnqjcgHeadVo.java | 69 ++++ .../jxaqgl/domain/vo/JxAqjcglJcnrVo.java | 55 +++ .../jxaqgl/domain/vo/JxAqjcglVo.java | 206 +++++++++++ .../jxaqgl/domain/vo/JxAqjcglWtxqVo.java | 50 +++ .../jxaqgl/mapper/JxAqjcglJcnrMapper.java | 15 + .../jxaqgl/mapper/JxAqjcglMapper.java | 15 + .../jxaqgl/mapper/JxAqjcglWtxqMapper.java | 15 + .../jxaqgl/service/IJxAqjcglJcnrService.java | 70 ++++ .../jxaqgl/service/IJxAqjcglService.java | 76 ++++ .../jxaqgl/service/IJxAqjcglWtxqService.java | 70 ++++ .../service/impl/JxAqjcglJcnrServiceImpl.java | 132 +++++++ .../service/impl/JxAqjcglServiceImpl.java | 324 ++++++++++++++++++ .../service/impl/JxAqjcglWtxqServiceImpl.java | 132 +++++++ .../controller/JxSgxxjlbController.java | 137 ++++++++ .../mechanical/jxsgjl/domain/JxSgxxjlb.java | 139 ++++++++ .../jxsgjl/domain/bo/JxSgxxjlbBo.java | 151 ++++++++ .../jxsgjl/domain/vo/JxSgxxHead.java | 25 ++ .../jxsgjl/domain/vo/JxSgxxjlbVo.java | 177 ++++++++++ .../jxsgjl/mapper/JxSgxxjlbMapper.java | 15 + .../jxsgjl/service/IJxSgxxjlbService.java | 73 ++++ .../service/impl/JxSgxxjlbServiceImpl.java | 175 ++++++++++ .../jxzgbh/controller/JxYhzgbhController.java | 153 +++++++++ .../mechanical/jxzgbh/domain/JxFcxx.java | 79 +++++ .../mechanical/jxzgbh/domain/JxYhzgbh.java | 100 ++++++ .../mechanical/jxzgbh/domain/JxZgxx.java | 82 +++++ .../mechanical/jxzgbh/domain/bo/JxFcxxBo.java | 85 +++++ .../jxzgbh/domain/bo/JxYhzgbhBo.java | 103 ++++++ .../mechanical/jxzgbh/domain/bo/JxZgxxBo.java | 86 +++++ .../mechanical/jxzgbh/domain/vo/JxFcxxVo.java | 97 ++++++ .../jxzgbh/domain/vo/JxYhzgbhVo.java | 151 ++++++++ .../jxzgbh/domain/vo/JxZgxxHeadVo.java | 24 ++ .../jxzgbh/domain/vo/JxZgxxOrFcxxVo.java | 29 ++ .../mechanical/jxzgbh/domain/vo/JxZgxxVo.java | 98 ++++++ .../jxzgbh/mapper/JxFcxxMapper.java | 15 + .../jxzgbh/mapper/JxYhzgbhMapper.java | 15 + .../jxzgbh/mapper/JxZgxxMapper.java | 15 + .../jxzgbh/service/IJxFcxxService.java | 70 ++++ .../jxzgbh/service/IJxYhzgbhService.java | 84 +++++ .../jxzgbh/service/IJxZgxxService.java | 70 ++++ .../service/impl/JxFcxxServiceImpl.java | 138 ++++++++ .../service/impl/JxYhzgbhServiceImpl.java | 250 ++++++++++++++ .../service/impl/JxZgxxServiceImpl.java | 138 ++++++++ 51 files changed, 4626 insertions(+), 1 deletion(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 6876167c..84e30e7e 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -312,7 +312,7 @@ springdoc: - group: 33.摄像头模块 packages-to-scan: org.dromara.other - group: 34.机械安全模块 - packages-to-scan: org.dromara.mechanical.jxaqgl + packages-to-scan: org.dromara.mechanical # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true 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..4fd181d4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java @@ -0,0 +1,125 @@ +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 Long abarbeitung; + + /** + * 整改日期 + */ + 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..a3d4d15a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java @@ -0,0 +1,148 @@ +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; + + /** + * 所属项目(如田东) + */ + @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..224e2f0d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java @@ -0,0 +1,206 @@ +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 = "检查类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_jclx") + private String inspectionType; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + private Long inspector; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector") + private String inspectorName; + + /** + * 参与人(多个用逗号分隔) + */ + @ExcelProperty(value = "参与人", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个用逗号分隔") + 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 = "设备类型", converter = ExcelDictConvert.class) + private String equipmentType; + + /** + * 检查结果 + */ + @ExcelProperty(value = "检查结果", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_jcjg") + private String inspectionResult; + + /** + * 风险等级 + */ + @ExcelProperty(value = "风险等级", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_fxdj") + 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..f25727ca --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java @@ -0,0 +1,324 @@ +package org.dromara.mechanical.jxaqgl.service.impl; + +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; +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.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.system.service.impl.SysOssServiceImpl; +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 IJxYhzgbhService jxYhzgbhService; + + private final SysOssServiceImpl sysOssService; + + + /** + * 查询机械安全检查记录 + * + * @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); + } + } + + /** + * 分页查询机械安全检查记录列表 + * + * @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())){ + 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.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) { + 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/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..6b7c3ad4 --- /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 String 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..210554d4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java @@ -0,0 +1,151 @@ +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 + */ + @NotBlank(message = "设备台账id不能为空", groups = { AddGroup.class, EditGroup.class }) + private String 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..0bb02563 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java @@ -0,0 +1,177 @@ +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 = "事故编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=SGJL-20230620-001") + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + @ExcelProperty(value = "事故等级", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "下=拉选择") + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + @ExcelProperty(value = "事故类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "下=拉选择") + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + @ExcelProperty(value = "设备名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "下=拉选择") + private String equipmentName; + + /** + * 设备台账id + */ + @ExcelProperty(value = "设备台账id") + private String equipmentId; + + /** + * 发生时间 + */ + @ExcelProperty(value = "发生时间") + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + @ExcelProperty(value = "发生地点") + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + @ExcelProperty(value = "事故描述", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "详=细经过") + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + @ExcelProperty(value = "直接损失金额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "元=") + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + @ExcelProperty(value = "间接损失金额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "元=") + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + @ExcelProperty(value = "事故原因分析") + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + @ExcelProperty(value = "人员伤亡情况", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=有") + 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..f2a13d8e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java @@ -0,0 +1,175 @@ +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.jxsgjl.domain.vo.JxSgxxHead; +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.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械事故信息记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class JxSgxxjlbServiceImpl extends ServiceImpl implements IJxSgxxjlbService { + + private final JxSgxxjlbMapper baseMapper; + + /** + * 查询机械事故信息记录 + * + * @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(StringUtils.isNotBlank(bo.getEquipmentId()), JxSgxxjlb::getEquipmentId, bo.getEquipmentId()); + 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 做一些业务上的校验,判断是否需要校验 + } + 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..e792465c --- /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") + @PutMapping("/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..609aa660 --- /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..2be740ca --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java @@ -0,0 +1,100 @@ +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 String auditStatus; + + /** + * 文件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..444b16c5 --- /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..d2527cde --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java @@ -0,0 +1,103 @@ +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; + + /** + * 机械安全检查记录表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..033cd789 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java @@ -0,0 +1,97 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +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 = "复查日期") + 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; + + +} 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..bc5c5fbb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java @@ -0,0 +1,151 @@ +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; + + /** + * 检查人 + */ + @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; + + /** + * 审核状态 + */ + @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..c5229018 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java @@ -0,0 +1,24 @@ +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; + + +} 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..babdb6ed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java @@ -0,0 +1,29 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + + +import lombok.Data; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; + +@Data +public class JxZgxxOrFcxxVo { + + /** + * 隐患整改与闭环 + */ + private JxYhzgbhVo yhzgbhVo; + + + /** + * 复查数据 + */ + private JxFcxx fcxxVo; + + /** + * 整改数据 + */ + private JxZgxx zgxxVo; + + + +} 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..b11ad6e1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java @@ -0,0 +1,98 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +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 = "整改开始日期") + 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..a329d537 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java @@ -0,0 +1,250 @@ +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.IJxAqjcglWtxqService; +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.JxZgxxHeadVo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; +import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械隐患整改与闭环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; + + /** + * 查询机械隐患整改与闭环 + * + * @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(jxZgxxes); + } + // 回填复查数据 + List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, jxYhzgbhVo.getId())); + if (jxFcxxes != null){ + jxYhzgbhVo.setFcxxList(jxFcxxes); + } +// 问题详情 + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getId())); + 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); + 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.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 做一些业务上的校验,判断是否需要校验 + } + 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()); + } + return jxZgxxHeadVo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean zgPutBo(JxZgxxBo bo) { + 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")) { + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getAbarbeitungState,"1")); + } + 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, id)); + 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..823ced63 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.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.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(bo.getAbarbeitungDeadline() != null, JxZgxx::getAbarbeitungDeadline, bo.getAbarbeitungDeadline()); + 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; + } +} From 09d3b06e7a20345b50cd76a93bc0c3e444f4e661 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 4 Dec 2025 15:11:27 +0800 Subject: [PATCH 34/73] =?UTF-8?q?=E9=9A=90=E6=82=A3=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HazardHiddenDangerRectifyController.java | 108 ++++++++++ .../safety/domain/HazardHiddenDanger.java | 9 +- .../domain/HazardHiddenDangerRectify.java | 92 +++++++++ .../bo/HazardHiddenDangerRectifyBo.java | 99 +++++++++ ...rdHiddenDangerRectifyRectificationReq.java | 36 ++++ .../HazardHiddenDangerRectifyReviewReq.java | 19 ++ .../vo/HazardHiddenDangerRectifyVo.java | 128 ++++++++++++ .../domain/vo/HazardHiddenDangerVo.java | 32 +-- .../safety/domain/vo/RectifyTimesVo.java | 17 ++ .../HazardHiddenDangerRectifyMapper.java | 26 +++ .../IHazardHiddenDangerRectifyService.java | 90 +++++++++ .../service/IHazardHiddenDangerService.java | 33 ++- .../HazardHiddenDangerRectifyServiceImpl.java | 190 ++++++++++++++++++ .../impl/HazardHiddenDangerServiceImpl.java | 66 +++--- .../HazardRuleNotifyObjectServiceImpl.java | 63 ++++++ .../HazardHiddenDangerRectifyMapper.xml | 18 ++ xinnengyuan/script/sql/xinnengyuan.sql | 78 +++++-- 17 files changed, 1034 insertions(+), 70 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml 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..3f83e2c6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java @@ -0,0 +1,108 @@ +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.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +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() + public R edit(@Validated(EditGroup.class) @RequestBody HazardHiddenDangerRectifyBo bo) { + return toAjax(hazardHiddenDangerRectifyService.updateByBo(bo)); + } + + /** + * 删除隐患整改情况 + * + * @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/domain/HazardHiddenDanger.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java index 238bc8a2..84faaec2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -1,9 +1,10 @@ package org.dromara.safety.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +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; @@ -32,7 +33,7 @@ public class HazardHiddenDanger extends BaseEntity { public static final String CLOSED = "4"; /** - * 角色ID + * id */ @TableId(value = "id") private Long id; @@ -40,7 +41,7 @@ public class HazardHiddenDanger extends BaseEntity { /** * 项目ID */ - private Long projectId; + private Long projectId; /** * 隐患编号 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..3ca995de --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java @@ -0,0 +1,92 @@ +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 Long 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; + + /** + * 复查状态(1待复查 2复查通过 3复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + +} 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..ff0cc5dc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java @@ -0,0 +1,99 @@ +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; + + /** + * 整改次数 + */ + @NotNull(message = "整改次数不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long rectifyCount; + + /** + * 整改人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; + + /** + * 复查状态(1待复查 2复查通过 3复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + + +} 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..a64671d4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java @@ -0,0 +1,19 @@ +package org.dromara.safety.domain.dto.hiddendangerrectify; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-12-04 15:07 + */ +@Data +public class HazardHiddenDangerRectifyReviewReq implements Serializable { + + @Serial + private static final long serialVersionUID = 6999133950832111753L; + + +} 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..21d3fa8d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java @@ -0,0 +1,128 @@ +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 Long 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; + + /** + * 复查说明 + */ + @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; + + /** + * 复查状态(1待复查 2复查通过 3复查不通过) + */ + @ExcelProperty(value = "复查状态(1待复查 2复查通过 3复查不通过)", 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 index c2b6a31b..725a41a3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -1,20 +1,19 @@ 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 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.LocalDateTime; -import java.util.Date; - +import java.util.List; /** @@ -32,15 +31,15 @@ public class HazardHiddenDangerVo implements Serializable { private static final long serialVersionUID = 1L; /** - * 角色ID + * id */ - @ExcelProperty(value = "角色ID") + @ExcelProperty(value = "id") private Long id; /** * 项目ID */ - private Long projectId; + private Long projectId; /** * 隐患编号 @@ -116,7 +115,7 @@ public class HazardHiddenDangerVo implements Serializable { @ExcelProperty(value = "评估人") private Long evaluator; - /** + /** * 评估人名字 */ @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "evaluator") @@ -195,6 +194,13 @@ public class HazardHiddenDangerVo implements Serializable { @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/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/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/service/IHazardHiddenDangerRectifyService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java new file mode 100644 index 00000000..45a4eb06 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java @@ -0,0 +1,90 @@ +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); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java index 5366ebad..9798746e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -1,16 +1,14 @@ 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.bo.HazardHiddenDangerBo; -import org.dromara.safety.domain.HazardHiddenDanger; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; - -import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.safety.domain.vo.HiddenDangerCountVo; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import java.util.Collection; import java.util.List; @@ -21,7 +19,7 @@ import java.util.List; * @author Lion Li * @date 2025-12-03 */ -public interface IHazardHiddenDangerService extends IService{ +public interface IHazardHiddenDangerService extends IService { /** * 查询隐患信息 @@ -40,6 +38,15 @@ public interface IHazardHiddenDangerService extends IService */ TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery); + /** + * 分页查询隐患信息列表 + * + * @param lqw 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + TableDataInfo queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery); + /** * 查询符合条件的隐患信息列表 * @@ -48,6 +55,14 @@ public interface IHazardHiddenDangerService extends IService */ List queryList(HazardHiddenDangerBo bo); + /** + * 构建查询条件 + * + * @param bo 查询条件 + * @return 查询条件 + */ + LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo); + /** * 新增隐患信息 * 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..50c6120c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java @@ -0,0 +1,190 @@ +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 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.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 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.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 隐患整改情况Service业务层处理 + * + * @author lilemy + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl + implements IHazardHiddenDangerRectifyService { + + private final IHazardHiddenDangerService hazardHiddenDangerService; + + /** + * 查询隐患整改情况 + * + * @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.getRectifyCount() != null, HazardHiddenDangerRectify::getRectifyCount, bo.getRectifyCount()); + 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 + public Boolean rectification(HazardHiddenDangerRectifyRectificationReq req) { + return null; + } + + /** + * 隐患复查 + * + * @param req 隐患复查参数 + * @return 是否审核成功 + */ + @Override + public Boolean review(HazardHiddenDangerRectifyReviewReq req) { + return null; + } + + /** + * 保存前的数据校验 + */ + 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; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java index 00bfe7ec..309f70f6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -3,30 +3,30 @@ package org.dromara.safety.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; -import org.dromara.safety.domain.HazardRule; -import org.dromara.safety.domain.dto.EvaluateDto; -import org.dromara.safety.domain.vo.HiddenDangerCountVo; -import org.dromara.safety.service.IHazardRuleService; -import org.springframework.stereotype.Service; -import org.dromara.safety.domain.bo.HazardHiddenDangerBo; -import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +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.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; import org.dromara.safety.mapper.HazardHiddenDangerMapper; import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Collection; /** * 隐患信息Service业务层处理 @@ -50,7 +50,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery) { + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + /** * 查询符合条件的隐患信息列表 * @@ -80,11 +93,18 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl buildQueryWrapper(HazardHiddenDangerBo bo) { + /** + * 构建查询条件 + * + * @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(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()); @@ -117,7 +137,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -141,7 +161,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -169,15 +189,15 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 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()); + count.setOverdue(list.stream().filter(item -> item.getRectifyTime() != null && item.getRectifyTime().isBefore(LocalDateTime.now()) + && item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); return count; } @Override public Boolean evaluate(EvaluateDto dto) { HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId()); - BeanUtil.copyProperties(dto,hazardHiddenDanger); + BeanUtil.copyProperties(dto, hazardHiddenDanger); HazardRule byId = hazardRuleService.getById(hazardHiddenDanger.getDangerLevelId()); String responseUnit = byId.getResponseUnit(); hazardHiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); 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 index a5c0c869..a4a7f803 100644 --- 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 @@ -8,7 +8,13 @@ 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.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; @@ -30,6 +36,12 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl roleIds = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + List roleVos = roleService.selectRoleByIds(roleIds); + 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 deptIds = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + List deptVos = deptService.selectDeptByIds(deptIds); + 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 postIds = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + List postVos = postService.selectPostByIds(postIds); + 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); + } case null, default: break; } 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/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 55ae5e37..bd700940 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -2039,34 +2039,70 @@ values (1996139632219136006, '隐患分级通知规则导出', 19961396322191360 -- 隐患整改情况表 +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_times int not null comment '整改次数', + id bigint not null auto_increment comment '主键', + hidden_danger_id bigint not null comment '关联隐患ID', + rectify_count int not null comment '整改次数', - rectify_desc text null comment '整改说明', - rectify_files varchar(1000) null comment '整改凭证附件', - rectify_finish_time datetime 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_opinion text null comment '复查意见', - review_files varchar(1000) null comment '复查凭证附件', - review_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 not null default '0' comment '复查状态 0-待复查 1-复查通过 2-复查不通过', - `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 '更新时间', + 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 '隐患整改情况表' row_format = DYNAMIC; + 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_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, ''); From 18be0f00a399444e5a683fa8beb15af595f37266 Mon Sep 17 00:00:00 2001 From: zt Date: Thu, 4 Dec 2025 15:21:29 +0800 Subject: [PATCH 35/73] =?UTF-8?q?=E5=A5=96=E6=83=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OutConstructionValueRangeServiceImpl.java | 1 + .../HazardHiddenDangerController.java | 80 +++++++-- .../HseRewardsPunishmentsController.java | 170 ++++++++++++++++++ .../controller/HseRpObjectController.java | 105 +++++++++++ .../safety/domain/HseRewardsPunishments.java | 87 +++++++++ .../dromara/safety/domain/HseRpObject.java | 52 ++++++ .../domain/bo/HseRewardsPunishmentsBo.java | 94 ++++++++++ .../safety/domain/bo/HseRpObjectBo.java | 50 ++++++ .../safety/domain/dto/EvaluateDto.java | 14 +- .../domain/vo/HseRewardsPunishmentsVo.java | 109 +++++++++++ .../safety/domain/vo/HseRpPersonVo.java | 63 +++++++ .../mapper/HseRewardsPunishmentsMapper.java | 15 ++ .../safety/mapper/HseRpObjectMapper.java | 15 ++ .../mapper/HseViolationRecordMapper.java | 6 + .../IHseRewardsPunishmentsService.java | 70 ++++++++ .../safety/service/IHseRpObjectService.java | 70 ++++++++ .../HseRewardsPunishmentsServiceImpl.java | 140 +++++++++++++++ .../service/impl/HseRpObjectServiceImpl.java | 134 ++++++++++++++ .../impl/HseViolationRecordServiceImpl.java | 9 + .../safety/HseRewardsPunishmentsMapper.xml | 7 + .../mapper/safety/HseRpObjectMapper.xml | 7 + .../safety/HseViolationRecordMapper.xml | 15 ++ 22 files changed, 1296 insertions(+), 17 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml 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 b141e8ab..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 @@ -110,6 +110,7 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -118,8 +136,6 @@ public class HazardHiddenDangerController extends BaseController { return R.ok(count); } - - /** * 隐患级别列表 */ @@ -129,11 +145,10 @@ public class HazardHiddenDangerController extends BaseController { return R.ok(list); } - /** * 评估隐患 */ - @SaCheckPermission("safety:hiddenDanger:edit") + @SaCheckPermission("safety:hiddenDanger:evaluate") @Log(title = "隐患信息", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/evaluate") @@ -142,19 +157,54 @@ public class HazardHiddenDangerController extends BaseController { } + /** + * 分包单位列表 + * @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/HseRewardsPunishmentsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java new file mode 100644 index 00000000..fa3cece4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java @@ -0,0 +1,170 @@ +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.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.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 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)); + } + + + /** + * 分包单位列表 + * @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); + } + + + + + + +} 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..56a310db --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java @@ -0,0 +1,105 @@ +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)); + } +} 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..14fb6548 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java @@ -0,0 +1,87 @@ +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; + + /** + * 类型: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/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..e8bb28a2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java @@ -0,0 +1,94 @@ +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.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; + + /** + * 类型: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 List persons; + + +} 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/dto/EvaluateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java index 80e01efe..2789c26f 100644 --- 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 @@ -52,8 +52,18 @@ public class EvaluateDto { private String reporterFile; /** - * 整改时间 + * 整改单位 1-班组 2-分包 */ - private LocalDateTime rectifyTime; + 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/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..bbdfaff7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java @@ -0,0 +1,109 @@ +package org.dromara.safety.domain.vo; + +import java.math.BigDecimal; +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; + + + +/** + * 奖惩记录视图对象 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; + + /** + * 类型: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; + + /** + * 奖惩对象类型(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; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} 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/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/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/IHseRewardsPunishmentsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java new file mode 100644 index 00000000..2901ba89 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +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 java.util.Collection; +import java.util.List; + +/** + * 奖惩记录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); +} 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/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..2c1e6ca5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java @@ -0,0 +1,140 @@ +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.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 java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 奖惩记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class HseRewardsPunishmentsServiceImpl extends ServiceImpl implements IHseRewardsPunishmentsService { + + private final HseRewardsPunishmentsMapper baseMapper; + + /** + * 查询奖惩记录 + * + * @param id 主键 + * @return 奖惩记录 + */ + @Override + public HseRewardsPunishmentsVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询奖惩记录列表 + * + * @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(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()); + return lqw; + } + + /** + * 新增奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments add = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments update = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(update); + 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; + } +} 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/HseViolationRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java index faad7f7c..685ead06 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 @@ -498,4 +498,13 @@ 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/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/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} + + From 4fe7a435c643680a4d4b26efef4763112ba22d1b Mon Sep 17 00:00:00 2001 From: lg Date: Thu, 4 Dec 2025 15:27:35 +0800 Subject: [PATCH 36/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxaqgl/service/impl/JxAqjcglServiceImpl.java | 1 + .../dromara/mechanical/jxzgbh/domain/JxYhzgbh.java | 5 +++++ .../mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java | 5 +++++ .../mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java | 12 ++++++++++++ .../jxzgbh/service/impl/JxZgxxServiceImpl.java | 1 - 5 files changed, 23 insertions(+), 1 deletion(-) 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 index f25727ca..4539d993 100644 --- 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 @@ -184,6 +184,7 @@ public class JxAqjcglServiceImpl extends ServiceImpl i 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"); 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 index 2be740ca..f11f2d18 100644 --- 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 @@ -86,6 +86,11 @@ public class JxYhzgbh extends BaseEntity { */ private Long discoverId; + /** + * 整改人 + */ + private Long abarbeitung; + /** * 审核状态 */ 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 index d2527cde..dc7c2e55 100644 --- 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 @@ -43,6 +43,11 @@ public class JxYhzgbhBo extends BaseEntity { */ private Long inspector; + /** + * 整改人 + */ + private Long abarbeitung; + /** * 机械安全检查记录表ID */ 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 index bc5c5fbb..6494523f 100644 --- 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 @@ -118,6 +118,18 @@ public class JxYhzgbhVo implements Serializable { @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; + /** * 审核状态 */ 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 index 823ced63..4b7b2f32 100644 --- 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 @@ -77,7 +77,6 @@ public class JxZgxxServiceImpl extends ServiceImpl impleme 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(bo.getAbarbeitungDeadline() != null, JxZgxx::getAbarbeitungDeadline, bo.getAbarbeitungDeadline()); 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()); From 99ecb29f3c90777b3306e911c15f5a850c3aa182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Thu, 4 Dec 2025 15:39:06 +0800 Subject: [PATCH 37/73] =?UTF-8?q?12-04-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E7=BB=88=E7=89=88-=E4=BC=98=E5=8C=96=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RydwWebSocketServer.java | 351 ++++++------------ 1 file changed, 110 insertions(+), 241 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index e6f5a96a..2b96d0e1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -60,6 +60,8 @@ public class RydwWebSocketServer { 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"}; + /** * 客户端连接时触发(无需手动启动,有客户端连接时自动调用) */ @@ -329,124 +331,34 @@ public class RydwWebSocketServer { /** * 柱状图数据初始化 */ - public void zztcsh (List> allValue,List busProjectPunchranges,List persons,long expireSeconds){ + public void zztcsh(List> allValue, List busProjectPunchranges, + List persons, long expireSeconds) { for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { - Map map2 = new HashMap<>(); + Map map2 = new HashMap<>(); - boolean existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("06:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - //这个人 在6点 是否活跃过 "rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId() - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + person.getSysUserId()); - if ( b){ - i++; + 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); } - map2.put("06:00",i); } - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("08:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("08:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("10:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("10:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("12:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("12:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("14:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("14:00",i); - } - - existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("16:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("16:00",i); - } - - if (!existsObject) { - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); - map2.put("18:00",0); - }else { - //如果存在 循环找到打卡的人 - Integer i = 0; - for (SubConstructionUser person : persons) { - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + person.getSysUserId()); - if ( b){ - i++; - } - } - map2.put("18:00",i); - } - - Map map1 = new HashMap<>(); - map1.put(busProjectPunchrange.getId()+":"+busProjectPunchrange.getPunchName(),map2); + Map map1 = new HashMap<>(); + map1.put(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(), map2); allValue.add(map1); } } @@ -454,100 +366,53 @@ public class RydwWebSocketServer { /** * 柱状图 数据 */ - public void setZztData(String key,List> allValue,GpsEquipmentSon one,BusProjectPunchrange busProjectPunchrange,SubConstructionUser constructionUser,long expireSeconds){ + public void setZztData(String key, List> allValue, GpsEquipmentSon one, + BusProjectPunchrange busProjectPunchrange, SubConstructionUser constructionUser, long expireSeconds) { + + // 先找到对应的map,避免在循环内部多次判断 + Map timeSlotMap = null; for (Map mapMap : allValue) { - //这个map为 id+名字 : 时间段 MAP - if (mapMap.containsKey(key)){ - //找到了时间段map - LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); - // 获取小时数 - int hour = dateTime.getHour(); - // 根据小时数判断所属区间并增加计数 一个人在一个时间段只能增加一次 设计一个新的redis存储 Key = 范围ID + 时间段 + 用户ID value = 0(未统计)1(已统计) 过期时间 = 今天为止 - if (hour >= 6 && hour < 8) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("06:00", (int) mapMap.get(key).get("06:00") + 1); - //将redis中该时间段人数+1 map中已经加过 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", (int) mapMap.get(key).get("06:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + if (mapMap.containsKey(key)) { + timeSlotMap = mapMap.get(key); + break; + } + } - } else if (hour >= 8 && hour < 10) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("08:00", (int) mapMap.get(key).get("08:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", (int) mapMap.get(key).get("08:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "08:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + if (timeSlotMap == null) return; - } else if (hour >= 10 && hour < 12) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("10:00", (int) mapMap.get(key).get("10:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", (int) mapMap.get(key).get("10:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + int hour = dateTime.getHour(); - } else if (hour >= 12 && hour < 14) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("12:00", (int) mapMap.get(key).get("12:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", (int) mapMap.get(key).get("12:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + // 使用映射表减少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"); - } else if (hour >= 14 && hour < 16) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("14:00", (int) mapMap.get(key).get("14:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", (int) mapMap.get(key).get("14:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + 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(); - } else if (hour >= 16 && hour < 18) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("16:00", (int) mapMap.get(key).get("16:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", (int) mapMap.get(key).get("16:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); - } + if (!RedisUtils.isExistsObject(redisCheckKey)) { + // 原子性更新,避免并发问题 + synchronized (this) { + if (!RedisUtils.isExistsObject(redisCheckKey)) { + int currentCount = (int) timeSlotMap.get(timeSlot); + timeSlotMap.put(timeSlot, currentCount + 1); - } else if (hour >= 18 && hour < 20) { - //先从redis判断此人在该时间段是否已经活动过 - boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId()); - //如果不存在 - if (!b) { - mapMap.get(key).put("18:00", (int) mapMap.get(key).get("18:00") + 1); - //将redis中该时间段人数+1 - RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", (int) mapMap.get(key).get("18:00"), Duration.ofSeconds(expireSeconds)); - //判断数据添加到redis - RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); + String redisCountKey = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":" + timeSlot; + RedisUtils.setCacheObject(redisCountKey, currentCount + 1, Duration.ofSeconds(expireSeconds)); + RedisUtils.setCacheObject(redisCheckKey, 1, Duration.ofSeconds(expireSeconds)); + } } - } + break; // 找到对应时段后退出循环 } } } @@ -555,62 +420,66 @@ public class RydwWebSocketServer { /** * 统计饼状图 数据 */ - public List> getPieData(List> value,List persons,List dkfw) { - //redis中有判断标识数据: "rydw_tj_"+busProjectPunchrange.getId() + "_" + "06:00" + "_" + constructionUser.getSysUserId() + public List> getPieData(List> value, + List persons, + List dkfw) { - //饼状图数据Map - Map map = new HashMap<>(); + // 使用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) { - //打卡范围ID : 打卡范围名称 - Set keys = mapMap.keySet(); - for (String fwIdMc : keys) { - //时间段 - Set keySet = mapMap.get(fwIdMc).keySet(); - for (Object time : keySet) { - //组合key值进行查询redis: 打卡范围ID + "_" + 时间段 + "_" + 用户ID - String[] split = fwIdMc.split(":"); - //分离出范围ID - String fwId = split[0]; - //范围名称 - String fwMc = split[1]; - //组合用户id进行循环查询 + 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) { - //在此范围 此时间 循环用户 -> 在此范围 下一个时间 循环用户 -> 在下一个范围 此时间 循环用户 - String key = "rydw_tj_"+fwId + "_" + time + "_" + person.getSysUserId(); - //针对时间去重 一个范围内只需要有一个时间段在范围内 其余不统计 - if (RedisUtils.isExistsObject( key)){ - //在map中判断 如果有 则不进行添加 - if (!map.containsKey(fwId + "_" + person.getSysUserId())) { - //如果没有 则说明该用户在 这个范围 这个时间段 有数据 可以添加 - map.put(fwId + "_" + person.getSysUserId(), 1); - } + 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<>(); - //再次进行循环 统计出 一个范围内 多少活跃 用一个新map进行计数 - map.forEach((key, num) -> { - for (BusProjectPunchrange fw : dkfw) { - //提取出范围ID - String fwId = key.split("_")[0]; - if (fw.getId().toString().equals(fwId)) { - if (!countMap.containsKey(fw.getId() + ":" + fw.getPunchName())){ - //如果没有则初始化为1人 - countMap.put(fw.getId() + ":" + fw.getPunchName(), 1); - }else { - //如果有则进行累加 - countMap.put(fw.getId() + ":" + fw.getPunchName(), countMap.get(fw.getId() + ":" + fw.getPunchName()) + 1); - } - } + 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); - }); + } + + // 测试数据 + countMap.put("1000000:测试数据", 8); return new ArrayList<>(countMap.entrySet()); } From a9b9e12732839939239327e7aaa558e8f4733dc5 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 4 Dec 2025 15:55:31 +0800 Subject: [PATCH 38/73] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OutConstructionValueController.java | 2 +- .../OutConstructionValueRangeVo.java | 4 +-- .../service/IOutConstructionValueService.java | 10 ++++++- .../impl/OutConstructionValueServiceImpl.java | 16 ++++++++++- .../HazardHiddenDangerRectifyReviewReq.java | 28 +++++++++++++++++++ .../HazardHiddenDangerRectifyServiceImpl.java | 5 ++++ 6 files changed, 60 insertions(+), 5 deletions(-) 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 4fb72a16..692ae045 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 @@ -54,7 +54,7 @@ public class OutConstructionValueController extends BaseController { @SaCheckPermission("out:constructionValue:list") @GetMapping("/totalList") public R> totalList(OutConstructionValueBo bo) { - List list = outConstructionValueService.queryList(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/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java index df3e3cd9..b9719c21 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java @@ -7,7 +7,7 @@ import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.out.domain.OutConstructionValueRange; -import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import java.io.Serial; import java.io.Serializable; @@ -82,6 +82,6 @@ public class OutConstructionValueRangeVo implements Serializable { /** * 子项列表 */ - private List constructionValueVoList; + private List constructionValueVoList; } 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 5d81da02..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 @@ -48,7 +48,15 @@ public interface IOutConstructionValueService extends IService queryList(OutConstructionValueBo bo); + List queryTotalList(OutConstructionValueBo bo); + + /** + * 查询符合条件的施工产值列表 + * + * @param bo 查询条件 + * @return 施工产值列表 + */ + List queryList(OutConstructionValueBo bo); /** * 新增施工产值 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 888771c8..7b0e0ac0 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 @@ -116,7 +116,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl queryList(OutConstructionValueBo bo) { + public List queryTotalList(OutConstructionValueBo bo) { Long projectId = bo.getProjectId(); if (projectId == null) { throw new ServiceException("请选择项目"); @@ -291,6 +291,20 @@ public class OutConstructionValueServiceImpl extends ServiceImpl queryList(OutConstructionValueBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List outConstructionValueVos = baseMapper.selectVoList(lqw); + supplementaryData(outConstructionValueVos); + return outConstructionValueVos; + } + private LambdaQueryWrapper buildQueryWrapper(OutConstructionValueBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); 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 index a64671d4..1d0bfd0c 100644 --- 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 @@ -1,5 +1,7 @@ package org.dromara.safety.domain.dto.hiddendangerrectify; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -15,5 +17,31 @@ 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; + + /** + * 复查状态(1待复查 2复查通过 3复查不通过) + */ + @NotBlank(message = "请选择复查状态") + private String reviewStatus; } 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 index 50c6120c..fa1ef646 100644 --- 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 @@ -152,6 +152,11 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl Date: Thu, 4 Dec 2025 18:15:49 +0800 Subject: [PATCH 39/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/JxAqjcglServiceImpl.java | 9 ++++- .../jxgl/controller/JxWhjlController.java | 5 --- .../service/impl/JxGzwxJlServiceImpl.java | 2 +- .../jxgl/service/impl/JxGzwxServiceImpl.java | 2 +- .../jxgl/service/impl/JxWhjhServiceImpl.java | 33 ++++++++++++++++++- .../jxgl/service/impl/JxWhjlServiceImpl.java | 13 +++++++- .../mechanical/jxsgjl/domain/JxSgxxjlb.java | 2 +- .../jxsgjl/domain/bo/JxSgxxjlbBo.java | 2 +- .../jxsgjl/domain/vo/JxSgxxjlbVo.java | 2 +- .../service/impl/JxSgxxjlbServiceImpl.java | 1 - .../jxzgbh/controller/JxYhzgbhController.java | 2 +- .../mechanical/jxzgbh/domain/JxFcxx.java | 2 +- .../mechanical/jxzgbh/domain/JxYhzgbh.java | 5 +++ .../mechanical/jxzgbh/domain/bo/JxFcxxBo.java | 2 +- .../jxzgbh/domain/bo/JxYhzgbhBo.java | 5 +++ .../jxzgbh/domain/vo/JxYhzgbhVo.java | 5 +++ .../jxzgbh/domain/vo/JxZgxxOrFcxxVo.java | 9 +++++ .../service/impl/JxYhzgbhServiceImpl.java | 9 +++-- 18 files changed, 91 insertions(+), 19 deletions(-) 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 index 4539d993..ddbc94f0 100644 --- 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 @@ -26,6 +26,8 @@ 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.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; @@ -53,10 +55,13 @@ public class JxAqjcglServiceImpl extends ServiceImpl i private final IJxAqjcglWtxqService jxAqjcglWtxqService; - private final IJxYhzgbhService jxYhzgbhService; private final SysOssServiceImpl sysOssService; + @Lazy + @Autowired + private IJxYhzgbhService jxYhzgbhService; + /** * 查询机械安全检查记录 @@ -235,6 +240,8 @@ public class JxAqjcglServiceImpl extends ServiceImpl i 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){ //删除附件 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/service/impl/JxGzwxJlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java index 87f8bb28..0d6ee2b3 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 @@ -160,7 +160,7 @@ public class JxGzwxJlServiceImpl extends ServiceImpl i @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 35e90bf4..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 @@ -172,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(); 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 4fa3d81d..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,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.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; @@ -23,6 +28,7 @@ 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; @@ -44,6 +50,10 @@ public class JxWhjhServiceImpl extends ServiceImpl impleme @Autowired private IJxWhjlService jxWhjlService; + private final IDeviceInfoService deviceInfoService; + + + private final SysOssServiceImpl sysOssService; @@ -111,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()); @@ -131,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; } @@ -156,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()){ @@ -173,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(); 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/domain/JxSgxxjlb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java index 6b7c3ad4..1f264b92 100644 --- 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 @@ -53,7 +53,7 @@ public class JxSgxxjlb extends BaseEntity { /** * 设备台账id */ - private String equipmentId; + private Long equipmentId; /** * 发生时间 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 index 210554d4..7ae0a82b 100644 --- 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 @@ -56,7 +56,7 @@ public class JxSgxxjlbBo extends BaseEntity { * 设备台账id */ @NotBlank(message = "设备台账id不能为空", groups = { AddGroup.class, EditGroup.class }) - private String equipmentId; + private Long equipmentId; /** * 发生时间 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 index 0bb02563..6b921e61 100644 --- 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 @@ -69,7 +69,7 @@ public class JxSgxxjlbVo implements Serializable { * 设备台账id */ @ExcelProperty(value = "设备台账id") - private String equipmentId; + private Long equipmentId; /** * 发生时间 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 index f2a13d8e..b3dee07e 100644 --- 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 @@ -81,7 +81,6 @@ public class JxSgxxjlbServiceImpl extends ServiceImpl zgxxorfcxx(@PathVariable String type, @PathVariable Long id) { return R.ok(jxYhzgbhService.zgxxorfcxx(type,id)); } 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 index 609aa660..d92105f6 100644 --- 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 @@ -44,7 +44,7 @@ public class JxFcxx extends BaseEntity { private LocalDate reviewDate; /** - * 复查意见 + * 复查状态 */ private String reviewOpinion; 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 index f11f2d18..5489fb06 100644 --- 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 @@ -96,6 +96,11 @@ public class JxYhzgbh extends BaseEntity { */ private String auditStatus; + /** + * 复查状态 + */ + private String reviewOpinion; + /** * 文件id (多个文件逗号分隔) */ 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 index 444b16c5..dc8d0c58 100644 --- 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 @@ -49,7 +49,7 @@ public class JxFcxxBo extends BaseEntity { /** * 复查意见 */ - @NotBlank(message = "复查意见不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class }) private String reviewOpinion; /** 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 index dc7c2e55..32490a12 100644 --- 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 @@ -43,6 +43,11 @@ public class JxYhzgbhBo extends BaseEntity { */ private Long inspector; + /** + * 复查状态 + */ + private String reviewOpinion; + /** * 整改人 */ 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 index 6494523f..a0f8acec 100644 --- 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 @@ -57,6 +57,11 @@ public class JxYhzgbhVo implements Serializable { @ExcelProperty(value = "检查人") private Long inspector; + /** + * 复查状态 + */ + private String reviewOpinion; + /** * 检查人 */ 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 index babdb6ed..36a92c59 100644 --- 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 @@ -2,9 +2,12 @@ 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 { @@ -25,5 +28,11 @@ public class JxZgxxOrFcxxVo { private JxZgxx zgxxVo; + /** + * 问题详情 + */ + private List wtxqList; + + } 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 index a329d537..165e68cc 100644 --- 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 @@ -81,7 +81,7 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i jxYhzgbhVo.setFcxxList(jxFcxxes); } // 问题详情 - List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getId())); + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); if (jxAqjcglWtxqs != null){ jxYhzgbhVo.setWtxqList(jxAqjcglWtxqs); } @@ -123,6 +123,9 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i 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()); @@ -211,6 +214,8 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i if (bo.getReviewOpinion().equals("2")) { this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::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); // 修改闭环状态 @@ -224,7 +229,7 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i JxYhzgbhVo jxYhzgbhVo = this.queryById(id); if (jxYhzgbhVo != null) { jxZgxxOrFcxxVo.setYhzgbhVo(jxYhzgbhVo); - List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, id)); + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); if (jxAqjcglWtxqs != null) { jxZgxxOrFcxxVo.getYhzgbhVo().setWtxqList(jxAqjcglWtxqs); } From c7bd7092407bd4737542e86874496bfcfa812abe Mon Sep 17 00:00:00 2001 From: zt Date: Thu, 4 Dec 2025 19:18:49 +0800 Subject: [PATCH 40/73] =?UTF-8?q?=E5=A5=96=E6=83=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceInfoController.java | 10 ++ .../domain/vo/DeviceAccessRecordVo.java | 5 + .../QltQualityInspectionUpdateReq.java | 9 ++ .../HseRewardsPunishmentsController.java | 42 +++++- .../controller/HseRpObjectController.java | 12 ++ .../safety/domain/HseRewardsPunishments.java | 5 + .../domain/bo/HseRewardsPunishmentsBo.java | 17 ++- .../HseSafetyInspectionQueryReq.java | 3 + .../HseSafetyInspectionUpdateReq.java | 10 ++ .../HseViolationRecordQueryReq.java | 2 + .../safety/domain/vo/HseRPCountVo.java | 56 ++++++++ .../domain/vo/HseRewardsPunishmentsVo.java | 27 +++- .../IHseRewardsPunishmentsService.java | 20 +++ .../HseQuestionUserAnswerServiceImpl.java | 2 +- .../HseRewardsPunishmentsServiceImpl.java | 132 +++++++++++++++++- .../impl/HseSafetyInspectionServiceImpl.java | 1 + .../impl/HseViolationRecordServiceImpl.java | 6 +- 17 files changed, 347 insertions(+), 12 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java 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/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java index ebb930f4..ae9882c6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java @@ -57,6 +57,15 @@ public class QltQualityInspectionUpdateReq implements Serializable { */ private String inspectionImgFile; + /** + * 整改单位(1分包 2班组) + */ + private String rectificationUnit; + + /** + * 整改单位id + */ + private Long rectificationId; /** * 班组id 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 index fa3cece4..4c139790 100644 --- 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 @@ -1,6 +1,7 @@ package org.dromara.safety.controller; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -13,6 +14,12 @@ 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; @@ -52,6 +59,8 @@ public class HseRewardsPunishmentsController extends BaseController { private final ISubConstructionUserService constructionUserService; + private final IHseSafetyInspectionService safetyInspectionService; + private final IHseViolationRecordService hseViolationRecordService; /** * 查询奖惩记录列表 @@ -120,6 +129,22 @@ public class HseRewardsPunishmentsController extends BaseController { 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)); + } + /** * 分包单位列表 @@ -163,8 +188,23 @@ public class HseRewardsPunishmentsController extends BaseController { } + /** + * 查询安全工单列表 + */ + @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 index 56a310db..a249a26d 100644 --- 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 @@ -102,4 +102,16 @@ public class HseRpObjectController extends BaseController { @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/domain/HseRewardsPunishments.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java index 14fb6548..c2d031f4 100644 --- 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 @@ -33,6 +33,11 @@ public class HseRewardsPunishments extends BaseEntity { */ private String rpCode; + /** + * 项目ID + */ + private Long projectId; + /** * 类型:1-奖励,2-惩罚 */ 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 index e8bb28a2..22984dc7 100644 --- 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 @@ -9,6 +9,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -33,6 +34,8 @@ public class HseRewardsPunishmentsBo extends BaseEntity { */ private String rpCode; + private Long projectId; + /** * 类型:1-奖励,2-惩罚 */ @@ -86,7 +89,19 @@ public class HseRewardsPunishmentsBo extends BaseEntity { /** - * 备注 + * 开始时间 + */ + private Date startTime; + + /** + * 结束时间 + */ + private Date endTime; + + + + /** + * 对象信息 */ private List persons; 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/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/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 index bbdfaff7..f35f8792 100644 --- 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 @@ -1,6 +1,9 @@ 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; @@ -12,7 +15,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -42,6 +45,8 @@ public class HseRewardsPunishmentsVo implements Serializable { @ExcelDictFormat(readConverterExp = "如=RP001") private String rpCode; + private Long projectId; + /** * 类型:1-奖励,2-惩罚 */ @@ -74,6 +79,12 @@ public class HseRewardsPunishmentsVo implements Serializable { @ExcelProperty(value = "发起人") private Long submitter; + /** + * 发起人名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "submitter") + private String submitterName; + /** * 奖惩对象类型(1-分包 2-班组 3-人) */ @@ -99,11 +110,25 @@ public class HseRewardsPunishmentsVo implements Serializable { @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/service/IHseRewardsPunishmentsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java index 2901ba89..e44ce68d 100644 --- 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 @@ -1,5 +1,6 @@ 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; @@ -7,8 +8,11 @@ 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接口 @@ -67,4 +71,20 @@ public interface IHseRewardsPunishmentsService extends IService 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/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 index 2c1e6ca5..a272fe9f 100644 --- 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 @@ -1,6 +1,12 @@ package org.dromara.safety.service.impl; +import cn.hutool.core.convert.Convert; 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; @@ -9,16 +15,26 @@ 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.util.List; -import java.util.Map; -import java.util.Collection; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * 奖惩记录Service业务层处理 @@ -28,10 +44,14 @@ import java.util.Collection; */ @RequiredArgsConstructor @Service +@Slf4j public class HseRewardsPunishmentsServiceImpl extends ServiceImpl implements IHseRewardsPunishmentsService { private final HseRewardsPunishmentsMapper baseMapper; + private final IHseRpObjectService rpObjectService; + + private final ISysDictTypeService dictTypeService; /** * 查询奖惩记录 * @@ -40,7 +60,12 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl hseRpPersonVos = rpObjectService.queryList(hseRpObjectBo); + hseRewardsPunishmentsVo.setRpObjects(hseRpPersonVos); + return hseRewardsPunishmentsVo; } /** @@ -73,6 +98,7 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl 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()); @@ -83,6 +109,7 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl hseRpObjects = new ArrayList<>(); + for (HseRpObjectBo item : bo.getPersons()) { + 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; } @@ -137,4 +177,88 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl 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/HseSafetyInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java index 7cd502d2..5fc7b752 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 @@ -395,6 +395,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl Date: Thu, 4 Dec 2025 20:08:53 +0800 Subject: [PATCH 41/73] =?UTF-8?q?=E5=A5=96=E6=83=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/safety/domain/bo/HseRewardsPunishmentsBo.java | 5 +++-- .../service/impl/HseRewardsPunishmentsServiceImpl.java | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) 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 index 22984dc7..0fba9fad 100644 --- 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 @@ -9,6 +9,7 @@ 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; @@ -91,12 +92,12 @@ public class HseRewardsPunishmentsBo extends BaseEntity { /** * 开始时间 */ - private Date startTime; + private LocalDateTime startTime; /** * 结束时间 */ - private Date endTime; + private LocalDateTime endTime; 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 index a272fe9f..47415a68 100644 --- 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 @@ -1,6 +1,8 @@ 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; @@ -124,6 +126,9 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); From 9b7db3214e9bd08981ba70194b5ce1d36f967c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Thu, 4 Dec 2025 20:21:24 +0800 Subject: [PATCH 42/73] =?UTF-8?q?12-04-=E4=BA=BA=E5=91=98=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D-=E7=BB=88=E7=89=88-=E4=BC=98=E5=8C=96=E7=89=88?= =?UTF-8?q?=E4=B9=8B=E4=BF=AE=E5=A4=8D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gps/domain/bo/GpsEquipmentSonBo.java | 20 ++++++--- .../service/impl/GpsEquipmentServiceImpl.java | 17 +++++++ .../dromara/system/domain/vo/SysUserVo.java | 5 +++ .../service/RydwWebSocketServer.java | 45 +++++++++++-------- 4 files changed, 63 insertions(+), 24 deletions(-) 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 39652c4d..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; @@ -81,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); 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 1c4a29fd..24db5876 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 @@ -203,4 +203,9 @@ public class SysUserVo implements Serializable { */ private String bz; + /** + * 头像地址 + */ + private String avatarUrl; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index 2b96d0e1..4e7a1145 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -13,11 +13,10 @@ import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.utils.JSTUtil; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.impl.SubConstructionUserServiceImpl; -import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.service.impl.GpsEquipmentSonServiceImpl; import org.dromara.project.domain.BusProjectPunchrange; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; +import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.service.IBusProjectTeamService; import org.dromara.project.service.impl.BusProjectPunchrangeServiceImpl; import org.dromara.system.domain.vo.SysUserVo; @@ -221,6 +220,8 @@ public class RydwWebSocketServer { LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); + //获取班组列表 + List bzList = busProjectTeamService.list(); //通过打卡范围构建下方统计数据 List> allValue = new ArrayList<>(); //初始化柱状图数据 @@ -235,15 +236,16 @@ public class RydwWebSocketServer { if (persons != null && !persons.isEmpty()){ - //循环班组人员列表 + //循环考勤人员信息列表 for (SubConstructionUser constructionUser : persons) { - //从redis拿到缓存最新坐标 - boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); - if (!existsObject){ + //从redis拿到缓存最新坐标 优化:直接获取值 没有为null + GpsEquipmentSonBo one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); +// boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); + if (one == null){ continue; } - GpsEquipmentSonBo bo = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); - GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); + //这里可优化 坐标上报时存入名称 +// GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); if (one != null){ //获取人员 @@ -251,12 +253,20 @@ public class RydwWebSocketServer { sysUserVo.setJd(one.getLocLongitude()); sysUserVo.setWd(one.getLocLatitude()); sysUserVo.setZhdwsj(one.getCreateTime()); + sysUserVo.setAvatarUrl(one.getAvatar()); sysUserVo.setGz(constructionUser.getTypeOfWork()); - if (constructionUser.getTeamId() != null) { - BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); - if (teamVo != null) { - sysUserVo.setBz(teamVo.getTeamName()); + //获取班组 这里做优化 先查询获取全部 然后循环找到数据 + 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; //循环打卡范围 判断是否是异常状态 @@ -279,22 +289,21 @@ public class RydwWebSocketServer { //给坐标柱状图赋值 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("离线"); } } - //统计异常数 - if (!isFind){ - ycry++; - } - //人员级GPS坐标列表 gpsList.add(sysUserVo); } @@ -366,7 +375,7 @@ public class RydwWebSocketServer { /** * 柱状图 数据 */ - public void setZztData(String key, List> allValue, GpsEquipmentSon one, + public void setZztData(String key, List> allValue, GpsEquipmentSonBo one, BusProjectPunchrange busProjectPunchrange, SubConstructionUser constructionUser, long expireSeconds) { // 先找到对应的map,避免在循环内部多次判断 From ecc0595ec32ecdce229dd58f94b8b34152f2a78f Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 5 Dec 2025 08:58:40 +0800 Subject: [PATCH 43/73] =?UTF-8?q?=E6=96=BD=E5=B7=A5=E4=BA=A7=E5=80=BC?= =?UTF-8?q?=EF=BC=8C=E9=9A=90=E6=82=A3=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SubConstructionUserFileServiceImpl.java | 4 +- .../impl/SubConstructionUserServiceImpl.java | 4 +- .../OutConstructionValueMatrixVo.java | 2 + .../OutConstructionValueProjectVo.java | 2 + .../OutConstructionValueSubProjectVo.java | 2 + .../OutConstructionValueRangeMatrixVo.java | 2 + .../OutConstructionValueRangeProjectVo.java | 2 + ...OutConstructionValueRangeSubProjectVo.java | 2 + .../impl/OutConstructionValueServiceImpl.java | 14 +-- .../HazardHiddenDangerRectifyController.java | 22 +++- .../domain/HazardHiddenDangerRectify.java | 4 +- .../bo/HazardHiddenDangerRectifyBo.java | 8 +- .../HazardHiddenDangerRectifyReviewReq.java | 8 +- .../vo/HazardHiddenDangerRectifyVo.java | 6 +- .../HazardHiddenDangerRectifyServiceImpl.java | 117 +++++++++++++++++- .../HazardRuleNotifyObjectServiceImpl.java | 33 ++--- .../service/impl/HazardRuleServiceImpl.java | 20 +++ 17 files changed, 196 insertions(+), 56 deletions(-) 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 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()); categoryLqw.in(CollUtil.isNotEmpty(ids), PgsProgressCategory::getProjectId, ids); if (StringUtils.isNotBlank(bo.getProjectType())) { - if (bo.getProjectType().equals("1")) { - categoryLqw.in(PgsProgressCategory::getRelevancyStructure, - PgsRelevancyStructureEnum.SUB_PROJECT.getValue(), PgsRelevancyStructureEnum.MATRIX.getValue()); - } else if (bo.getProjectType().equals("2")) { - categoryLqw.eq(PgsProgressCategory::getRelevancyStructure, PgsRelevancyStructureEnum.MATRIX.getValue()); - } + 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()); } - categoryLqw.eq(StringUtils.isNotBlank(bo.getProjectType()), PgsProgressCategory::getRelevancyStructure, bo.getProjectType()); List progressCategories = pgsProgressCategoryService.list(categoryLqw); if (CollUtil.isNotEmpty(progressCategories)) { List categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList(); 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 index 3f83e2c6..0ffad25e 100644 --- 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 @@ -7,7 +7,6 @@ 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; @@ -17,6 +16,8 @@ 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; @@ -83,14 +84,25 @@ public class HazardHiddenDangerRectifyController extends BaseController { } /** - * 修改隐患整改情况 + * 隐患整改 */ @SaCheckPermission("safety:hiddenDangerRectify:edit") @Log(title = "隐患整改情况", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody HazardHiddenDangerRectifyBo bo) { - return toAjax(hazardHiddenDangerRectifyService.updateByBo(bo)); + @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)); } /** 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 index 3ca995de..84dfd714 100644 --- 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 @@ -37,7 +37,7 @@ public class HazardHiddenDangerRectify extends BaseEntity { /** * 整改次数 */ - private Long rectifyCount; + private Integer rectifyCount; /** * 整改人ID @@ -80,7 +80,7 @@ public class HazardHiddenDangerRectify extends BaseEntity { private LocalDateTime reviewTime; /** - * 复查状态(1待复查 2复查通过 3复查不通过) + * 复查状态(0待复查 1复查通过 2复查不通过) */ private String reviewStatus; 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 index ff0cc5dc..e4375f58 100644 --- 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 @@ -38,12 +38,6 @@ public class HazardHiddenDangerRectifyBo extends BaseEntity { @NotNull(message = "关联隐患ID不能为空", groups = {AddGroup.class, EditGroup.class}) private Long hiddenDangerId; - /** - * 整改次数 - */ - @NotNull(message = "整改次数不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long rectifyCount; - /** * 整改人ID */ @@ -86,7 +80,7 @@ public class HazardHiddenDangerRectifyBo extends BaseEntity { private LocalDateTime reviewTime; /** - * 复查状态(1待复查 2复查通过 3复查不通过) + * 复查状态(0待复查 1复查通过 2复查不通过) */ private String reviewStatus; 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 index 1d0bfd0c..ae7d8842 100644 --- 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 @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDateTime; /** * @author lilemy @@ -40,8 +41,13 @@ public class HazardHiddenDangerRectifyReviewReq implements Serializable { private String reviewFiles; /** - * 复查状态(1待复查 2复查通过 3复查不通过) + * 复查状态(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/vo/HazardHiddenDangerRectifyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java index 21d3fa8d..29982281 100644 --- 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 @@ -45,7 +45,7 @@ public class HazardHiddenDangerRectifyVo implements Serializable { * 整改次数 */ @ExcelProperty(value = "整改次数") - private Long rectifyCount; + private Integer rectifyCount; /** * 整改人ID @@ -113,9 +113,9 @@ public class HazardHiddenDangerRectifyVo implements Serializable { private LocalDateTime reviewTime; /** - * 复查状态(1待复查 2复查通过 3复查不通过) + * 复查状态(0待复查 1复查通过 2复查不通过) */ - @ExcelProperty(value = "复查状态(1待复查 2复查通过 3复查不通过)", converter = ExcelDictConvert.class) + @ExcelProperty(value = "复查状态(0待复查 1复查通过 2复查不通过)", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "hazard_review_status") private String reviewStatus; 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 index fa1ef646..2bdb9d85 100644 --- 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 @@ -10,23 +10,29 @@ 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.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.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.Objects; /** * 隐患整改情况Service业务层处理 @@ -101,7 +107,6 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(HazardHiddenDangerRectify::getId); lqw.eq(bo.getHiddenDangerId() != null, HazardHiddenDangerRectify::getHiddenDangerId, bo.getHiddenDangerId()); - lqw.eq(bo.getRectifyCount() != null, HazardHiddenDangerRectify::getRectifyCount, bo.getRectifyCount()); 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()); @@ -151,13 +156,50 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl> entry : map.entrySet()) { String key = entry.getKey(); List value = entry.getValue(); + List ids = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); switch (key) { - case "1": { - List userIds = value.stream() - .map(HazardRuleNotifyObject::getNotifyId) - .toList(); - List userVos = userService.selectUserByIds(userIds, null); + 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 -> { @@ -88,11 +88,8 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl roleIds = value.stream() - .map(HazardRuleNotifyObject::getNotifyId) - .toList(); - List roleVos = roleService.selectRoleByIds(roleIds); + 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 -> { @@ -105,11 +102,8 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl deptIds = value.stream() - .map(HazardRuleNotifyObject::getNotifyId) - .toList(); - List deptVos = deptService.selectDeptByIds(deptIds); + 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 -> { @@ -122,11 +116,8 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl postIds = value.stream() - .map(HazardRuleNotifyObject::getNotifyId) - .toList(); - List postVos = postService.selectPostByIds(postIds); + 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 -> { @@ -139,8 +130,6 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl 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); + } } /** From 955d7e39e607104033e4553cfc4571485334cccf Mon Sep 17 00:00:00 2001 From: lg Date: Fri, 5 Dec 2025 09:28:05 +0800 Subject: [PATCH 44/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java | 9 +++++++++ .../mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java | 4 ++-- .../mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java | 6 ++++++ .../dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java | 10 ++++++++++ .../jxzgbh/service/impl/JxYhzgbhServiceImpl.java | 9 ++++----- 5 files changed, 31 insertions(+), 7 deletions(-) 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 index 033cd789..f77c7a10 100644 --- 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 @@ -1,5 +1,7 @@ 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.JxFcxx; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -47,6 +49,13 @@ public class JxFcxxVo implements Serializable { @ExcelProperty(value = "复查人") private Long review; + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review") + private String reviewName; + /** * 复查日期 */ 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 index a0f8acec..73f5ddcb 100644 --- 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 @@ -152,11 +152,11 @@ public class JxYhzgbhVo implements Serializable { /** * 整改信息 */ - private List zgxxList; + private List zgxxList; /** * 复查信息 */ - private List fcxxList; + private List fcxxList; /** 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 index c5229018..2350137a 100644 --- 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 @@ -21,4 +21,10 @@ public class JxZgxxHeadVo { 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/JxZgxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java index b11ad6e1..1b176486 100644 --- 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 @@ -1,5 +1,7 @@ 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; @@ -47,6 +49,14 @@ public class JxZgxxVo implements Serializable { @ExcelProperty(value = "整改责任人") private Long abarbeitung; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + /** * 整改开始日期 */ 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 index 165e68cc..6c7f2818 100644 --- 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 @@ -19,13 +19,11 @@ 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.JxZgxxHeadVo; -import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; +import org.dromara.mechanical.jxzgbh.domain.vo.*; import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; import org.springframework.stereotype.Service; import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; -import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; import org.dromara.mechanical.jxzgbh.mapper.JxYhzgbhMapper; import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; @@ -73,12 +71,12 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i // 回填整改数据 List jxZgxxes = jxZgxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, jxYhzgbhVo.getId())); if (jxZgxxes != null){ - jxYhzgbhVo.setZgxxList(jxZgxxes); + jxYhzgbhVo.setZgxxList(MapstructUtils.convert(jxZgxxes, JxZgxxVo.class)); } // 回填复查数据 List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, jxYhzgbhVo.getId())); if (jxFcxxes != null){ - jxYhzgbhVo.setFcxxList(jxFcxxes); + jxYhzgbhVo.setFcxxList(MapstructUtils.convert(jxFcxxes, JxFcxxVo.class)); } // 问题详情 List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); @@ -194,6 +192,7 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i 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; } From 603286941700bb11a3d093c10f4c14c696888fe9 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 5 Dec 2025 14:16:46 +0800 Subject: [PATCH 45/73] =?UTF-8?q?=E5=A5=96=E6=83=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SubConstructionUserController.java | 3 +++ .../HseRewardsPunishmentsController.java | 2 +- .../safety/domain/bo/HseRewardsPunishmentsBo.java | 2 +- .../impl/HseRewardsPunishmentsServiceImpl.java | 15 ++++++++++++++- 4 files changed, 19 insertions(+), 3 deletions(-) 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 b462775b..30f2a027 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 @@ -397,6 +397,7 @@ public class SubConstructionUserController extends BaseController { vo.setUploadFile("部分上传"); } dataList.add(vo); + order++; } // 写入当前Sheet的数据 excelWriter.write(dataList, writeSheet); @@ -441,7 +442,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/safety/controller/HseRewardsPunishmentsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java index 4c139790..1f6b045a 100644 --- 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 @@ -87,7 +87,7 @@ public class HseRewardsPunishmentsController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("safety:rewardsPunishments:query") +// @SaCheckPermission("safety:rewardsPunishments:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { 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 index 0fba9fad..0ed4e43e 100644 --- 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 @@ -104,7 +104,7 @@ public class HseRewardsPunishmentsBo extends BaseEntity { /** * 对象信息 */ - private List persons; + private List rpObjects; } 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 index 47415a68..711e3880 100644 --- 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 @@ -134,7 +134,7 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl hseRpObjects = new ArrayList<>(); - for (HseRpObjectBo item : bo.getPersons()) { + for (HseRpObjectBo item : bo.getRpObjects()) { HseRpObject hseRpObject = new HseRpObject(); hseRpObject.setRpId(add.getId()); hseRpObject.setObjectId(item.getObjectId()); @@ -158,6 +158,19 @@ public class HseRewardsPunishmentsServiceImpl extends ServiceImpl 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; } From 46299e573251c9f8da8a317ed49db20741002682 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 5 Dec 2025 14:24:17 +0800 Subject: [PATCH 46/73] =?UTF-8?q?=E9=9A=90=E6=82=A3=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/HazardHiddenDangerRectify.java | 5 + .../vo/HazardHiddenDangerRectifyVo.java | 13 +++ .../HazardHiddenDangerRectifyServiceImpl.java | 94 +++++++++---------- .../impl/HazardHiddenDangerServiceImpl.java | 34 ++++++- xinnengyuan/script/sql/xinnengyuan.sql | 13 +++ 5 files changed, 107 insertions(+), 52 deletions(-) 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 index 84dfd714..b2182d77 100644 --- 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 @@ -34,6 +34,11 @@ public class HazardHiddenDangerRectify extends BaseEntity { */ private Long hiddenDangerId; + /** + * 整改期限 + */ + private LocalDateTime rectifyDeadline; + /** * 整改次数 */ 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 index 29982281..70f07dc6 100644 --- 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 @@ -41,6 +41,12 @@ public class HazardHiddenDangerRectifyVo implements Serializable { @ExcelProperty(value = "关联隐患ID") private Long hiddenDangerId; + /** + * 整改期限 + */ + @ExcelProperty(value = "整改期限") + private LocalDateTime rectifyDeadline; + /** * 整改次数 */ @@ -89,6 +95,12 @@ public class HazardHiddenDangerRectifyVo implements Serializable { @ExcelProperty(value = "复查人ID") private Long reviewUserId; + /** + * 复查人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reviewUserId") + private String reviewUserName; + /** * 复查说明 */ @@ -106,6 +118,7 @@ public class HazardHiddenDangerRectifyVo implements Serializable { */ @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reviewFiles") private String reviewFilesUrl; + /** * 复查时间 */ 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 index 2bdb9d85..c3e345a4 100644 --- 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 @@ -32,7 +32,6 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Objects; /** * 隐患整改情况Service业务层处理 @@ -158,36 +157,29 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl dangerRectifyVos = hazardHiddenDangerRectifyMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class) + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByAsc(HazardHiddenDangerRectify::getRectifyCount)); + dangerVo.setRectifyList(dangerRectifyVos); + return dangerVo; } /** @@ -195,6 +210,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 0; + // 修改数据 + if (baseMapper.updateById(hazardHiddenDanger) <= 0) { + throw new ServiceException("数据修改失败"); + } + // 添加整改任务 + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + rectify.setHiddenDangerId(dto.getId()); + rectify.setRectifyDeadline(hazardHiddenDanger.getRectifyTime()); + rectify.setRectifyUserId(hazardHiddenDanger.getRectifyUserId()); + rectify.setReviewUserId(hazardHiddenDanger.getEvaluator()); + rectify.setRectifyCount(1); + if (hazardHiddenDangerRectifyMapper.insert(rectify) <= 0) { + throw new ServiceException("数据保存失败"); + } + return true; } } diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index bd700940..84807ca3 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -2106,3 +2106,16 @@ insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0', 'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, ''); + + +CREATE TABLE `hazard_delay_task` +( + `id` BIGINT PRIMARY KEY COMMENT '主键', + `biz_type` VARCHAR(50) NOT NULL COMMENT '业务类型', + `biz_id` BIGINT NOT NULL COMMENT '业务ID', + `execute_time` DATETIME NOT NULL COMMENT '执行的时间点', + `status` TINYINT NOT NULL DEFAULT 0 COMMENT '任务状态 0未执行 1执行中 2执行成功 3执行失败', + `retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数', + `max_retry` INT NOT NULL DEFAULT 3 COMMENT '最大重试次数', + `fail_reason` VARCHAR(1024) NULL COMMENT '失败原因' +); From 7e1db73fb0b12ac29984b4951c561da9d48bf405 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 5 Dec 2025 16:45:22 +0800 Subject: [PATCH 47/73] =?UTF-8?q?=E6=84=8F=E8=A7=81=E7=AE=B1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusComplaintBoxController.java | 19 +++++++- .../complaintBox/domain/BusComplaintBox.java | 2 +- .../domain/bo/BusComplaintBoxBo.java | 5 +++ .../vo/BusComplaintBoxDisposeLoggingVo.java | 7 +++ ...ComplaintBoxDisposeLoggingServiceImpl.java | 4 +- ...ComplaintBoxMessageLoggingServiceImpl.java | 20 ++++++--- .../impl/BusComplaintBoxServiceImpl.java | 43 +++++++++++++++++-- .../controller/OthYs7DeviceController.java | 38 ++++++++-------- 8 files changed, 103 insertions(+), 35 deletions(-) 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 a9fc88be..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,10 +41,13 @@ 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; /** @@ -51,6 +58,14 @@ public class BusComplaintBoxController extends BaseController { 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获取各个处理状态数量 */ 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 c199b20a..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 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/other/controller/OthYs7DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java index db479efd..e3c1e25c 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 @@ -69,12 +69,12 @@ public class OthYs7DeviceController extends BaseController { * * @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") +// @GetMapping("/getViolationRecordInfo/{id}") +// public R getViolationRecordInfo(@NotNull(message = "主键不能为空") +// @PathVariable Long id) { +// return R.ok(hseViolationRecordService.queryById(id)); +// } /** @@ -84,27 +84,27 @@ public class OthYs7DeviceController extends BaseController { @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) @PostMapping("/capture") public R capture(@RequestBody OthYs7DeviceImgCaptureReq req) { - return toAjax(othYs7DeviceImgService.addHMCapturePic(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("/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") +// @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) +// @PostMapping("/addViolationRecord") +// public R addViolationRecord(@RequestBody AddViolattionRecordReq req) { +// return toAjax(othYs7DeviceImgService.addViolationRecord(req)); +// } /** * 查询萤石摄像头图片列表 */ From 4ce8ea6a3a743a856059637614d57e5416ca9441 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 5 Dec 2025 16:59:41 +0800 Subject: [PATCH 48/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BA=8B=E6=95=85?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HseSafetySgdanjlController.java | 105 ++++++++++ .../controller/HseSafetySgdcController.java | 105 ++++++++++ .../controller/HseSafetySgsbController.java | 105 ++++++++++ .../controller/HseSafetySgzgbhController.java | 105 ++++++++++ .../safety/accident/domain/HseSafetyFcxx.java | 83 ++++++++ .../accident/domain/HseSafetySgdanjl.java | 118 +++++++++++ .../safety/accident/domain/HseSafetySgdc.java | 158 +++++++++++++++ .../safety/accident/domain/HseSafetySgsb.java | 128 ++++++++++++ .../accident/domain/HseSafetySgzgbh.java | 118 +++++++++++ .../safety/accident/domain/HseSafetyZgxx.java | 78 +++++++ .../accident/domain/bo/HseSafetyFcxxBo.java | 89 ++++++++ .../domain/bo/HseSafetySgdanjlBo.java | 117 +++++++++++ .../accident/domain/bo/HseSafetySgdcBo.java | 157 +++++++++++++++ .../accident/domain/bo/HseSafetySgsbBo.java | 127 ++++++++++++ .../accident/domain/bo/HseSafetySgzgbhBo.java | 117 +++++++++++ .../accident/domain/bo/HseSafetyZgxxBo.java | 83 ++++++++ .../accident/domain/vo/HseSafetyFcxxVo.java | 102 ++++++++++ .../domain/vo/HseSafetySgdanjlVo.java | 142 +++++++++++++ .../accident/domain/vo/HseSafetySgdcVo.java | 190 ++++++++++++++++++ .../accident/domain/vo/HseSafetySgsbVo.java | 154 ++++++++++++++ .../accident/domain/vo/HseSafetySgzgbhVo.java | 142 +++++++++++++ .../accident/domain/vo/HseSafetyZgxxVo.java | 96 +++++++++ .../accident/mapper/HseSafetyFcxxMapper.java | 15 ++ .../mapper/HseSafetySgdanjlMapper.java | 15 ++ .../accident/mapper/HseSafetySgdcMapper.java | 15 ++ .../accident/mapper/HseSafetySgsbMapper.java | 15 ++ .../mapper/HseSafetySgzgbhMapper.java | 15 ++ .../accident/mapper/HseSafetyZgxxMapper.java | 15 ++ .../service/IHseSafetyFcxxService.java | 70 +++++++ .../service/IHseSafetySgdanjlService.java | 70 +++++++ .../service/IHseSafetySgdcService.java | 70 +++++++ .../service/IHseSafetySgsbService.java | 70 +++++++ .../service/IHseSafetySgzgbhService.java | 70 +++++++ .../service/IHseSafetyZgxxService.java | 70 +++++++ .../impl/HseSafetyFcxxServiceImpl.java | 140 +++++++++++++ .../impl/HseSafetySgdanjlServiceImpl.java | 147 ++++++++++++++ .../impl/HseSafetySgdcServiceImpl.java | 155 ++++++++++++++ .../impl/HseSafetySgsbServiceImpl.java | 149 ++++++++++++++ .../impl/HseSafetySgzgbhServiceImpl.java | 147 ++++++++++++++ .../impl/HseSafetyZgxxServiceImpl.java | 139 +++++++++++++ .../safety/accident/HseSafetyFcxxMapper.xml | 7 + .../accident/HseSafetySgdanjlMapper.xml | 7 + .../safety/accident/HseSafetySgdcMapper.xml | 7 + .../safety/accident/HseSafetySgsbMapper.xml | 7 + .../safety/accident/HseSafetySgzgbhMapper.xml | 7 + .../safety/accident/HseSafetyZgxxMapper.xml | 7 + 46 files changed, 4048 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml 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..2637f288 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.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.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.service.IHseSafetySgsbService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故上报 + * + * @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)); + } +} 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..23649e52 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.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.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("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)); + } + + /** + * 修改安全-事故整改闭环 + */ + @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..7a192032 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java @@ -0,0 +1,118 @@ +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 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..3c016e9b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java @@ -0,0 +1,158 @@ +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_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; + + +} 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..d659414d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java @@ -0,0 +1,128 @@ +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_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 Long 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..839bd331 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java @@ -0,0 +1,118 @@ +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_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; + + /** + * 事故编号 + */ + 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; + + +} 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..38bcc51c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java @@ -0,0 +1,78 @@ +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; + + /** + * 顺序 + */ + private Long sort; + + /** + * 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..9d04cc9a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java @@ -0,0 +1,117 @@ +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 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..764b0b85 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java @@ -0,0 +1,157 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetySgdc; +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_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; + + +} 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..9c618a33 --- /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 org.dromara.safety.accident.domain.HseSafetySgsb; +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_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 Long 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/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..b77896a7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java @@ -0,0 +1,117 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +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_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; + + /** + * 事故编号 + */ + 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; + + +} 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..a1d07c82 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java @@ -0,0 +1,83 @@ +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; + + /** + * 顺序 + */ + private Long sort; + + /** + * 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..48adfbf9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java @@ -0,0 +1,142 @@ +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; + + /** + * 调查详情 + */ + @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..8361b8b1 --- /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 java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetySgdc; +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_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; + + +} 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..7e619ecd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java @@ -0,0 +1,154 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetySgsb; +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_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 Long cbgs; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 联系方式 + */ + @ExcelProperty(value = "联系方式") + private String lxfs; + + /** + * 上报渠道 + */ + @ExcelProperty(value = "上报渠道") + private String sbqd; + + /** + * 接收人 + */ + @ExcelProperty(value = "接收人") + private Long jsr; + + /** + * 紧急措施 + */ + @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/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..61e7d4b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java @@ -0,0 +1,142 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +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_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; + + /** + * 事故编号 + */ + @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; + + +} 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..7661d833 --- /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; + + /** + * 顺序 + */ + @ExcelProperty(value = "顺序") + private Long sort; + + /** + * 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/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/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..71f0f068 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java @@ -0,0 +1,70 @@ +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); +} 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..87a3803a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.HseSafetySgsb; +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 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); +} 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..b03abfac --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.accident.service; + +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); +} 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..205fa5b1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java @@ -0,0 +1,70 @@ +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); +} 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..ab9f1518 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java @@ -0,0 +1,140 @@ +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; + } +} 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..9fff10dc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java @@ -0,0 +1,149 @@ +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.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.mapper.HseSafetySgsbMapper; +import org.dromara.safety.accident.service.IHseSafetySgsbService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故上报Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgsbServiceImpl extends ServiceImpl implements IHseSafetySgsbService { + + private final HseSafetySgsbMapper baseMapper; + + /** + * 查询安全-事故上报 + * + * @param id 主键 + * @return 安全-事故上报 + */ + @Override + public HseSafetySgsbVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-事故上报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故上报分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgsbBo 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(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); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + 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; + } +} 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..fdbf756c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.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.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.dromara.safety.accident.service.IHseSafetySgzgbhService; + +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; + + /** + * 查询安全-事故整改闭环 + * + * @param id 主键 + * @return 安全-事故整改闭环 + */ + @Override + public HseSafetySgzgbhVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-事故整改闭环列表 + * + * @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; + } +} 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..53a9769d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java @@ -0,0 +1,139 @@ +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.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; + + /** + * 查询安全事故整改信息 + * + * @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(bo.getSort() != null, HseSafetyZgxx::getSort, bo.getSort()); + 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; + } +} 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 @@ + + + + + From 849eb802bc382b8a60bdfe4c63c785251b24b930 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 5 Dec 2025 18:52:52 +0800 Subject: [PATCH 49/73] =?UTF-8?q?=E9=9A=90=E6=82=A3=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IHazardRuleNotifyObjectService.java | 10 ++++ .../impl/HazardHiddenDangerServiceImpl.java | 51 ++++++++++++++++++- .../HazardRuleNotifyObjectServiceImpl.java | 51 +++++++++++++++++-- .../service/impl/HazardRuleServiceImpl.java | 2 +- .../system/service/ISysUserService.java | 8 +++ .../service/impl/SysUserServiceImpl.java | 17 +++++++ xinnengyuan/script/sql/xinnengyuan.sql | 8 +-- 7 files changed, 137 insertions(+), 10 deletions(-) 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 index 6f5b2f51..da32ace9 100644 --- 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 @@ -6,6 +6,7 @@ import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; import org.dromara.safety.domain.vo.HazardRuleVo; import java.util.List; +import java.util.Set; /** * 隐患规则通知对象Service接口 @@ -31,6 +32,15 @@ public interface IHazardRuleNotifyObjectService extends IService queryVo(List objectList); + /** + * 根据规则查询所有通知对象id + * + * @param ruleId 规则id + * @param projectId 项目id + * @return 通知对象id + */ + Set queryNotifyObjectIds(Long ruleId, Long projectId); + /** * 补充数据 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java index dadeaba8..0f4158e7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -8,11 +8,14 @@ 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.safety.domain.HazardHiddenDanger; import org.dromara.safety.domain.HazardHiddenDangerRectify; import org.dromara.safety.domain.HazardRule; @@ -24,7 +27,9 @@ 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; @@ -32,6 +37,8 @@ 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业务层处理 @@ -39,6 +46,7 @@ import java.util.Map; * @author Lion Li * @date 2025-12-03 */ +@Slf4j @RequiredArgsConstructor @Service public class HazardHiddenDangerServiceImpl extends ServiceImpl @@ -50,6 +58,10 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl { + // 发送给整改人员 + String titleRectify = "您有新的安全隐患工单需要整改,请及时处理!"; + 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 = "您有新的安全隐患工单,请及时查看!"; + 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); + // 发送整改期限数据到消息队列 + }); 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 index 779f7e17..f5baf6ef 100644 --- 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 @@ -8,6 +8,7 @@ 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; @@ -18,9 +19,7 @@ import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysUserService; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -135,6 +134,52 @@ public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl 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; + } + /** * 补充数据 * 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 index 1fd75b8b..27a0def9 100644 --- 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 @@ -84,7 +84,7 @@ public class HazardRuleServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(HazardRule::getId); lqw.eq(bo.getProjectId() != null, HazardRule::getProjectId, bo.getProjectId()); - lqw.eq(StringUtils.isNotBlank(bo.getHazardLevel()), HazardRule::getHazardLevel, bo.getHazardLevel()); + 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()); 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/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 84807ca3..2c28c315 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -2107,15 +2107,15 @@ insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0', 'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, ''); - -CREATE TABLE `hazard_delay_task` +DROP TABLE IF EXISTS mq_delay_task; +CREATE TABLE `mq_delay_task` ( `id` BIGINT PRIMARY KEY COMMENT '主键', - `biz_type` VARCHAR(50) NOT NULL 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 '延迟任务表'; From 2884699ff261631194db17617ecbcfb957d63ab4 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 5 Dec 2025 18:53:33 +0800 Subject: [PATCH 50/73] bug --- .../impl/DeviceAccessRecordServiceImpl.java | 11 ++++++++ .../service/impl/DeviceInfoServiceImpl.java | 5 +++- .../service/impl/DeviceTypeServiceImpl.java | 1 + .../app/BusProjectTeamAppController.java | 28 +++++++++++++++++++ .../org/dromara/system/domain/SysRole.java | 5 ++++ .../dromara/system/domain/bo/SysRoleBo.java | 5 ++++ .../system/domain/vo/ProjectRolesItem.java | 1 + .../dromara/system/domain/vo/SysRoleVo.java | 5 ++++ .../resources/mapper/system/SysRoleMapper.xml | 3 +- 9 files changed, 62 insertions(+), 2 deletions(-) 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/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/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/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 From 0db70d3d7365fbd10a260f4f2ae174ca7f72b4e3 Mon Sep 17 00:00:00 2001 From: lg Date: Fri, 5 Dec 2025 18:54:36 +0800 Subject: [PATCH 51/73] =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mechanical/jxaqgl/domain/JxAqjcgl.java | 16 ++++++++++ .../jxaqgl/domain/bo/JxAqjcglBo.java | 16 ++++++++++ .../jxaqgl/domain/vo/JxAqjcglVo.java | 20 ++++++++++++ .../service/impl/JxAqjcglServiceImpl.java | 31 +++++++++++++++++++ .../mechanical/jxzgbh/domain/vo/JxFcxxVo.java | 13 ++++++++ .../service/impl/JxYhzgbhServiceImpl.java | 15 +++++++++ .../impl/XzdContractMachineryServiceImpl.java | 11 ++++++- 7 files changed, 121 insertions(+), 1 deletion(-) 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 index 4fd181d4..e2909aee 100644 --- 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 @@ -97,11 +97,27 @@ public class JxAqjcgl extends BaseEntity { */ private String riskGrade; + + /** + * 整改状态 + */ + private String abarbeitungState; + /** * 整改责任人 */ private Long abarbeitung; + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + /** * 整改日期 */ 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 index a3d4d15a..510a9425 100644 --- 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 @@ -57,6 +57,22 @@ public class JxAqjcglBo extends BaseEntity { */ private String participants; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + /** * 所属项目(如田东) */ 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 index 224e2f0d..73f1729b 100644 --- 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 @@ -71,6 +71,26 @@ public class JxAqjcglVo implements Serializable { @ExcelProperty(value = "检查人") private Long inspector; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 整改单位 + */ + private String rectificationName; /** * 检查人 */ 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 index ddbc94f0..ad85eb0c 100644 --- 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 @@ -1,9 +1,11 @@ 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; @@ -11,6 +13,8 @@ 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; @@ -25,6 +29,9 @@ 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; @@ -58,6 +65,12 @@ public class JxAqjcglServiceImpl extends ServiceImpl i private final SysOssServiceImpl sysOssService; + @Resource + private ISubContractorService contractorService; + + @Resource + private IBusProjectTeamService projectTeamService; + @Lazy @Autowired private IJxYhzgbhService jxYhzgbhService; @@ -82,6 +95,23 @@ public class JxAqjcglServiceImpl extends ServiceImpl i 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()); + } + } + } + + } } @@ -179,6 +209,7 @@ public class JxAqjcglServiceImpl extends ServiceImpl i 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("该数据已存在整改数据"); // 不通过转为整改数据 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 index f77c7a10..8eff49c5 100644 --- 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 @@ -1,5 +1,7 @@ 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; @@ -103,4 +105,15 @@ public class JxFcxxVo implements Serializable { 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/service/impl/JxYhzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java index 6c7f2818..1a3315fe 100644 --- 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 @@ -14,6 +14,7 @@ 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.jxzgbh.domain.JxFcxx; import org.dromara.mechanical.jxzgbh.domain.JxZgxx; @@ -53,6 +54,8 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i private final IJxAqjcglWtxqService jxAqjcglWtxqService; + private final IJxAqjcglService jxAqjcglService; + /** * 查询机械隐患整改与闭环 * @@ -98,6 +101,7 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i 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); } @@ -200,6 +204,11 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i @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); // 将状态修改为已整改 @@ -210,8 +219,14 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i @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())); 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; } From 70c9997c823a65696fd8c7253dddca481af8ebc0 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 5 Dec 2025 19:53:34 +0800 Subject: [PATCH 52/73] =?UTF-8?q?=E6=8E=A5=E5=85=A5=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=98=9F=E5=88=97=EF=BC=8C=E5=A4=84=E7=90=86=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 11 ++ .../src/main/resources/application-local.yml | 11 ++ .../src/main/resources/application-prod.yml | 11 ++ .../src/main/resources/application.yml | 8 +- .../ruoyi-modules/ruoyi-system/pom.xml | 4 + .../dromara/rabbitmq/config/RabbitConfig.java | 57 +++++++++ .../rabbitmq/config/RabbitProperties.java | 60 +++++++++ .../rabbitmq/config/RabbitTtlQueueConfig.java | 75 ++++++++++++ .../rabbitmq/consumer/RabbitConsumer.java | 65 ++++++++++ .../dromara/rabbitmq/domain/MqDelayTask.java | 66 ++++++++++ .../rabbitmq/domain/vo/MqDelayTaskVo.java | 76 ++++++++++++ .../rabbitmq/enums/MqDelayTaskTypeEnum.java | 35 ++++++ .../rabbitmq/mapper/MqDelayTaskMapper.java | 15 +++ .../rabbitmq/producer/RabbitProducer.java | 51 ++++++++ .../rabbitmq/service/IMqDelayTaskService.java | 27 +++++ .../service/impl/MqDelayTaskServiceImpl.java | 114 ++++++++++++++++++ .../IHazardHiddenDangerRectifyService.java | 7 ++ .../HazardHiddenDangerRectifyServiceImpl.java | 55 +++++++++ .../impl/HazardHiddenDangerServiceImpl.java | 19 ++- .../service/impl/HazardRuleServiceImpl.java | 13 ++ .../mapper/rabbitmq/MqDelayTaskMapper.xml | 7 ++ 21 files changed, 784 insertions(+), 3 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitConfig.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitProperties.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitTtlQueueConfig.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/consumer/RabbitConsumer.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/MqDelayTask.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/vo/MqDelayTaskVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/enums/MqDelayTaskTypeEnum.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/mapper/MqDelayTaskMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml 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 84e30e7e..87e8a97c 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名称) 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/rabbitmq/config/RabbitConfig.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitConfig.java new file mode 100644 index 00000000..c5761106 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitConfig.java @@ -0,0 +1,57 @@ +package org.dromara.rabbitmq.config; + +import jakarta.annotation.Resource; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author xbhog + */ +@Configuration +public class RabbitConfig { + + @Resource + private RabbitProperties rabbitProperties; + + /** + * 创建交换机 + * ExchangeBuilder有四种交换机模式 + * Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。 + * Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。 + * Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。 + * Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。 + * durable 交换器是否持久化(false 不持久化,true 持久化) + **/ + @Bean + public TopicExchange exchange() { + return new TopicExchange(rabbitProperties.getExchangeName()); + } + + /** + * 创建队列 + * durable 队列是否持久化 队列调用此方法就是持久化 可查看方法的源码 + * deliveryMode 消息是否持久化(1 不持久化,2 持久化) + **/ + @Bean + public Queue queue() { + return new Queue(rabbitProperties.getQueueName(), false); + } + + /** + * 绑定交换机和队列 + * bing 方法参数可以是队列和交换机 + * to 方法参数必须是交换机 + * with 方法参数是路由Key 这里是以rabbit.开头 + * noargs 就是不要参数的意思 + * 这个方法的意思是把rabbit开头的消息 和 上面的队列 和 上面的交换机绑定 + **/ + @Bean + public Binding binding(Queue queue, TopicExchange exchange) { + return BindingBuilder.bind(queue).to(exchange).with(rabbitProperties.getRoutingKey()); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitProperties.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitProperties.java new file mode 100644 index 00000000..868667df --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitProperties.java @@ -0,0 +1,60 @@ +package org.dromara.rabbitmq.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @author lilemy + * @date 2025-12-05 16:25 + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "rabbitmq") +public class RabbitProperties { + + /** + * 交换机名称 + */ + private String exchangeName; + + /** + * 队列名称 + */ + private String queueName; + + /** + * 路由键名称 + */ + private String routingKey; + + /** + * 延迟交换机名称 + */ + private String delayExchangeName; + + /** + * 延迟队列名称 + */ + private String delayQueueName; + + /** + * 延迟路由键名称 + */ + private String delayRoutingKey; + + /** + * 死信交换机名称 + */ + private String deadLetterExchange; + + /** + * 死信队列名称 + */ + private String deadLetterQueue; + + /** + * 死信路由键名称 + */ + private String deadLetterRoutingKey; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitTtlQueueConfig.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitTtlQueueConfig.java new file mode 100644 index 00000000..94abf3cb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/config/RabbitTtlQueueConfig.java @@ -0,0 +1,75 @@ +package org.dromara.rabbitmq.config; + +import jakarta.annotation.Resource; +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + + +/** + * RabbitTTL队列 + * + * @author xbhog + */ +@Configuration +public class RabbitTtlQueueConfig { + + @Resource + private RabbitProperties rabbitProperties; + + /** + * 声明延迟队列 + */ + @Bean + public Queue delayQueue() { + return QueueBuilder.durable(rabbitProperties.getDelayQueueName()) + .deadLetterExchange(rabbitProperties.getDeadLetterExchange()) + .deadLetterRoutingKey(rabbitProperties.getDeadLetterRoutingKey()) + .build(); + } + + /** + * 声明延迟交换机 + */ + @Bean + public CustomExchange delayExchange() { + return new CustomExchange(rabbitProperties.getDelayExchangeName(), "x-delayed-message", + true, false, Map.of("x-delayed-type", "direct")); + } + + /** + * 将延迟队列绑定到延迟交换机 + */ + @Bean + public Binding delayBinding(Queue delayQueue, CustomExchange delayExchange) { + return BindingBuilder.bind(delayQueue).to(delayExchange).with(rabbitProperties.getDelayRoutingKey()).noargs(); + } + + /** + * 声明死信队列 + */ + @Bean + public Queue deadLetterQueue() { + return new Queue(rabbitProperties.getDeadLetterQueue()); + } + + /** + * 声明死信交换机 + */ + @Bean + public DirectExchange deadLetterExchange() { + return new DirectExchange(rabbitProperties.getDeadLetterExchange()); + } + + /** + * 将死信队列绑定到死信交换机 + */ + @Bean + public Binding deadLetterBinding(Queue deadLetterQueue, DirectExchange deadLetterExchange) { + return BindingBuilder.bind(deadLetterQueue).to(deadLetterExchange).with(rabbitProperties.getDeadLetterRoutingKey()); + } + +} + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/consumer/RabbitConsumer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/consumer/RabbitConsumer.java new file mode 100644 index 00000000..1f1b5bd1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/consumer/RabbitConsumer.java @@ -0,0 +1,65 @@ +package org.dromara.rabbitmq.consumer; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +/** + * @author lilemy + * @date 2025-12-05 14:09 + */ +@Slf4j +@Component +public class RabbitConsumer { + + @Resource + private IMqDelayTaskService mqDelayTaskService; + + /** + * 普通消息 + */ + @RabbitListener(queues = "${rabbitmq.queue-name}") + public void listenQueue(Message message) { + log.info("【消费者】Start consuming data:{}", new String(message.getBody())); + } + + /** + * 处理延迟队列消息 + */ + @RabbitListener(queues = "${rabbitmq.delay-queue-name}") + public void receiveDelayMessage(String message) { + log.info("【消费者】Received delayed message:{}", message); + if (StringUtils.isNotBlank(message) && isLong(message)) { + mqDelayTaskService.executeTask(Long.parseLong(message)); + } + } + + /** + * 处理死信队列消息 + * 当消息在延迟队列中未能被正确处理(例如因消费者逻辑错误、超时未ACK等原因) + * 它会被自动转发到死信队列中,以便后续的特殊处理或重新尝试。 + */ + @RabbitListener(queues = "${rabbitmq.dead-letter-queue}") + public void receiveDeadMessage(String message) { + log.info("【消费者】Received dead message:{}", message); + } + + /** + * 判断字符串是否为Long + * + * @param str 字符串 + * @return 是否为Long + */ + private static boolean isLong(String str) { + try { + Long.parseLong(str); + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/MqDelayTask.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/MqDelayTask.java new file mode 100644 index 00000000..3a7499ba --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/MqDelayTask.java @@ -0,0 +1,66 @@ +package org.dromara.rabbitmq.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 延迟任务对象 mq_delay_task + * + * @author lilemy + * @date 2025-12-05 + */ +@Data +@TableName("mq_delay_task") +public class MqDelayTask implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 业务类型 + */ + private String bizType; + + /** + * 业务ID + */ + private Long bizId; + + /** + * 执行的时间点 + */ + private LocalDateTime executeTime; + + /** + * 任务状态 0未执行 1执行中 2执行成功 3执行失败 + */ + private Integer status; + + /** + * 重试次数 + */ + private Integer retryCount; + + /** + * 最大重试次数 + */ + private Integer maxRetry; + + /** + * 失败原因 + */ + private String failReason; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/vo/MqDelayTaskVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/vo/MqDelayTaskVo.java new file mode 100644 index 00000000..99287526 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/domain/vo/MqDelayTaskVo.java @@ -0,0 +1,76 @@ +package org.dromara.rabbitmq.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.rabbitmq.domain.MqDelayTask; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + + +/** + * 延迟任务视图对象 mq_delay_task + * + * @author lilemy + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = MqDelayTask.class) +public class MqDelayTaskVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 业务类型 + */ + @ExcelProperty(value = "业务类型") + private String bizType; + + /** + * 业务ID + */ + @ExcelProperty(value = "业务ID") + private Long bizId; + + /** + * 执行的时间点 + */ + @ExcelProperty(value = "执行的时间点") + private LocalDateTime executeTime; + + /** + * 任务状态 0未执行 1执行中 2执行成功 3执行失败 + */ + @ExcelProperty(value = "任务状态 0未执行 1执行中 2执行成功 3执行失败") + private Integer status; + + /** + * 重试次数 + */ + @ExcelProperty(value = "重试次数") + private Integer retryCount; + + /** + * 最大重试次数 + */ + @ExcelProperty(value = "最大重试次数") + private Integer maxRetry; + + /** + * 失败原因 + */ + @ExcelProperty(value = "失败原因") + private String failReason; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/enums/MqDelayTaskTypeEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/enums/MqDelayTaskTypeEnum.java new file mode 100644 index 00000000..c7e7fc67 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/enums/MqDelayTaskTypeEnum.java @@ -0,0 +1,35 @@ +package org.dromara.rabbitmq.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author lilemy + * @date 2025-12-05 18:26 + */ +@Getter +@AllArgsConstructor +public enum MqDelayTaskTypeEnum { + + /** + * 安全隐患 + */ + HIDDEN_DANGER("aqyh"); + + private final String type; + + /** + * 根据业务类型获取枚举 + * + * @param type 业务类型 + * @return 枚举 + */ + public static MqDelayTaskTypeEnum getByType(String type) { + for (MqDelayTaskTypeEnum value : values()) { + if (value.getType().equals(type)) { + return value; + } + } + return null; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/mapper/MqDelayTaskMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/mapper/MqDelayTaskMapper.java new file mode 100644 index 00000000..b817c06c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/mapper/MqDelayTaskMapper.java @@ -0,0 +1,15 @@ +package org.dromara.rabbitmq.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.domain.vo.MqDelayTaskVo; + +/** + * 延迟任务Mapper接口 + * + * @author lilemy + * @date 2025-12-05 + */ +public interface MqDelayTaskMapper extends BaseMapperPlus { + +} 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/service/IHazardHiddenDangerRectifyService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java index 45a4eb06..96adfbe0 100644 --- 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 @@ -87,4 +87,11 @@ public interface IHazardHiddenDangerRectifyService extends IService 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/impl/HazardHiddenDangerRectifyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java index c3e345a4..8bd887dd 100644 --- 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 @@ -5,12 +5,15 @@ 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; @@ -24,6 +27,8 @@ 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; @@ -32,6 +37,7 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; /** * 隐患整改情况Service业务层处理 @@ -39,6 +45,7 @@ import java.util.Map; * @author lilemy * @date 2025-12-04 */ +@Slf4j @RequiredArgsConstructor @Service public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl @@ -46,6 +53,10 @@ public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl 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 index 0f4158e7..4152b2c0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -16,6 +16,9 @@ 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; @@ -62,6 +65,8 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl { // 发送给整改人员 - String titleRectify = "您有新的安全隐患工单需要整改,请及时处理!"; + String titleRectify = "您有新的安全隐患工单[" + dangerCode + "]需要整改,请及时处理!"; try { chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); SseMessageUtils.sendMessage(rectifyUserId, titleRectify); @@ -270,7 +276,7 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hazardHiddenDanger.getDangerLevelId(), projectId); SseMessageDto sseDto = new SseMessageDto(); - String title = "您有新的安全隐患工单,请及时查看!"; + String title = "您有新的安全隐患工单[" + dangerCode + "],请及时查看!"; for (Long userId : userIds) { try { chatServerHandler.sendSystemMessageToUser(userId, title, "2"); @@ -285,6 +291,15 @@ public class HazardHiddenDangerServiceImpl extends ServiceImpl 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/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 @@ + + + + + From 930bff6cba6c21a359683a2cd47324a5cf107800 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 5 Dec 2025 20:10:13 +0800 Subject: [PATCH 53/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BA=8B=E6=95=85?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HseSafetySgzgbhController.java | 87 ++++++++--- .../accident/domain/HseSafetySgdanjl.java | 5 + .../accident/domain/HseSafetySgzgbh.java | 5 + .../safety/accident/domain/HseSafetyZgxx.java | 4 - .../domain/bo/HseSafetySgdanjlBo.java | 6 + .../domain/bo/HseSafetySgdcxqReq.java | 69 +++++++++ .../domain/bo/HseSafetySgssqkReq.java | 49 ++++++ .../accident/domain/bo/HseSafetySgxqReq.java | 40 +++++ .../accident/domain/bo/HseSafetySgzgbhBo.java | 6 + .../domain/bo/HseSafetySgzgfcxqReq.java | 40 +++++ .../accident/domain/bo/HseSafetyZgxxBo.java | 4 - .../domain/vo/HseSafetySgdanjlVo.java | 6 + .../domain/vo/HseSafetySgzgbhHeadVo.java | 30 ++++ .../accident/domain/vo/HseSafetySgzgbhVo.java | 13 +- .../accident/domain/vo/HseSafetyZgxxVo.java | 10 +- .../safety/accident/menu/SGStatusEnum.java | 81 ++++++++++ .../service/IHseSafetyFcxxService.java | 7 + .../service/IHseSafetySgzgbhService.java | 26 ++++ .../service/IHseSafetyZgxxService.java | 7 + .../impl/HseSafetyFcxxServiceImpl.java | 5 + .../impl/HseSafetySgzgbhServiceImpl.java | 139 +++++++++++++++++- .../impl/HseSafetyZgxxServiceImpl.java | 21 ++- 22 files changed, 619 insertions(+), 41 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java 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 index 23649e52..ad30bb8e 100644 --- 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 @@ -6,6 +6,11 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.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; @@ -36,6 +41,14 @@ 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)); + } /** * 查询安全-事故整改闭环列表 */ @@ -48,13 +61,13 @@ public class HseSafetySgzgbhController extends BaseController { /** * 导出安全-事故整改闭环列表 */ - @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); - } +// @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); +// } /** * 获取安全-事故整改闭环详细信息 @@ -71,35 +84,61 @@ public class HseSafetySgzgbhController extends BaseController { /** * 新增安全-事故整改闭环 */ +// @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() - public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgzgbhBo bo) { - return toAjax(hseSafetySgzgbhService.insertByBo(bo)); + @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)); - } +// @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)); - } +// @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/HseSafetySgdanjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java index 7a192032..47dc66f3 100644 --- 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 @@ -74,6 +74,11 @@ public class HseSafetySgdanjl extends BaseEntity { */ private String sgxq; + /** + * 损失情况 + */ + private String ssqk; + /** * 调查详情 */ 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 index 839bd331..a37478c1 100644 --- 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 @@ -39,6 +39,11 @@ public class HseSafetySgzgbh extends BaseEntity { */ private Long projectId; + /** + * 事故id + */ + private Long sgId; + /** * 事故编号 */ 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 index 38bcc51c..d3507dd9 100644 --- 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 @@ -64,10 +64,6 @@ public class HseSafetyZgxx extends BaseEntity { */ private String fileId; - /** - * 顺序 - */ - private Long sort; /** * pdf文件(多个文件逗号分隔) 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 index 9d04cc9a..7a079d5d 100644 --- 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 @@ -73,6 +73,12 @@ public class HseSafetySgdanjlBo extends BaseEntity { */ private String sgxq; + + /** + * 损失情况 + */ + private String ssqk; + /** * 调查详情 */ 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/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 index b77896a7..449f7e23 100644 --- 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 @@ -38,6 +38,12 @@ public class HseSafetySgzgbhBo extends BaseEntity { */ private Long projectId; + + /** + * 事故id + */ + private Long sgId; + /** * 事故编号 */ 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 index a1d07c82..0a41e7a4 100644 --- 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 @@ -69,10 +69,6 @@ public class HseSafetyZgxxBo extends BaseEntity { */ private String fileId; - /** - * 顺序 - */ - private Long sort; /** * pdf文件(多个文件逗号分隔) 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 index 48adfbf9..1d87e90d 100644 --- 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 @@ -90,6 +90,12 @@ public class HseSafetySgdanjlVo implements Serializable { @ExcelProperty(value = "事故详情") private String sgxq; + + /** + * 损失情况 + */ + private String ssqk; + /** * 调查详情 */ 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 index 61e7d4b7..cf7dea04 100644 --- 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 @@ -13,7 +13,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -48,6 +48,11 @@ public class HseSafetySgzgbhVo implements Serializable { @ExcelProperty(value = "关联项目") private Long projectId; + /** + * 事故id + */ + private Long sgId; + /** * 事故编号 */ @@ -139,4 +144,10 @@ public class HseSafetySgzgbhVo implements Serializable { private String shzt; + /** + * 整改与复查记录 + */ + private List zgxxVos; + + } 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 index 7661d833..eb3e1c99 100644 --- 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 @@ -79,11 +79,6 @@ public class HseSafetyZgxxVo implements Serializable { @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String fileId; - /** - * 顺序 - */ - @ExcelProperty(value = "顺序") - private Long sort; /** * pdf文件(多个文件逗号分隔) @@ -92,5 +87,10 @@ public class HseSafetyZgxxVo implements Serializable { @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String pdfId; + /** + * 关联复查信息 + */ + private HseSafetyFcxxVo fcxxVo; + } 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 index 71f0f068..c8ca83b9 100644 --- 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 @@ -67,4 +67,11 @@ public interface IHseSafetyFcxxService extends IService{ * @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/IHseSafetySgzgbhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java index b03abfac..b4a9a910 100644 --- 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 @@ -1,5 +1,9 @@ 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; @@ -67,4 +71,26 @@ public interface IHseSafetySgzgbhService extends IService{ * @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 index 205fa5b1..95277a7f 100644 --- 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 @@ -67,4 +67,11 @@ public interface IHseSafetyZgxxService extends IService{ * @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 index ab9f1518..eec03625 100644 --- 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 @@ -137,4 +137,9 @@ public class HseSafetyFcxxServiceImpl extends ServiceImpl 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/HseSafetySgzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java index fdbf756c..752053ab 100644 --- 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 @@ -1,6 +1,8 @@ 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; @@ -9,13 +11,28 @@ 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.dromara.safety.accident.service.IHseSafetySgzgbhService; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.Collection; @@ -31,6 +48,19 @@ import java.util.Collection; 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; /** * 查询安全-事故整改闭环 @@ -40,7 +70,14 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl zgxxVos =zgxxService.getZGBGInfoVoByIdList(vo.getId()); + if(!zgxxVos.isEmpty()){ + vo.setZgxxVos(zgxxVos); + } + } + return vo; } /** @@ -144,4 +181,102 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl 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 index 53a9769d..8a1572b0 100644 --- 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 @@ -1,6 +1,7 @@ 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; @@ -9,6 +10,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.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; @@ -32,6 +36,10 @@ public class HseSafetyZgxxServiceImpl extends ServiceImpl 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; + } } From 2486bb4c6ee42e166bccbb798ab8313358e349b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Fri, 5 Dec 2025 20:47:10 +0800 Subject: [PATCH 54/73] =?UTF-8?q?12-05-=E4=BA=8B=E6=95=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BA=8B=E6=95=85=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HseSafetySgsbController.java | 42 +++-- .../safety/accident/domain/HseSafetySgdc.java | 12 +- .../safety/accident/domain/HseSafetySgsb.java | 13 +- .../accident/domain/HseSafetySgzgbh.java | 17 +- .../accident/domain/bo/HseSafetySgdcBo.java | 15 +- .../accident/domain/bo/HseSafetySgsbBo.java | 16 +- .../accident/domain/bo/HseSafetySgzgbhBo.java | 20 +- .../accident/domain/vo/HseSafetySgdcVo.java | 10 +- .../accident/domain/vo/HseSafetySgsbVo.java | 16 +- .../accident/domain/vo/HseSafetySgzgbhVo.java | 14 +- .../accident/domain/vo/SgsbCountVo.java | 30 +++ .../service/IHseSafetySgsbService.java | 20 +- .../impl/HseSafetySgsbServiceImpl.java | 173 +++++++++++++++++- 13 files changed, 316 insertions(+), 82 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java 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 index 2637f288..f8fc286b 100644 --- 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 @@ -1,26 +1,28 @@ 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 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.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; -import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; -import org.dromara.safety.accident.service.IHseSafetySgsbService; +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; /** * 安全-事故上报 @@ -102,4 +104,14 @@ public class HseSafetySgsbController extends BaseController { @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/domain/HseSafetySgdc.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java index 3c016e9b..e41906a7 100644 --- 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 @@ -1,13 +1,13 @@ package org.dromara.safety.accident.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; +import java.util.Date; /** * 安全-事故调查对象 hse_safety_sgdc @@ -154,5 +154,9 @@ public class HseSafetySgdc extends BaseEntity { */ 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 index d659414d..18496754 100644 --- 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 @@ -1,13 +1,14 @@ package org.dromara.safety.accident.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; /** * 安全-事故上报对象 hse_safety_sgsb @@ -82,7 +83,7 @@ public class HseSafetySgsb extends BaseEntity { /** * 初步估算(万元-角分) */ - private Long cbgs; + private BigDecimal cbgs; /** * 事故原因 @@ -120,7 +121,7 @@ public class HseSafetySgsb extends BaseEntity { 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 index a37478c1..b3e96557 100644 --- 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 @@ -1,13 +1,13 @@ package org.dromara.safety.accident.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; +import java.util.Date; /** * 安全-事故整改闭环对象 hse_safety_sgzgbh @@ -119,5 +119,14 @@ public class HseSafetySgzgbh extends BaseEntity { */ 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/HseSafetySgdcBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java index 764b0b85..aefa6543 100644 --- 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 @@ -1,15 +1,14 @@ package org.dromara.safety.accident.domain.bo; -import org.dromara.safety.accident.domain.HseSafetySgdc; -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.safety.accident.domain.HseSafetySgdc; + import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 安全-事故调查业务对象 hse_safety_sgdc @@ -153,5 +152,9 @@ public class HseSafetySgdcBo extends BaseEntity { */ 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/HseSafetySgsbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java index 9c618a33..83ac1042 100644 --- 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 @@ -1,15 +1,15 @@ package org.dromara.safety.accident.domain.bo; -import org.dromara.safety.accident.domain.HseSafetySgsb; -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.safety.accident.domain.HseSafetySgsb; + +import java.math.BigDecimal; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 安全-事故上报业务对象 hse_safety_sgsb @@ -81,7 +81,7 @@ public class HseSafetySgsbBo extends BaseEntity { /** * 初步估算(万元-角分) */ - private Long cbgs; + private BigDecimal cbgs; /** * 事故原因 @@ -119,7 +119,7 @@ public class HseSafetySgsbBo extends BaseEntity { private String shzt; /** - * 事故状态(待上报,已上报,待调查,待整改,已整改,需整改,已闭环) + * 事故状态(已上报,待调查,待整改,已整改,,已闭环) */ private String sgzt; 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 index 449f7e23..903f3c82 100644 --- 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 @@ -1,15 +1,14 @@ package org.dromara.safety.accident.domain.bo; -import org.dromara.safety.accident.domain.HseSafetySgzgbh; -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.safety.accident.domain.HseSafetySgzgbh; + import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 安全-事故整改闭环业务对象 hse_safety_sgzgbh @@ -119,5 +118,14 @@ public class HseSafetySgzgbhBo extends BaseEntity { */ 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/vo/HseSafetySgdcVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java index 8361b8b1..ecb09e33 100644 --- 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 @@ -1,14 +1,10 @@ package org.dromara.safety.accident.domain.vo; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.safety.accident.domain.HseSafetySgdc; 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.safety.accident.domain.HseSafetySgdc; import java.io.Serial; import java.io.Serializable; @@ -186,5 +182,9 @@ public class HseSafetySgdcVo implements Serializable { @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 index 7e619ecd..bdf61821 100644 --- 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 @@ -1,17 +1,14 @@ package org.dromara.safety.accident.domain.vo; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.safety.accident.domain.HseSafetySgsb; 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.safety.accident.domain.HseSafetySgsb; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @@ -100,7 +97,7 @@ public class HseSafetySgsbVo implements Serializable { * 初步估算(万元-角分) */ @ExcelProperty(value = "初步估算(万元-角分)") - private Long cbgs; + private BigDecimal cbgs; /** * 事故原因 @@ -126,6 +123,11 @@ public class HseSafetySgsbVo implements Serializable { @ExcelProperty(value = "接收人") private Long jsr; + /** + * 接收人名称 + */ + private String jsrmc; + /** * 紧急措施 */ @@ -147,7 +149,7 @@ public class HseSafetySgsbVo implements Serializable { /** * 事故状态(待上报,已上报,待调查,待整改,已整改,需整改,已闭环) */ - @ExcelProperty(value = "事故状态(待上报,已上报,待调查,待整改,已整改,需整改,已闭环)") + @ExcelProperty(value = "事故状态(已上报,待调查,待整改,已整改,,已闭环)") private String sgzt; 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 index cf7dea04..b1d087ff 100644 --- 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 @@ -1,14 +1,10 @@ package org.dromara.safety.accident.domain.vo; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.safety.accident.domain.HseSafetySgzgbh; 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.safety.accident.domain.HseSafetySgzgbh; import java.io.Serial; import java.io.Serializable; @@ -143,11 +139,19 @@ public class HseSafetySgzgbhVo implements Serializable { @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/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/service/IHseSafetySgsbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java index 87a3803a..ed332757 100644 --- 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 @@ -1,12 +1,13 @@ package org.dromara.safety.accident.service; -import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; -import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; -import org.dromara.safety.accident.domain.HseSafetySgsb; -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.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; @@ -67,4 +68,11 @@ public interface IHseSafetySgsbService extends IService{ * @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/impl/HseSafetySgsbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java index 9fff10dc..c6430c38 100644 --- 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 @@ -1,24 +1,39 @@ 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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; +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.HseSafetySgsb; +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; -import java.util.Collection; /** * 安全-事故上报Service业务层处理 @@ -31,6 +46,14 @@ import java.util.Collection; 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; /** * 查询安全-事故上报 @@ -40,7 +63,14 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl hseSafetySgsbVo1 = List.of(hseSafetySgsbVo); + setValue(hseSafetySgsbVo1); + return hseSafetySgsbVo1.getFirst(); + }else { + return null; + } } /** @@ -54,6 +84,7 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl queryPageList(HseSafetySgsbBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + setValue(result.getRecords()); return TableDataInfo.build(result); } @@ -104,11 +135,14 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); } + addDcxx( bo); return flag; } @@ -146,4 +180,123 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl 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); + } + } + } From a6dc40760d22f7f23499cff99bfd8970ce313869 Mon Sep 17 00:00:00 2001 From: zt Date: Sat, 6 Dec 2025 14:22:07 +0800 Subject: [PATCH 55/73] =?UTF-8?q?=E5=8D=B1=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HseDangerousEngineeringController.java | 105 ++++++++ .../controller/HseSpecialPlanController.java | 105 ++++++++ .../domain/HseDangerousEngineering.java | 113 +++++++++ .../dromara/safety/domain/HseSpecialPlan.java | 193 ++++++++++++++ .../domain/bo/HseDangerousEngineeringBo.java | 112 +++++++++ .../safety/domain/bo/HseSpecialPlanBo.java | 196 +++++++++++++++ .../domain/vo/HseDangerousEngineeringVo.java | 136 ++++++++++ .../safety/domain/vo/HseSpecialPlanVo.java | 235 ++++++++++++++++++ .../mapper/HseDangerousEngineeringMapper.java | 15 ++ .../safety/mapper/HseSpecialPlanMapper.java | 15 ++ .../IHseDangerousEngineeringService.java | 70 ++++++ .../service/IHseSpecialPlanService.java | 70 ++++++ .../HseDangerousEngineeringServiceImpl.java | 146 +++++++++++ .../impl/HseSpecialPlanServiceImpl.java | 162 ++++++++++++ .../safety/HseDangerousEngineeringMapper.xml | 7 + .../mapper/safety/HseSpecialPlanMapper.xml | 7 + 16 files changed, 1687 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml 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..de1a097e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java @@ -0,0 +1,105 @@ +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.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)); + } +} 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..476d6831 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java @@ -0,0 +1,105 @@ +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.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)); + } +} 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/HseSpecialPlan.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java new file mode 100644 index 00000000..318d43b6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java @@ -0,0 +1,193 @@ +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; + + /** + * 专家结论附件路径 + */ + private String expertFile; + + /** + * 论证结论 + */ + private String argumentConclusion; + + /** + * 论证日期 + */ + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + private Long needSupervision; + + /** + * 旁站监理单位 + */ + private String supervisionUnit; + + /** + * 旁站监理人 + */ + private String supervisor; + + /** + * 旁站实际开始时间 + */ + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + 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/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..b8f98bc9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java @@ -0,0 +1,112 @@ +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.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 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/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/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..e385c69c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java @@ -0,0 +1,136 @@ +package org.dromara.safety.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +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; + + /** + * 作业内容 + */ + @ExcelProperty(value = "作业内容") + private String workType; + + /** + * 施工开始时间 + */ + @ExcelProperty(value = "施工开始时间") + private Date startTime; + + /** + * 预计完成时间 + */ + @ExcelProperty(value = "预计完成时间") + private Date 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/HseSpecialPlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java new file mode 100644 index 00000000..680986a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java @@ -0,0 +1,235 @@ +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.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/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/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/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/IHseSpecialPlanService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java new file mode 100644 index 00000000..48470332 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +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 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); +} 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/HseSpecialPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java new file mode 100644 index 00000000..387fe542 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java @@ -0,0 +1,162 @@ +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.HseSpecialPlanBo; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.domain.HseSpecialPlan; +import org.dromara.safety.mapper.HseSpecialPlanMapper; +import org.dromara.safety.service.IHseSpecialPlanService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 危大工程专项施工方案Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseSpecialPlanServiceImpl 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); + 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){ + //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/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/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 @@ + + + + + From 35d1cfc66807695dab6ef2845a9c908344fef8d7 Mon Sep 17 00:00:00 2001 From: zt Date: Sat, 6 Dec 2025 18:39:35 +0800 Subject: [PATCH 56/73] =?UTF-8?q?=E5=8D=B1=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusProjectTeamController.java | 8 + .../projectteam/BusProjectTeamQueryReq.java | 5 + .../impl/BusProjectTeamServiceImpl.java | 2 + .../HseDangerArchiveController.java | 105 ++++++++++++ .../HseDangerousEngineeringController.java | 14 +- .../controller/HseSpecialPlanController.java | 12 +- .../safety/domain/HseDangerArchive.java | 132 ++++++++++++++ .../dromara/safety/domain/HseSpecialPlan.java | 10 ++ .../safety/domain/bo/HseDangerArchiveBo.java | 132 ++++++++++++++ .../domain/bo/HseDangerousEngineeringBo.java | 6 +- .../safety/domain/vo/HseDangerArchiveVo.java | 162 ++++++++++++++++++ .../domain/vo/HseDangerousEngineeringVo.java | 11 +- .../domain/vo/HseSpecialPlanCountVo.java | 47 +++++ .../safety/domain/vo/HseSpecialPlanVo.java | 2 + .../safety/mapper/HseDangerArchiveMapper.java | 15 ++ .../service/IHseDangerArchiveService.java | 70 ++++++++ .../service/IHseSpecialPlanService.java | 8 + .../impl/HseDangerArchiveServiceImpl.java | 149 ++++++++++++++++ .../impl/HseSpecialPlanServiceImpl.java | 25 ++- .../mapper/safety/HseDangerArchiveMapper.xml | 7 + 20 files changed, 915 insertions(+), 7 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java index 3be7f38b..f9fa5bba 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java @@ -173,4 +173,12 @@ public class BusProjectTeamController extends BaseController { return R.ok(contractorService.queryList(req)); } + /** + * 查询分包单位下的班组列表 + */ + @GetMapping("/teamList") + public R> teamList(BusProjectTeamQueryReq req) { + return R.ok(busProjectTeamService.queryList(req)); + } + } 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 list(HseDangerArchiveBo bo, PageQuery pageQuery) { + return hseDangerArchiveService.queryPageList(bo, pageQuery); + } + + /** + * 导出危大工程档案列表 + */ + @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 index de1a097e..349b73f9 100644 --- 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 @@ -1,7 +1,9 @@ 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.*; @@ -61,7 +63,7 @@ public class HseDangerousEngineeringController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("safety:dangerousEngineering:query") +// @SaCheckPermission("safety:dangerousEngineering:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -102,4 +104,14 @@ public class HseDangerousEngineeringController extends BaseController { @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/HseSpecialPlanController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java index 476d6831..6712552a 100644 --- 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 @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -61,7 +62,7 @@ public class HseSpecialPlanController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("safety:specialPlan:query") +// @SaCheckPermission("safety:specialPlan:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -102,4 +103,13 @@ public class HseSpecialPlanController extends BaseController { @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/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/HseSpecialPlan.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java index 318d43b6..d34f15b2 100644 --- 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 @@ -107,21 +107,25 @@ public class HseSpecialPlan extends BaseEntity { /** * 专家结论附件路径 */ + @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; /** @@ -132,26 +136,31 @@ public class HseSpecialPlan extends BaseEntity { /** * 旁站监理单位 */ + @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; /** @@ -162,6 +171,7 @@ public class HseSpecialPlan extends BaseEntity { /** * 关联应急预案编号 */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) private String emergencyPlanNo; /** 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 index b8f98bc9..7d252892 100644 --- 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 @@ -8,6 +8,8 @@ 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; @@ -51,12 +53,12 @@ public class HseDangerousEngineeringBo extends BaseEntity { /** * 施工开始时间 */ - private Date startTime; + private LocalDate startTime; /** * 预计完成时间 */ - private Date endTime; + private LocalDate endTime; /** * 作业地点 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 index e385c69c..87b8bfb2 100644 --- 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 @@ -1,7 +1,10 @@ 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; @@ -54,6 +57,10 @@ public class HseDangerousEngineeringVo implements Serializable { @ExcelProperty(value = "风险等级") private String riskLevel; + + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "riskLevel",other = "danger_risk_level") + private String riskLevelName; + /** * 作业内容 */ @@ -64,13 +71,13 @@ public class HseDangerousEngineeringVo implements Serializable { * 施工开始时间 */ @ExcelProperty(value = "施工开始时间") - private Date startTime; + private LocalDate startTime; /** * 预计完成时间 */ @ExcelProperty(value = "预计完成时间") - private Date endTime; + private LocalDate endTime; /** * 作业地点 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 index 680986a1..2a7730ae 100644 --- 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 @@ -10,6 +10,8 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.Date; 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/service/IHseDangerArchiveService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java new file mode 100644 index 00000000..891bc1f1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java @@ -0,0 +1,70 @@ +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 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); +} 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 index 48470332..76ad5ee7 100644 --- 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 @@ -1,5 +1,6 @@ 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; @@ -7,6 +8,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.springframework.web.bind.annotation.PathVariable; + import java.util.Collection; import java.util.List; @@ -67,4 +70,9 @@ public interface IHseSpecialPlanService extends IService{ * @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/HseDangerArchiveServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java new file mode 100644 index 00000000..7be66158 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java @@ -0,0 +1,149 @@ +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.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; + + /** + * 查询危大工程档案 + * + * @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; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java index 387fe542..c7ea3b51 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java @@ -1,6 +1,9 @@ package org.dromara.safety.service.impl; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.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,6 +12,8 @@ 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.HseSpecialPlanCountVo; +import org.dromara.safety.service.IHseDangerousEngineeringService; import org.springframework.stereotype.Service; import org.dromara.safety.domain.bo.HseSpecialPlanBo; import org.dromara.safety.domain.vo.HseSpecialPlanVo; @@ -33,6 +38,7 @@ public class HseSpecialPlanServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -142,7 +151,11 @@ public class HseSpecialPlanServiceImpl extends ServiceImpl 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/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 @@ + + + + + From 0f1ad34342f61536f6c845bb454bedecf2b40ab7 Mon Sep 17 00:00:00 2001 From: lg Date: Sat, 6 Dec 2025 19:07:28 +0800 Subject: [PATCH 57/73] =?UTF-8?q?=E5=8D=B1=E5=A4=A7=E5=B7=A5=E7=A8=8B-?= =?UTF-8?q?=E6=8A=80=E6=9C=AF=E4=BA=A4=E5=BA=95=EF=BC=8C=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 4 +- .../jxaqgl/domain/vo/JxAqjcglVo.java | 14 +- .../service/impl/JxGzwxJlServiceImpl.java | 24 +- .../jxsgjl/domain/bo/JxSgxxjlbBo.java | 1 - .../jxsgjl/domain/vo/JxSgxxjlbVo.java | 24 +- .../service/impl/JxSgxxjlbServiceImpl.java | 24 +- .../service/impl/JxYhzgbhServiceImpl.java | 25 ++- .../HseDangerArchiveController.java | 11 + .../safety/domain/vo/HseJsjdYuJkjcVo.java | 18 ++ .../org/dromara/safety/enums/AqEnums.java | 28 +++ .../gcjkjl/controller/HseGcjkController.java | 133 +++++++++++ .../dromara/safety/gcjkjl/domain/HseGcjk.java | 196 ++++++++++++++++ .../safety/gcjkjl/domain/bo/HseGcjkBo.java | 189 ++++++++++++++++ .../safety/gcjkjl/domain/vo/HseGcjkVo.java | 209 ++++++++++++++++++ .../safety/gcjkjl/domain/vo/JkjcHeadVo.java | 23 ++ .../safety/gcjkjl/mapper/HseGcjkMapper.java | 15 ++ .../gcjkjl/service/IHseGcjkService.java | 74 +++++++ .../service/impl/HseGcjkServiceImpl.java | 187 ++++++++++++++++ .../jsjd/controller/HseJsjdController.java | 131 +++++++++++ .../dromara/safety/jsjd/domain/HseJsjd.java | 108 +++++++++ .../safety/jsjd/domain/bo/HseJsjdBo.java | 120 ++++++++++ .../safety/jsjd/domain/vo/HseJsjdVo.java | 135 +++++++++++ .../safety/jsjd/domain/vo/JsjgHeadVo.java | 33 +++ .../safety/jsjd/mapper/HseJsjdMapper.java | 15 ++ .../safety/jsjd/service/IHseJsjdService.java | 74 +++++++ .../jsjd/service/impl/HseJsjdServiceImpl.java | 189 ++++++++++++++++ .../service/IHseDangerArchiveService.java | 4 + .../impl/HseDangerArchiveServiceImpl.java | 36 +++ 28 files changed, 2005 insertions(+), 39 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 87e8a97c..6cf84cfe 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -311,13 +311,11 @@ springdoc: packages-to-scan: org.dromara.ai - group: 31.投标管理模块 packages-to-scan: org.dromara.bidding - - group: 33.机械模块 - packages-to-scan: org.dromara.mechanical.jxgl - group: 32.设备模块 packages-to-scan: org.dromara.device - group: 33.摄像头模块 packages-to-scan: org.dromara.other - - group: 34.机械安全模块 + - group: 34.机械模块 packages-to-scan: org.dromara.mechanical # knife4j的增强配置,不需要增强可以不配 knife4j: 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 index 73f1729b..932d1e35 100644 --- 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 @@ -61,8 +61,7 @@ public class JxAqjcglVo implements Serializable { /** * 检查类型 */ - @ExcelProperty(value = "检查类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "jx_jclx") + @ExcelProperty(value = "检查类型") private String inspectionType; /** @@ -101,8 +100,7 @@ public class JxAqjcglVo implements Serializable { /** * 参与人(多个用逗号分隔) */ - @ExcelProperty(value = "参与人", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "多=个用逗号分隔") + @ExcelProperty(value = "参与人") private String participants; /** @@ -138,21 +136,19 @@ public class JxAqjcglVo implements Serializable { /** * 设备类型 */ - @ExcelProperty(value = "设备类型", converter = ExcelDictConvert.class) + @ExcelProperty(value = "设备类型") private String equipmentType; /** * 检查结果 */ - @ExcelProperty(value = "检查结果", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "jx_jcjg") + @ExcelProperty(value = "检查结果") private String inspectionResult; /** * 风险等级 */ - @ExcelProperty(value = "风险等级", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "jx_fxdj") + @ExcelProperty(value = "风险等级") private String riskGrade; /** 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 0d6ee2b3..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; /** * 查询机械故障维修记录 @@ -154,6 +157,21 @@ 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; } 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 index 7ae0a82b..1994501d 100644 --- 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 @@ -55,7 +55,6 @@ public class JxSgxxjlbBo extends BaseEntity { /** * 设备台账id */ - @NotBlank(message = "设备台账id不能为空", groups = { AddGroup.class, EditGroup.class }) private Long equipmentId; /** 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 index 6b921e61..c7599806 100644 --- 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 @@ -40,29 +40,25 @@ public class JxSgxxjlbVo implements Serializable { /** * 事故编号(如SGJL-20230620-001) */ - @ExcelProperty(value = "事故编号", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "如=SGJL-20230620-001") + @ExcelProperty(value = "事故编号") private String accidentCode; /** * 事故等级(下拉选择) */ - @ExcelProperty(value = "事故等级", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "下=拉选择") + @ExcelProperty(value = "事故等级") private String accidentLevel; /** * 事故类型(下拉选择) */ - @ExcelProperty(value = "事故类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "下=拉选择") + @ExcelProperty(value = "事故类型") private String accidentType; /** * 设备名称(下拉选择) */ - @ExcelProperty(value = "设备名称", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "下=拉选择") + @ExcelProperty(value = "设备名称") private String equipmentName; /** @@ -86,22 +82,19 @@ public class JxSgxxjlbVo implements Serializable { /** * 事故描述(详细经过) */ - @ExcelProperty(value = "事故描述", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "详=细经过") + @ExcelProperty(value = "事故描述") private String accidentDescription; /** * 直接损失金额(元) */ - @ExcelProperty(value = "直接损失金额", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "元=") + @ExcelProperty(value = "直接损失金额") private BigDecimal directLoss; /** * 间接损失金额(元) */ - @ExcelProperty(value = "间接损失金额", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "元=") + @ExcelProperty(value = "间接损失金额") private BigDecimal indirectLoss; /** @@ -113,8 +106,7 @@ public class JxSgxxjlbVo implements Serializable { /** * 人员伤亡情况(如有) */ - @ExcelProperty(value = "人员伤亡情况", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "如=有") + @ExcelProperty(value = "人员伤亡情况") private String casualtySituation; /** 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 index b3dee07e..c953c985 100644 --- 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 @@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +import org.dromara.system.service.ISysOssService; import org.springframework.stereotype.Service; import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; @@ -20,9 +22,7 @@ import org.dromara.mechanical.jxsgjl.mapper.JxSgxxjlbMapper; import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService; import java.time.LocalDate; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 机械事故信息记录Service业务层处理 @@ -36,6 +36,9 @@ public class JxSgxxjlbServiceImpl extends ServiceImpl 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; } 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 index 1a3315fe..d9e4c3bc 100644 --- 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 @@ -16,6 +16,7 @@ import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; import org.dromara.mechanical.jxaqgl.domain.MonthDateRange; import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; import org.dromara.mechanical.jxzgbh.domain.JxFcxx; import org.dromara.mechanical.jxzgbh.domain.JxZgxx; import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; @@ -23,6 +24,7 @@ import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; import org.dromara.mechanical.jxzgbh.domain.vo.*; import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; +import org.dromara.system.service.ISysOssService; import org.springframework.stereotype.Service; import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; @@ -31,10 +33,7 @@ import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 机械隐患整改与闭环Service业务层处理 @@ -56,6 +55,9 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i private final IJxAqjcglService jxAqjcglService; + private final ISysOssService sysOssService; + + /** * 查询机械隐患整改与闭环 * @@ -185,6 +187,21 @@ public class JxYhzgbhServiceImpl extends ServiceImpl i 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; } 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 index 7491cea9..6571c294 100644 --- 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 @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -45,6 +46,16 @@ public class HseDangerArchiveController extends BaseController { return hseDangerArchiveService.queryPageList(bo, pageQuery); } + + /** + * 查询技术交底和过程监控文件 + * @param id 危大工程id + */ + @GetMapping("/getJsjdYGcjk/{id}") + public R list(@PathVariable Long id) { + return R.ok(hseDangerArchiveService.getJsjdYGcjk(id)); + } + /** * 导出危大工程档案列表 */ 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..20e917e2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java @@ -0,0 +1,18 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HseJsjdYuJkjcVo { + /** + * 技术交底文件 + */ + private String jsjdFile; + + + /** + * 过程监控文件 + */ + private String gcjkFile; +} 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/service/IHseDangerArchiveService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java index 891bc1f1..01a06c03 100644 --- 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 @@ -7,6 +7,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; + import java.util.Collection; import java.util.List; @@ -67,4 +69,6 @@ public interface IHseDangerArchiveService extends IService{ * @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/impl/HseDangerArchiveServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java index 7be66158..cb7e5e91 100644 --- 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 @@ -9,6 +9,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; +import org.dromara.safety.gcjkjl.domain.HseGcjk; +import org.dromara.safety.gcjkjl.service.IHseGcjkService; +import org.dromara.safety.jsjd.domain.HseJsjd; +import org.dromara.safety.jsjd.service.IHseJsjdService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.safety.domain.bo.HseDangerArchiveBo; import org.dromara.safety.domain.vo.HseDangerArchiveVo; @@ -32,6 +39,14 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl 0; } + + @Override + public HseJsjdYuJkjcVo getJsjdYGcjk(Long id) { + HseJsjdYuJkjcVo hseJsjdYuJkjcVo = new HseJsjdYuJkjcVo(); + if (id == null) throw new RuntimeException("危大工程不能为空"); + HseGcjk hseGcjk = hseGcjkService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseGcjk::getMasterId, id)); + if (hseGcjk != null){ + hseJsjdYuJkjcVo.setJsjdFile(hseGcjk.getFileId()); + } + + List hseJsjds = hseJsjdService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseJsjd::getMasterId, id)); + if (hseJsjds != null && hseJsjds.size() != 0){ + StringBuffer stringBuffer = new StringBuffer(); + hseJsjds.forEach(hseJsjd -> { + stringBuffer.append(hseJsjd.getFileId()).append(","); + }); + hseJsjdYuJkjcVo.setGcjkFile(stringBuffer.toString()); + } + + return hseJsjdYuJkjcVo; + } } From 6819eb5f8018685bf71914a24121e764d7244bef Mon Sep 17 00:00:00 2001 From: lg Date: Sat, 6 Dec 2025 19:31:19 +0800 Subject: [PATCH 58/73] =?UTF-8?q?=E5=8D=B1=E5=A4=A7=E5=B7=A5=E7=A8=8B-?= =?UTF-8?q?=E6=8A=80=E6=9C=AF=E4=BA=A4=E5=BA=95=EF=BC=8C=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/safety/domain/vo/HseJsjdYuJkjcVo.java | 6 ++++++ .../service/impl/HseDangerArchiveServiceImpl.java | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) 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 index 20e917e2..3678827f 100644 --- 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 @@ -15,4 +15,10 @@ public class HseJsjdYuJkjcVo { * 过程监控文件 */ private String gcjkFile; + + + /** + * 过程旁站监听文件 + */ + private String pzjtFile; } 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 index cb7e5e91..ef16c3f4 100644 --- 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 @@ -166,18 +166,27 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl().eq(HseGcjk::getMasterId, id)); + //技术交底 + 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 = hseJsjdService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseJsjd::getMasterId, id)); + //过程监控 + 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 -> { - stringBuffer.append(hseJsjd.getFileId()).append(","); + 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; From 6f4eb21debc9f980871f9dbe4b28ced1fd09f1a7 Mon Sep 17 00:00:00 2001 From: zt Date: Mon, 8 Dec 2025 10:43:09 +0800 Subject: [PATCH 59/73] =?UTF-8?q?=E5=8D=B1=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HseDangerArchiveController.java | 12 ++++++ .../controller/HseSpecialPlanController.java | 10 +++++ .../domain/vo/HseDangerArchiveCountVo.java | 43 +++++++++++++++++++ .../domain/vo/HseSpecialPlanFileVo.java | 30 +++++++++++++ .../service/IHseDangerArchiveService.java | 9 ++++ .../service/IHseSpecialPlanService.java | 7 +++ .../impl/HseDangerArchiveServiceImpl.java | 31 ++++++++++++- .../impl/HseSpecialPlanServiceImpl.java | 11 +++++ 8 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java 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 index 6571c294..39474a5f 100644 --- 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 @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.domain.vo.HseDangerArchiveCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -113,4 +115,14 @@ public class HseDangerArchiveController extends BaseController { @PathVariable Long[] ids) { return toAjax(hseDangerArchiveService.deleteWithValidByIds(List.of(ids), true)); } + + + /** + * 统计 + */ + @GetMapping("/count/{projectId}") + public R count(@PathVariable Long projectId) { + return R.ok(hseDangerArchiveService.count(projectId)); + } + } 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 index 6712552a..ec8be4fa 100644 --- 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 @@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanFileVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -112,4 +113,13 @@ public class HseSpecialPlanController extends BaseController { public R count(@PathVariable Long projectId) { return R.ok(hseSpecialPlanService.count(projectId)); } + + + /** + * 获取档案 + */ + @GetMapping("/getFile/{deId}") + public R getFile(@PathVariable Long deId) { + return R.ok(hseSpecialPlanService.getFile(deId)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java new file mode 100644 index 00000000..edcd40b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java @@ -0,0 +1,43 @@ +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.HseDangerArchive; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + + +/** + * 危大工程档案视图对象 hse_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseDangerArchiveCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 总工程数 + */ + private Integer total; + + /** + * 重大风险数 + */ + private Long majorRisk; + /** + * 归档数 + */ + private Integer archive; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java new file mode 100644 index 00000000..8dd5e8ea --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java @@ -0,0 +1,30 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 危大工程专项施工方案视图对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseSpecialPlanFileVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 专家结论附件路径 + */ + private String expertFile; + + + + +} 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 index 01a06c03..3c79fde7 100644 --- 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 @@ -1,5 +1,6 @@ package org.dromara.safety.service; +import org.dromara.safety.domain.vo.HseDangerArchiveCountVo; import org.dromara.safety.domain.vo.HseDangerArchiveVo; import org.dromara.safety.domain.bo.HseDangerArchiveBo; import org.dromara.safety.domain.HseDangerArchive; @@ -9,6 +10,8 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; +import org.springframework.web.bind.annotation.PathVariable; + import java.util.Collection; import java.util.List; @@ -70,5 +73,11 @@ public interface IHseDangerArchiveService extends IService{ */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 统计 + */ + HseDangerArchiveCountVo count( Long projectId); + HseJsjdYuJkjcVo getJsjdYGcjk(Long id); } 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 index 76ad5ee7..bde39c1b 100644 --- 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 @@ -1,6 +1,7 @@ package org.dromara.safety.service; import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanFileVo; import org.dromara.safety.domain.vo.HseSpecialPlanVo; import org.dromara.safety.domain.bo.HseSpecialPlanBo; import org.dromara.safety.domain.HseSpecialPlan; @@ -75,4 +76,10 @@ public interface IHseSpecialPlanService extends IService{ * 统计 */ HseSpecialPlanCountVo count(Long projectId); + + /** + * 获取档案 + */ + HseSpecialPlanFileVo getFile(Long deId); + } 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 index ef16c3f4..d65c69af 100644 --- 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 @@ -1,6 +1,9 @@ package org.dromara.safety.service.impl; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.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,6 +12,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.safety.domain.HseDangerousEngineering; +import org.dromara.safety.domain.vo.HseDangerArchiveCountVo; +import org.dromara.safety.service.IHseDangerousEngineeringService; import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; import org.dromara.safety.gcjkjl.domain.HseGcjk; import org.dromara.safety.gcjkjl.service.IHseGcjkService; @@ -39,6 +45,8 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -144,7 +155,12 @@ public class HseDangerArchiveServiceImpl extends ServiceImpl 0; } + @Override + public HseDangerArchiveCountVo count(Long projectId) { + HseDangerArchiveCountVo hseDangerArchiveCountVo = new HseDangerArchiveCountVo(); + List list = hseDangerousEngineeringService.lambdaQuery() + .eq(HseDangerousEngineering::getProjectId, projectId) + .list(); + hseDangerArchiveCountVo.setTotal(list.size()); + hseDangerArchiveCountVo.setMajorRisk(list.stream().filter(item -> "4".equals(item.getRiskLevel())).count()); + List list1 = lambdaQuery().eq(HseDangerArchive::getProjectId, projectId).list(); + hseDangerArchiveCountVo.setArchive(list1.size()); + return hseDangerArchiveCountVo; + } + @Override public HseJsjdYuJkjcVo getJsjdYGcjk(Long id) { HseJsjdYuJkjcVo hseJsjdYuJkjcVo = new HseJsjdYuJkjcVo(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java index c7ea3b51..bd718b6e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSpecialPlanServiceImpl.java @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanFileVo; import org.dromara.safety.service.IHseDangerousEngineeringService; import org.springframework.stereotype.Service; import org.dromara.safety.domain.bo.HseSpecialPlanBo; @@ -182,4 +183,14 @@ public class HseSpecialPlanServiceImpl extends ServiceImpl item.getNeedSupervision() == 1).count()); return vo; } + + @Override + public HseSpecialPlanFileVo getFile(Long deId) { + HseSpecialPlan one = lambdaQuery().eq(HseSpecialPlan::getDeId, deId).last("limit 1").one(); + HseSpecialPlanFileVo hseSpecialPlanFileVo = new HseSpecialPlanFileVo(); + if(one != null) { + hseSpecialPlanFileVo.setExpertFile(one.getExpertFile()); + } + return hseSpecialPlanFileVo; + } } From fcbc5a30c42f85ff3d9d1ef9c9414613ab8fde82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Mon, 8 Dec 2025 15:26:13 +0800 Subject: [PATCH 60/73] =?UTF-8?q?12-05-=E4=BA=8B=E6=95=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BA=8B=E6=95=85=E4=B8=8A=E6=8A=A5=E3=80=81?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E8=B0=83=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HseSafetySgdcController.java | 42 ++-- .../safety/accident/domain/HseSafetySgdc.java | 5 + .../safety/accident/domain/HseSafetySgsb.java | 4 +- .../accident/domain/bo/HseSafetySgdcBo.java | 5 + .../accident/domain/bo/HseSafetySgsbBo.java | 2 +- .../accident/domain/vo/HseSafetySgdcVo.java | 40 ++++ .../accident/domain/vo/HseSafetySgsbVo.java | 11 +- .../accident/domain/vo/SgsbCountVo.java | 20 ++ .../accident/mapper/HseSafetySgdcMapper.java | 14 +- .../accident/mapper/HseSafetySgsbMapper.java | 11 +- .../safety/accident/menu/SGdjEnum.java | 19 ++ .../safety/accident/menu/SGlxEnum.java | 29 +++ .../service/IHseSafetySgdcService.java | 19 +- .../impl/HseSafetySgdcServiceImpl.java | 213 +++++++++++++++++- .../impl/HseSafetySgsbServiceImpl.java | 20 +- 15 files changed, 409 insertions(+), 45 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java 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 index c328b22c..2073319e 100644 --- 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 @@ -1,26 +1,28 @@ 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 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.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.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.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 安全-事故调查 @@ -102,4 +104,14 @@ public class HseSafetySgdcController extends BaseController { @PathVariable Long[] ids) { return toAjax(hseSafetySgdcService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 统计数据 + */ + @SaCheckPermission("accident:safetySgdc:list") + @GetMapping("/getCountValue") + public R getCountValue() { + return R.ok(hseSafetySgdcService.getListCount()); + } + } 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 index e41906a7..7b7dcf3b 100644 --- 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 @@ -29,6 +29,11 @@ public class HseSafetySgdc extends BaseEntity { @TableId(value = "id") private Long id; + /** + * 事故关联项目ID + */ + private Long projectId; + /** * 调查编号 */ 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 index 18496754..ccdd00eb 100644 --- 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 @@ -51,12 +51,12 @@ public class HseSafetySgsb extends BaseEntity { private String sfdd; /** - * 事故类型 + * 事故类型(1高空坠落2触电3火灾4机械伤害5物体打击6其他) */ private String sglx; /** - * 事故等级 + * 事故等级(1一般2较大3重大4特别重大) */ private String sgdj; 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 index aefa6543..4b3aaec5 100644 --- 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 @@ -27,6 +27,11 @@ public class HseSafetySgdcBo extends BaseEntity { @NotNull(message = "id不能为空", groups = { EditGroup.class }) private Long id; + /** + * 事故关联项目ID + */ + private Long projectId; + /** * 调查编号 */ 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 index 83ac1042..b93129ed 100644 --- 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 @@ -54,7 +54,7 @@ public class HseSafetySgsbBo extends BaseEntity { private String sglx; /** - * 事故等级 + * 事故等级(1一般2较大3重大4特别重大) */ private String sgdj; 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 index ecb09e33..5e3ff3ed 100644 --- 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 @@ -44,6 +44,16 @@ public class HseSafetySgdcVo implements Serializable { @ExcelProperty(value = "关联事故id") private Long sgId; + /** + * 事故关联项目ID + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + /** * 调查小组 */ @@ -92,18 +102,33 @@ public class HseSafetySgdcVo implements Serializable { @ExcelProperty(value = "责任部门") private Long zrbm; + /** + * 部门名称 + */ + private String bmmc; + /** * 主要负责人 */ @ExcelProperty(value = "主要负责人") private Long zyfzr; + /** + * 主要责任人名称 + */ + private String zyzrrmc; + /** * 次要负责人 */ @ExcelProperty(value = "次要负责人") private Long cyfzr; + /** + * 次要责任人名称 + */ + private String cyzrrmc; + /** * 责任划分 */ @@ -134,6 +159,11 @@ public class HseSafetySgdcVo implements Serializable { @ExcelProperty(value = "整改负责人") private Long zgfzr; + /** + * 整改负责人名称 + */ + private String zgfzrmc; + /** * 整改优先级(暂时废弃) */ @@ -152,6 +182,11 @@ public class HseSafetySgdcVo implements Serializable { @ExcelProperty(value = "复查人员") private Long fcry; + /** + * 复查人员名称 + */ + private String fcrymc; + /** * 整改验收标准 */ @@ -170,6 +205,11 @@ public class HseSafetySgdcVo implements Serializable { @ExcelProperty(value = "调查负责人") private Long dcfzr; + /** + * 调查负责人名称 + */ + private String dcfzrmc; + /** * 多文件逗号分隔 */ 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 index bdf61821..d0a3d81f 100644 --- 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 @@ -64,7 +64,7 @@ public class HseSafetySgsbVo implements Serializable { private String sglx; /** - * 事故等级 + * 事故等级(1一般2较大3重大4特别重大) */ @ExcelProperty(value = "事故等级") private String sgdj; @@ -152,5 +152,14 @@ public class HseSafetySgsbVo implements Serializable { @ExcelProperty(value = "事故状态(已上报,待调查,待整改,已整改,,已闭环)") private String sgzt; + /** + * 创建人 + */ + private Long createBy; + + /** + * 创建人名称 + */ + private String createByName; } 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 index b7d529be..e371bab5 100644 --- 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 @@ -27,4 +27,24 @@ public class SgsbCountVo { */ private BigDecimal sgzgwcl; + /** + * 待调查事故 + */ + private Long ddcsg; + + /** + * 调查中事故 + */ + private Long dczsg; + + /** + * 已完成调查 + */ + private Long ywcdc; + + /** + * 待整改事故 + */ + private Long dzgsg; + } 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 index 92ca2084..740c8f16 100644 --- 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 @@ -1,8 +1,12 @@ package org.dromara.safety.accident.mapper; -import org.dromara.safety.accident.domain.HseSafetySgdc; -import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; + +import java.util.List; /** * 安全-事故调查Mapper接口 @@ -12,4 +16,10 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface HseSafetySgdcMapper extends BaseMapperPlus { + @Select("select * from hse_safety_sgsb where id = #{id}") + HseSafetySgsb getSgsb(Long id); + + @Select("select * from hse_safety_sgsb") + List getSbList(); + } 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 index fe52737a..a5211b8d 100644 --- 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 @@ -1,8 +1,12 @@ package org.dromara.safety.accident.mapper; -import org.dromara.safety.accident.domain.HseSafetySgsb; -import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; + +import java.util.List; /** * 安全-事故上报Mapper接口 @@ -12,4 +16,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface HseSafetySgsbMapper extends BaseMapperPlus { + @Select("select * from hse_safety_sgzgbh") + List getSgzgList(); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java new file mode 100644 index 00000000..4a89433f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java @@ -0,0 +1,19 @@ +package org.dromara.safety.accident.menu; + +public enum SGdjEnum { + //事故等级(1一般2较大3重大4特别重大) + YB("1", "一般"), + JD("2", "较大"), + ZD("3", "重大"), + TBZD("4", "特别重大"); + + private final String code; + + private final String desc; + + SGdjEnum(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/menu/SGlxEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java new file mode 100644 index 00000000..a7738111 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java @@ -0,0 +1,29 @@ +package org.dromara.safety.accident.menu; + +import lombok.Getter; + +@Getter +public enum SGlxEnum { + //事故类型(1高空坠落2触电3火灾4机械伤害5物体打击6其他) + + GKZL("1", "高空坠落"), + + CD("2", "触电"), + + HZ("3", "火灾"), + + JXSH("4", "机械伤害"), + + WTDJ("5", "物体打击"), + + QT("6", "其他"); + + private final String code; + + private final String desc; + + SGlxEnum(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/IHseSafetySgdcService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java index 595b7dca..ae0c6f7d 100644 --- 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 @@ -1,12 +1,13 @@ 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 org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; + import java.util.Collection; import java.util.List; @@ -67,4 +68,10 @@ public interface IHseSafetySgdcService extends IService{ * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 统计数据 + * @return + */ + SgsbCountVo getListCount(); } 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 index e35dc5b9..87b0993d 100644 --- 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 @@ -1,24 +1,35 @@ 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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; +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.vo.HseSafetySgdcVo; -import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; import org.dromara.safety.accident.mapper.HseSafetySgdcMapper; +import org.dromara.safety.accident.menu.SGStatusEnum; import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.impl.SysDeptServiceImpl; +import org.dromara.system.service.impl.SysUserServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Collection; /** * 安全-事故调查Service业务层处理 @@ -31,6 +42,13 @@ import java.util.Collection; public class HseSafetySgdcServiceImpl extends ServiceImpl implements IHseSafetySgdcService { private final HseSafetySgdcMapper baseMapper; + @Autowired + private SysDeptServiceImpl deptService; + @Autowired + private SysUserServiceImpl userService; + @Autowired + private HseSafetySgzgbhServiceImpl zgbhService; + /** * 查询安全-事故调查 @@ -111,6 +129,9 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -128,6 +149,10 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl 0; } @@ -152,4 +177,174 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl 0; } + + /** + * 装填数据 + */ + public void setValue(List vos){ + List deptVos = new ArrayList<>(); + if (!vos.isEmpty()) { + //获取部门 + deptVos = deptService.querListDept(); + } + for (HseSafetySgdcVo vo : vos) { + //事故关联项目id + HseSafetySgsb hseSafetySgsbVo = baseMapper.getSgsb(vo.getSgId()); + if (hseSafetySgsbVo != null){ + vo.setProjectId(hseSafetySgsbVo.getProjectId()); + //事故编号 + if (hseSafetySgsbVo.getSgbh() != null){ + vo.setSgbh(hseSafetySgsbVo.getSgbh()); + } + } + //部门名称 + if (vo.getZrbm() != null){ + for (SysDeptVo deptVo : deptVos) { + if (vo.getZrbm().equals(deptVo.getDeptId())){ + vo.setBmmc(deptVo.getDeptName()); + } + } + } + //主要负责人 + if (vo.getZyfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getZyfzr()); + if (sysUserVo != null){ + vo.setZyzrrmc(sysUserVo.getNickName()); + } + } + //次要负责人 + if (vo.getCyfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getCyfzr()); + if (sysUserVo != null){ + vo.setCyzrrmc(sysUserVo.getNickName()); + } + } + //整改负责人 + if (vo.getZgfzrType() != null) { +// if (vo.getZgfzrType().equals("1")) { +// //班组长 +// +// } else if (vo.getZgfzrType().equals("2")) { +// //分包人 +// +// } + SysUserVo sysUserVo = userService.queryById(vo.getZgfzr()); + if (sysUserVo != null){ + vo.setZgfzrmc(sysUserVo.getNickName()); + } + } + + //复查人员 + if (vo.getFcry() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getFcry()); + if (sysUserVo != null){ + vo.setFcrymc(sysUserVo.getNickName()); + } + } + //调查负责人 + if (vo.getDcfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getDcfzr()); + if (sysUserVo != null){ + vo.setDcfzrmc(sysUserVo.getNickName()); + } + } + } + + } + + /** + * 添加整改 + */ + public void addZgxx(Long id){ + if (id == null){ + return; + } + HseSafetySgzgbh sgzg = new HseSafetySgzgbh(); + //调查 + HseSafetySgdcVo sgdc = queryById(id); + //事故id + sgzg.setSgId(sgdc.getSgId()); + //事故编号 + sgzg.setSgbh(sgdc.getSgbh()); + //事发地点 需要查询 + HseSafetySgsb sgsb = baseMapper.getSgsb(sgdc.getSgId()); + if (sgsb == null){ + return; + } + sgzg.setSfdd(sgsb.getSfdd()); + //事故类型 + sgzg.setSglx(sgsb.getSglx()); + //事故等级 + sgzg.setSgdj(sgsb.getSgdj()); + //事故原因 + sgzg.setSgyy(sgsb.getSgyy()); + //调查人 + sgzg.setJsr(sgdc.getDcfzr()); + //上报人 + sgzg.setSbr(sgsb.getCreateBy()); + //上报时间 + sgzg.setSbsj(sgsb.getCreateTime()); + //整改状态 + sgzg.setZgStatus(SGStatusEnum.TO_BE_RECTIFIED.getCode()); + //整改人 + sgzg.setZgr(sgdc.getZgfzr()); + //是否预期 + sgzg.setIsFinish("0"); + //调查id + sgzg.setDcId(sgdc.getId()); + //添加 + zgbhService.save(sgzg); + } + + /** + * 统计数据 + */ + @Override + public SgsbCountVo getListCount(){ + //初始化 + SgsbCountVo countVo = new SgsbCountVo(); + long ddcsg = 0; + long dczsg = 0; + long ywcdc = 0; + long dzgsg = 0; + + List sbList = baseMapper.getSbList(); + for (HseSafetySgsb sgsb : sbList) { + //待调查事故 上报后 审核后 待调查 + if (sgsb.getSgzt().equals(SGStatusEnum.UNDER_INVESTIGATION.getCode())){ + ddcsg++; + }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode())){ + //调查中事故 待调查 填写完数据提交后 待整改 + dczsg++; + }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode())){ + //已完成调查 待整改 -> 已整改 + ywcdc++; + } + //待整改事项 查看整改表关联此调查的数据 整改状态为待整改 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HseSafetySgdc::getSgId,sgsb.getId()); + List sgdcs = list(queryWrapper); + for (HseSafetySgdc sgdc : sgdcs) { + //寻找对应整改数据 + LambdaQueryWrapper zgqwr = new LambdaQueryWrapper<>(); + zgqwr.eq(HseSafetySgzgbh::getDcId,sgdc.getId()); + List zgs = zgbhService.list(zgqwr); + for (HseSafetySgzgbh zg : zgs) { + //寻找待整改 + if (zg.getZgStatus().equals(SGStatusEnum.TO_BE_RECTIFIED.getCode())){ + dzgsg++; + } + } + } + + } + + countVo.setDdcsg(ddcsg); + countVo.setDczsg(dczsg); + countVo.setYwcdc(ywcdc); + countVo.setDzgsg(dzgsg); + + return countVo; + } + } 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 index c6430c38..9c807f0d 100644 --- 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 @@ -52,8 +52,8 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl list = this.list(lambdaQueryWrapper); //获取整改对应列表 - List zgxxes = sgzgbhService.list(); + List zgxxes = baseMapper.getSgzgList(); //获取调查列表 List dcList = sgdcService.list(); //初始化统计信息 @@ -261,6 +261,12 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl Date: Mon, 8 Dec 2025 15:52:24 +0800 Subject: [PATCH 61/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=8A=80=E6=9C=AF?= =?UTF-8?q?=E4=BA=A4=E5=BA=95=EF=BC=8C=E7=9B=91=E6=8E=A7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxaqgl/controller/JxAqjcglController.java | 18 ++++++++++++++++++ .../dromara/safety/gcjkjl/domain/HseGcjk.java | 6 ++++++ .../safety/gcjkjl/domain/bo/HseGcjkBo.java | 6 ++++++ .../safety/gcjkjl/domain/vo/HseGcjkVo.java | 6 ++++++ .../dromara/safety/jsjd/domain/HseJsjd.java | 5 +++++ .../safety/jsjd/domain/bo/HseJsjdBo.java | 6 ++++++ .../safety/jsjd/domain/vo/HseJsjdVo.java | 4 ++++ 7 files changed, 51 insertions(+) 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 index 3a601c65..09df6c0e 100644 --- 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 @@ -10,6 +10,8 @@ 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.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; +import org.dromara.project.service.IBusProjectTeamService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -43,6 +45,22 @@ public class JxAqjcglController extends BaseController { private final IDeviceInfoService deviceInfoService; + private final IBusProjectTeamService busProjectTeamService; + + + + + + /** + * 根据项目id查询项目班组班组长信息列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listForeman/{projectId}") + public R> listForeman(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(busProjectTeamService.queryForemanListByProjectId(projectId)); + } + 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 index 52a92195..9972fd7b 100644 --- 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 @@ -49,6 +49,12 @@ public class HseGcjk extends BaseEntity { */ private String deName; + + /** + * 监控名称 + */ + private String monitorName; + /** * 监控内容 */ 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 index 359f7b91..8d9db280 100644 --- 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 @@ -52,6 +52,12 @@ public class HseGcjkBo extends BaseEntity { */ private String deName; + + /** + * 监控名称 + */ + private String monitorName; + /** * 监控内容 */ 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 index 0ad32f98..3c4ed72c 100644 --- 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 @@ -74,6 +74,12 @@ public class HseGcjkVo implements Serializable { @ExcelProperty(value = "监控频次") private String monitorFrequency; + + /** + * 监控名称 + */ + private String monitorName; + /** * 监控责任人姓名 */ 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 index 89ad2d21..7ba4ea2b 100644 --- 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 @@ -43,6 +43,11 @@ public class HseJsjd extends BaseEntity { */ private String deName; + /** + * 交底名称 + */ + private String disclosureName; + /** * 项目id */ 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 index d7155be2..b1bd6d15 100644 --- 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 @@ -33,6 +33,12 @@ public class HseJsjdBo extends BaseEntity { */ private String disclosureNo; + + /** + * 交底名称 + */ + private String disclosureName; + /** * 危大工程ID */ 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 index 122764af..a2098573 100644 --- 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 @@ -43,6 +43,10 @@ public class HseJsjdVo implements Serializable { @ExcelProperty(value = "交底编号") private String disclosureNo; + /** + * 交底名称 + */ + private String disclosureName; /** * 危大工程ID */ From 9f5b3918d065a1075e0cbe4a3f001deede1bdc14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Mon, 8 Dec 2025 18:48:53 +0800 Subject: [PATCH 62/73] =?UTF-8?q?12-05-=E4=BA=8B=E6=95=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BA=8B=E6=95=85=E4=B8=8A=E6=8A=A5=E3=80=81?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E8=B0=83=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HseSafetySgdcController.java | 6 ++-- .../accident/domain/vo/HseSafetySgdcVo.java | 15 ++++++++ .../accident/mapper/HseSafetySgdcMapper.java | 2 ++ .../service/IHseSafetySgdcService.java | 2 +- .../impl/HseSafetySgdcServiceImpl.java | 30 ++++++++++++++-- .../service/RydwWebSocketServer.java | 5 +-- .../org/dromara/xzd/domain/XzdProject.java | 4 +++ .../xzd/domain/XzdProjectManagerApproval.java | 4 +++ .../dromara/xzd/domain/XzdSupplierInfo.java | 4 +++ .../dromara/xzd/domain/bo/XzdProjectBo.java | 5 +++ .../bo/XzdProjectManagerApprovalBo.java | 4 +++ .../xzd/domain/bo/XzdSupplierInfoBo.java | 5 +++ .../vo/XzdProjectManagerApprovalVo.java | 4 +++ .../dromara/xzd/domain/vo/XzdProjectVo.java | 6 +++- .../xzd/domain/vo/XzdSupplierInfoVo.java | 5 +++ .../XzdProjectManagerApprovalServiceImpl.java | 34 +++++++++++++++++++ .../service/impl/XzdProjectServiceImpl.java | 34 +++++++++++++++++-- .../impl/XzdSupplierInfoServiceImpl.java | 34 +++++++++++++++++++ .../resources/mapper/xzd/XzdProjectMapper.xml | 4 +++ .../mapper/xzd/XzdSupplierInfoMapper.xml | 8 +++++ 20 files changed, 200 insertions(+), 15 deletions(-) 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 index 2073319e..45b6918f 100644 --- 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 @@ -109,9 +109,9 @@ public class HseSafetySgdcController extends BaseController { * 统计数据 */ @SaCheckPermission("accident:safetySgdc:list") - @GetMapping("/getCountValue") - public R getCountValue() { - return R.ok(hseSafetySgdcService.getListCount()); + @GetMapping("/getCountValue/{projectId}") + public R getCountValue(@PathVariable Long projectId) { + return R.ok(hseSafetySgdcService.getListCount(projectId)); } } 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 index 5e3ff3ed..9a1d147d 100644 --- 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 @@ -227,4 +227,19 @@ public class HseSafetySgdcVo implements Serializable { */ private String bczt; + /** + * 整改任务名称 + */ + private String zgrwmc; + + /** + * 整改状态 + */ + private String zgzt; + + /** + * 复查结果 + */ + private String fcjg; + } 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 index 740c8f16..ec586b53 100644 --- 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 @@ -22,4 +22,6 @@ public interface HseSafetySgdcMapper extends BaseMapperPlus getSbList(); + @Select("select * from hse_safety_sgsb where project_id = #{projectId}") + List getSgsbListByProjectId(Long projectId); } 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 index ae0c6f7d..8225e782 100644 --- 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 @@ -73,5 +73,5 @@ public interface IHseSafetySgdcService extends IService{ * 统计数据 * @return */ - SgsbCountVo getListCount(); + SgsbCountVo getListCount(Long projectId); } 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 index 87b0993d..e58b3439 100644 --- 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 @@ -58,7 +58,24 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl hseSafetySgdcVo1 = List.of(hseSafetySgdcVo); + setValue(hseSafetySgdcVo1); + + //获取整改信息 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(HseSafetySgzgbh::getDcId, id); + HseSafetySgzgbh one = zgbhService.getOne(lqw); + if (one != null){ + hseSafetySgdcVo.setZgrwmc(one.getZgbhbh()); + hseSafetySgdcVo.setZgzt(one.getZgStatus()); + hseSafetySgdcVo.setFcjg(one.getFcStatus()); + } + + return hseSafetySgdcVo1.getFirst(); } /** @@ -127,6 +144,13 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(HseSafetySgdc::getSgId, bo.getSgId()); + if (baseMapper.selectCount(lqw) > 0) { + throw new RuntimeException("该事故已提交过事故调查"); + } + HseSafetySgdc add = MapstructUtils.convert(bo, HseSafetySgdc.class); validEntityBeforeSave(add); //生成调查编号 @@ -300,7 +324,7 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl sbList = baseMapper.getSbList(); + List sbList = baseMapper.getSgsbListByProjectId(projectId); for (HseSafetySgsb sgsb : sbList) { //待调查事故 上报后 审核后 待调查 if (sgsb.getSgzt().equals(SGStatusEnum.UNDER_INVESTIGATION.getCode())){ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index 4e7a1145..635b0ad3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -14,7 +14,6 @@ import org.dromara.common.utils.JSTUtil; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.impl.SubConstructionUserServiceImpl; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; -import org.dromara.gps.service.impl.GpsEquipmentSonServiceImpl; import org.dromara.project.domain.BusProjectPunchrange; import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.service.IBusProjectTeamService; @@ -45,8 +44,6 @@ public class RydwWebSocketServer { private final static SysUserServiceImpl sysUserService = SpringUtils.getBean(SysUserServiceImpl.class); - private final static GpsEquipmentSonServiceImpl gpsEquipmentSonService = SpringUtils.getBean(GpsEquipmentSonServiceImpl.class); - private final IBusProjectTeamService busProjectTeamService = SpringUtils.getBean(IBusProjectTeamService.class); // 2. 静态会话存储(线程安全,项目启动时即初始化) @@ -488,7 +485,7 @@ public class RydwWebSocketServer { } // 测试数据 - countMap.put("1000000:测试数据", 8); +// countMap.put("1000000:测试数据", 8); return new ArrayList<>(countMap.entrySet()); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java index 4a219413..21e9f8e2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java @@ -235,5 +235,9 @@ public class XzdProject extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java index 3c4cdb96..e181eb16 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java @@ -129,5 +129,9 @@ public class XzdProjectManagerApproval extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java index b448c632..fa12e3b9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java @@ -245,5 +245,9 @@ public class XzdSupplierInfo extends BaseEntity { */ private String email; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java index a0488bb9..4c29d796 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java @@ -339,4 +339,9 @@ public class XzdProjectBo extends BaseEntity { private String selfId; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java index 6f78f2d7..5e4b994f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java @@ -129,5 +129,9 @@ public class XzdProjectManagerApprovalBo extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java index 1e5b180f..25bbf21e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java @@ -361,4 +361,9 @@ public class XzdSupplierInfoBo extends BaseEntity { private Integer offset; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java index 8e506c67..a2d6545c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java @@ -150,5 +150,9 @@ public class XzdProjectManagerApprovalVo implements Serializable { @ExcelProperty(value = "审核状态") private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java index 265ba3bd..39255598 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java @@ -5,7 +5,6 @@ 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.annotation.TranslationType; import org.dromara.common.translation.constant.TransConstant; import org.dromara.xzd.domain.XzdProject; @@ -395,4 +394,9 @@ public class XzdProjectVo implements Serializable { */ private String gd; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java index d481766a..0d077f0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java @@ -444,4 +444,9 @@ public class XzdSupplierInfoVo implements Serializable { */ private List contracts; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java index 228fb53b..d4b8b9d2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java @@ -18,7 +18,10 @@ import org.dromara.common.core.utils.SpringUtils; 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.utils.BatchNumberGenerator; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.domain.XzdProjectManagerApproval; import org.dromara.xzd.domain.bo.XzdProjectManagerApprovalBo; @@ -47,6 +50,8 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl queryPageList(XzdProjectManagerApprovalBo bo, PageQuery pageQuery) { + // 获取当前用户部门 + Long deptId = LoginHelper.getDeptId(); + SysDeptVo deptVo = iSysDeptService.selectDeptById(deptId); + if (LoginHelper.isSuperAdmin()) { + bo.setSsgs(deptVo.getDeptId()); + }else { + String ancestors = deptVo.getAncestors(); + List ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + }else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); @@ -88,6 +107,7 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl buildQueryWrapper(XzdProjectManagerApprovalBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(XzdProjectManagerApproval::getSsgs, bo.getSsgs()); lqw.eq(bo.getId() != null, XzdProjectManagerApproval::getId, bo.getId()); lqw.eq(bo.getCityCode() != null, XzdProjectManagerApproval::getCityCode, bo.getCityCode()); lqw.orderByDesc(XzdProjectManagerApproval::getId); @@ -114,6 +134,20 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + }else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java index 1d8fef39..53ebf099 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java @@ -7,7 +7,6 @@ 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.domain.R; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; @@ -17,10 +16,11 @@ import org.dromara.common.core.utils.SpringUtils; 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.utils.BatchNumberGenerator; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.xzd.domain.*; @@ -76,7 +76,7 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + }else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } int i = (bo.getPageNum() - 1) * bo.getPageSize(); bo.setOffset(i); @@ -183,6 +197,20 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + }else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdSupplierInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdSupplierInfoServiceImpl.java index 6f78968e..f1584cfb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdSupplierInfoServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdSupplierInfoServiceImpl.java @@ -17,7 +17,9 @@ 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.utils.BatchNumberGenerator; +import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.xzd.domain.*; @@ -91,6 +93,8 @@ public class XzdSupplierInfoServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + }else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } + Integer i = (bo.getPageNum() - 1) * bo.getPageSize(); bo.setOffset(i); @@ -216,6 +235,21 @@ public class XzdSupplierInfoServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + }else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } + boolean flag = baseMapper.insert(add) > 0; if (!flag) { return false; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml index 6a9c8aa4..ac32584b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml @@ -58,6 +58,10 @@ + + AND project.ssgs = #{ssgs} + + AND project.project_number LIKE CONCAT('%',#{projectNumber},'%') diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml index e518752c..9bbe459c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml @@ -39,6 +39,10 @@ LEFT JOIN xzd_supplier_open_bank as bank ON yhxx.open_bank = bank.open_bank and yhxx.branch_name = bank.branch_name + + AND info.ssgs = #{bo.ssgs} + + AND info.unified_social_credit_code = #{bo.unifiedSocialCreditCode} @@ -99,6 +103,10 @@ AND info.district_county = #{bo.districtCounty} + + AND info.creator_dept = #{bo.createDept} + + ORDER BY info.create_time DESC From bb8c951651fb5e8d17d10f935d269b604ac769f6 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Mon, 8 Dec 2025 18:51:31 +0800 Subject: [PATCH 63/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BA=8B=E6=95=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxgl/service/impl/JxWhjlServiceImpl.java | 1 + .../HseSafetySgdanjlController.java | 13 ++- .../controller/HseSafetySgzgbhController.java | 11 ++- .../safety/accident/domain/HseSafetyFcxx.java | 9 +- .../safety/accident/domain/HseSafetyZgxx.java | 6 +- .../accident/domain/bo/HseSafetyFcxxBo.java | 12 ++- .../domain/bo/HseSafetySgzgfcxqReq.java | 34 +++++++ .../accident/domain/bo/HseSafetyZgxxBo.java | 6 +- .../accident/domain/vo/HseSafetyFcxxVo.java | 17 ++-- .../accident/domain/vo/HseSafetySgzgbhVo.java | 10 +++ .../accident/domain/vo/HseSafetyZgxxVo.java | 13 ++- .../service/IHseSafetySgzgbhService.java | 7 ++ .../impl/HseSafetyFcxxServiceImpl.java | 1 - .../impl/HseSafetySgdanjlServiceImpl.java | 6 +- .../impl/HseSafetySgzgbhServiceImpl.java | 90 ++++++++++++++++--- .../impl/HseSafetyZgxxServiceImpl.java | 46 +++++++++- .../safety/gcjkjl/domain/bo/HseGcjkBo.java | 2 +- .../service/impl/HseGcjkServiceImpl.java | 1 + 18 files changed, 235 insertions(+), 50 deletions(-) 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 1ada9e73..e68d77c5 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 @@ -96,6 +96,7 @@ public class JxWhjlServiceImpl extends ServiceImpl impleme lqw.eq(bo.getMaintenanceDate() != null, JxWhjl::getMaintenanceDate, bo.getMaintenanceDate()); lqw.eq(bo.getMaintenanceHours() != null, JxWhjl::getMaintenanceHours, bo.getMaintenanceHours()); lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceItems()), JxWhjl::getMaintenanceItems, bo.getMaintenanceItems()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentName()), JxWhjl::getEquipmentName, bo.getEquipmentName()); lqw.eq(StringUtils.isNotBlank(bo.getPartsReplaced()), JxWhjl::getPartsReplaced, bo.getPartsReplaced()); lqw.eq(StringUtils.isNotBlank(bo.getMaterialsUsed()), JxWhjl::getMaterialsUsed, bo.getMaterialsUsed()); lqw.eq(bo.getMaintainer() != null, JxWhjl::getMaintainer, bo.getMaintainer()); 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 index 0743423b..fef382ac 100644 --- 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 @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +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; @@ -36,6 +38,15 @@ public class HseSafetySgdanjlController extends BaseController { private final IHseSafetySgdanjlService hseSafetySgdanjlService; + /** + * 头部数据返回 + */ +// @SaCheckPermission("jxzgbh:yhzgbh:list") +// @GetMapping("/getListHead") +// public R getListHead(HseSafetySgzgbhBo bo) { +// return R.ok(hseSafetySgzgbhService.getListHead(bo)); +// } + /** * 查询安全-事故档案记录列表 */ @@ -61,7 +72,7 @@ public class HseSafetySgdanjlController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("accident:safetySgdanjl:query") +// @SaCheckPermission("accident:safetySgdanjl:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { 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 index ad30bb8e..45917723 100644 --- 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 @@ -57,6 +57,15 @@ public class HseSafetySgzgbhController extends BaseController { public TableDataInfo list(HseSafetySgzgbhBo bo, PageQuery pageQuery) { return hseSafetySgzgbhService.queryPageList(bo, pageQuery); } + /** + * 查询安全-事故整改闭环列表 + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @GetMapping("/getNoPass") + public R getNoPass(HseSafetySgzgbhBo bo) { + String noPass = hseSafetySgzgbhService.getNoPass(bo); + return R.ok(noPass); + } /** * 导出安全-事故整改闭环列表 @@ -74,7 +83,7 @@ public class HseSafetySgzgbhController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("accident:safetySgzgbh:query") +// @SaCheckPermission("accident:safetySgzgbh:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { 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 index d023720a..c515fd70 100644 --- 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 @@ -4,6 +4,8 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; + +import java.time.LocalDate; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -47,12 +49,7 @@ public class HseSafetyFcxx extends BaseEntity { /** * 复查日期 */ - private Date reviewDate; - - /** - * 复查意见 - */ - private String reviewOpinion; + private LocalDate reviewDate; /** * 复查状态 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 index d3507dd9..f611ae5d 100644 --- 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 @@ -4,6 +4,8 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; + +import java.time.LocalDate; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -42,12 +44,12 @@ public class HseSafetyZgxx extends BaseEntity { /** * 整改开始日期 */ - private Date abarbeitungKsdate; + private LocalDate abarbeitungKsdate; /** * 整改结束日期 */ - private Date abarbeitungJsdate; + private LocalDate abarbeitungJsdate; /** * 整改措施 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 index a8887262..b0f305a1 100644 --- 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 @@ -8,6 +8,8 @@ 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; @@ -37,7 +39,7 @@ public class HseSafetyFcxxBo extends BaseEntity { /** * 整改ID */ - @NotNull(message = "整改ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "整改ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long zgId; /** @@ -50,13 +52,9 @@ public class HseSafetyFcxxBo extends BaseEntity { * 复查日期 */ @NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date reviewDate; + private LocalDate reviewDate; + - /** - * 复查意见 - */ - @NotBlank(message = "复查意见不能为空", groups = { AddGroup.class, EditGroup.class }) - private String reviewOpinion; /** * 复查状态 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 index 26076867..19f43521 100644 --- 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 @@ -1,5 +1,6 @@ package org.dromara.safety.accident.domain.bo; +import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -7,11 +8,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.safety.accident.domain.HseSafetySgzgbh; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * 安全-事故整改闭环业务对象 hse_safety_sgzgbh @@ -26,6 +30,24 @@ public class HseSafetySgzgfcxqReq implements Serializable { * 整改措施 */ private String abarbeitungMeasure; + /** + * 整改图片 + */ + private String zgFileId; + + private List zgFileUrls; + + /** + * 整改pdf文件 + */ + private String zgPdfId; + + private List zgPdfUrls; + + /** + * 复查状态 + */ + private String reviewState; /** * 不通过原因 @@ -37,4 +59,16 @@ public class HseSafetySgzgfcxqReq implements Serializable { */ private String reviewOpinionParticulars; + /** + * 文件id (多个文件逗号分隔) + */ + private String fcFileId; + private List fcFileUrls; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String fcPdfId; + private List fcPdfUrls; + } 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 index 0a41e7a4..92d9cccf 100644 --- 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 @@ -8,6 +8,8 @@ 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; @@ -44,13 +46,13 @@ public class HseSafetyZgxxBo extends BaseEntity { * 整改开始日期 */ @NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date abarbeitungKsdate; + private LocalDate abarbeitungKsdate; /** * 整改结束日期 */ @NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date abarbeitungJsdate; + private LocalDate abarbeitungJsdate; /** * 整改措施 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 index ebef3a91..afafe8bb 100644 --- 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 @@ -1,7 +1,10 @@ package org.dromara.safety.accident.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.accident.domain.HseSafetyFcxx; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -13,7 +16,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -53,18 +56,14 @@ public class HseSafetyFcxxVo implements Serializable { */ @ExcelProperty(value = "复查人") private Long review; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review") + private String reviewName; /** * 复查日期 */ @ExcelProperty(value = "复查日期") - private Date reviewDate; - - /** - * 复查意见 - */ - @ExcelProperty(value = "复查意见") - private String reviewOpinion; + private LocalDate reviewDate; /** * 复查状态 @@ -90,6 +89,7 @@ public class HseSafetyFcxxVo implements Serializable { @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String fileId; + private List fileUrls; /** * pdf文件(多个文件逗号分隔) @@ -97,6 +97,7 @@ public class HseSafetyFcxxVo implements Serializable { @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String pdfId; + private List pdfUrls; } 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 index b1d087ff..b2269aaf 100644 --- 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 @@ -4,6 +4,8 @@ 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.safety.accident.domain.HseSafetySgzgbh; import java.io.Serial; @@ -90,12 +92,16 @@ public class HseSafetySgzgbhVo implements Serializable { */ @ExcelProperty(value = "调查人") private Long jsr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "jsr") + private String jsrName; /** * 上报人 */ @ExcelProperty(value = "上报人") private Long sbr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "sbr") + private String sbrName; /** * 上报时间 @@ -114,6 +120,8 @@ public class HseSafetySgzgbhVo implements Serializable { */ @ExcelProperty(value = "整改人") private Long zgr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "zgr") + private String zgrName; /** * 复查状态 @@ -126,6 +134,8 @@ public class HseSafetySgzgbhVo implements Serializable { */ @ExcelProperty(value = "复查人") private Long fcr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "fcr") + private String fcrName; /** * 最终闭环状态 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 index eb3e1c99..4cee5177 100644 --- 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 @@ -1,7 +1,10 @@ package org.dromara.safety.accident.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.accident.domain.HseSafetyZgxx; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -13,7 +16,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -47,18 +50,20 @@ public class HseSafetyZgxxVo implements Serializable { */ @ExcelProperty(value = "整改责任人") private Long abarbeitung; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; /** * 整改开始日期 */ @ExcelProperty(value = "整改开始日期") - private Date abarbeitungKsdate; + private LocalDate abarbeitungKsdate; /** * 整改结束日期 */ @ExcelProperty(value = "整改结束日期") - private Date abarbeitungJsdate; + private LocalDate abarbeitungJsdate; /** * 整改措施 @@ -78,6 +83,7 @@ public class HseSafetyZgxxVo implements Serializable { @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String fileId; + private List fileUrls; /** @@ -86,6 +92,7 @@ public class HseSafetyZgxxVo implements Serializable { @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") private String pdfId; + private List pdfUrls; /** * 关联复查信息 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 index b4a9a910..bcce77bd 100644 --- 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 @@ -93,4 +93,11 @@ public interface IHseSafetySgzgbhService extends IService{ * @return */ HseSafetySgzgbhHeadVo getListHead(HseSafetySgzgbhBo bo); + + /** + * 获取不通过原因 + * @param bo + * @return + */ + String getNoPass(HseSafetySgzgbhBo bo); } 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 index eec03625..aea8146a 100644 --- 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 @@ -77,7 +77,6 @@ public class HseSafetyFcxxServiceImpl extends ServiceImpl 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.like(StringUtils.isNotBlank(bo.getDanbh()), HseSafetySgdanjl::getDanbh, bo.getDanbh()); + lqw.like(StringUtils.isNotBlank(bo.getProject()), HseSafetySgdanjl::getProject, bo.getProject()); + lqw.like(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()); 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 index 752053ab..73dba277 100644 --- 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 @@ -1,5 +1,8 @@ package org.dromara.safety.accident.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.BeanUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.dromara.common.core.exception.ServiceException; @@ -16,23 +19,21 @@ 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.HseSafetyFcxx; 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.domain.HseSafetyZgxx; +import org.dromara.safety.accident.domain.bo.*; +import org.dromara.safety.accident.domain.vo.*; 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.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -61,6 +62,9 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl().eq(HseSafetyZgxx::getMasterId, sgzgbh.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); + if (zgxx == null){ + throw new ServiceException("找不到整改信息"); + } + bo.setZgId(zgxx.getId()); 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()); @@ -253,9 +264,51 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl reqs = new ArrayList<>(); + if (vo.getZgxxVos() != null){ + vo.getZgxxVos().forEach(v -> { + HseSafetySgzgfcxqReq req = new HseSafetySgzgfcxqReq(); + req.setAbarbeitungMeasure(v.getAbarbeitungMeasure()); + req.setZgFileId(v.getFileId()); + req.setZgFileUrls(v.getFileUrls()); + req.setZgPdfId(v.getPdfId()); + req.setZgPdfUrls(v.getPdfUrls()); + if (v.getFcxxVo() == null){ + throw new ServiceException("归档失败,找不到对应的复查记录,请联系管理员"); + } + req.setReviewState(v.getFcxxVo().getReviewState()); + req.setNotPassCause(v.getFcxxVo().getNotPassCause()); + req.setReviewOpinionParticulars(v.getFcxxVo().getReviewOpinionParticulars()); + req.setFcFileId(v.getFcxxVo().getFileId()); + req.setFcFileUrls(v.getFcxxVo().getFileUrls()); + req.setFcPdfId(v.getFcxxVo().getPdfId()); + req.setFcPdfUrls(v.getFcxxVo().getPdfUrls()); + reqs.add(req); + }); + } + sgdanjlBo.setZgfcxq(JSONUtil.toJsonStr(reqs)); + sgdanjlService.insertByBo(sgdanjlBo); }else { hseSafetySgsb.setSgzt(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode()); @@ -269,7 +322,7 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(HseSafetySgzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgzgbh::getCreateTime, LocalDate.now().minusDays(29))); + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgzgbh::getProjectId,bo.getProjectId()).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()); @@ -279,4 +332,17 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl().eq(HseSafetyZgxx::getMasterId, bo.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); + if (zgxx == null){ + throw new ServiceException("找不到整改信息"); + } + HseSafetyFcxx fcxx = fcxxService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseSafetyFcxx::getZgId, zgxx.getId()).orderByDesc(HseSafetyFcxx::getCreateTime).last("limit 1")); + if (fcxx == null){ + throw new ServiceException("找不到复查信息"); + } + return fcxx.getNotPassCause(); + } + } 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 index 8a1572b0..09ae0dd9 100644 --- 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 @@ -12,6 +12,9 @@ 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.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.service.ISysOssService; +import org.jetbrains.annotations.NotNull; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; @@ -20,6 +23,7 @@ import org.dromara.safety.accident.domain.HseSafetyZgxx; import org.dromara.safety.accident.mapper.HseSafetyZgxxMapper; import org.dromara.safety.accident.service.IHseSafetyZgxxService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -39,6 +43,8 @@ public class HseSafetyZgxxServiceImpl extends ServiceImpl 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()); + for (HseSafetyZgxxVo vo : zgxxVos) { + String[] filesStr = vo.getFileId().split(","); + if (filesStr.length > 0) { + List fileUrls = getUrls1(filesStr); + vo.setFileUrls(fileUrls); + } + String[] pdfsStr = vo.getPdfId().split(","); + if (pdfsStr.length > 0) { + List pdfUrls = getUrls1(pdfsStr); + vo.setPdfUrls(pdfUrls); + } + HseSafetyFcxxVo fcxxVo = fcxxService.getInfoVoById(vo.getId()); + if (fcxxVo != null) { + String[] filesStr1 = fcxxVo.getFileId().split(","); + if (filesStr1.length > 0) { + List fileUrls1 = getUrls1(filesStr1); + fcxxVo.setFileUrls(fileUrls1); + } + String[] pdfsStr1 = fcxxVo.getPdfId().split(","); + if (pdfsStr1.length > 0) { + List pdfUrls1 = getUrls1(pdfsStr1); + fcxxVo.setPdfUrls(pdfUrls1); + } + } vo.setFcxxVo(fcxxVo); - }); + } } return zgxxVos; } + + @NotNull + private List getUrls1(String[] idStr) { + List pdfUrls1 = new ArrayList<>(); + for (String fileId : idStr) { + SysOssVo ossVo = ossService.getById(Long.parseLong(fileId)); + if (ossVo != null) { + pdfUrls1.add(ossVo.getUrl()); + } + } + return pdfUrls1; + } } 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 index 8d9db280..e8875169 100644 --- 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 @@ -32,7 +32,7 @@ public class HseGcjkBo extends BaseEntity { /** * 监控编号 */ - @NotBlank(message = "监控编号不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "监控编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String monitorNo; /** 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 index a54dd46e..1719be90 100644 --- 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 @@ -81,6 +81,7 @@ public class HseGcjkServiceImpl extends ServiceImpl impl lqw.orderByDesc(HseGcjk::getId); lqw.eq(StringUtils.isNotBlank(bo.getMonitorNo()), HseGcjk::getMonitorNo, bo.getMonitorNo()); lqw.eq(bo.getMasterId() != null, HseGcjk::getMasterId, bo.getMasterId()); + lqw.eq(bo.getProjectId() != null, HseGcjk::getProjectId, bo.getProjectId()); 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()); From f62c5426843858bc6f2e9feee1b37dfeda85b811 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Mon, 8 Dec 2025 19:10:04 +0800 Subject: [PATCH 64/73] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xinnengyuan/.gitignore | 1 + .../controller/MsgConfigController.java | 60 +++------ .../controller/BusAttendanceController.java | 60 ++++----- .../dromara/project/domain/BusProject.java | 5 + .../dto/project/BusProjectCreateReq.java | 5 + .../domain/vo/project/BusProjectVo.java | 5 + .../service/impl/MqDelayTaskServiceImpl.java | 1 + .../HazardHiddenDangerRectifyServiceImpl.java | 86 +++++++++---- .../system/service/ISysDeptService.java | 8 -- .../service/impl/SysDeptServiceImpl.java | 13 -- .../impl/XzdBidPreProjectServiceImpl.java | 86 ++++++------- .../service/impl/XzdProjectServiceImpl.java | 114 +++++++++++------- 12 files changed, 239 insertions(+), 205 deletions(-) diff --git a/xinnengyuan/.gitignore b/xinnengyuan/.gitignore index 2adafeb0..e1e3d8ac 100644 --- a/xinnengyuan/.gitignore +++ b/xinnengyuan/.gitignore @@ -54,3 +54,4 @@ docs /file .idea/ chat-memory/ +queries/ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java index 373d5204..c4b08f44 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java @@ -1,37 +1,28 @@ package org.dromara.message.controller; -import java.util.List; -import java.util.Objects; - -import cn.hutool.core.bean.BeanUtil; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.message.domain.bo.MsgConfigAddReq; -import org.dromara.message.domain.bo.MsgConfigEditReq; -import org.dromara.system.domain.bo.SysDeptBo; -import org.dromara.system.domain.vo.SysDeptVo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysDeptService; -import org.dromara.system.service.ISysUserService; -import org.springframework.boot.actuate.beans.BeansEndpoint; -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 cn.hutool.core.bean.BeanUtil; +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.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.message.domain.vo.MsgConfigVo; -import org.dromara.message.domain.bo.MsgConfigBo; -import org.dromara.message.service.IMsgConfigService; +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.message.domain.bo.MsgConfigAddReq; +import org.dromara.message.domain.bo.MsgConfigBo; +import org.dromara.message.domain.bo.MsgConfigEditReq; +import org.dromara.message.domain.vo.MsgConfigVo; +import org.dromara.message.service.IMsgConfigService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 消息配置 @@ -46,21 +37,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; public class MsgConfigController extends BaseController { private final IMsgConfigService msgConfigService; - private final ISysUserService userService; - private final ISysDeptService deptService; - - /** - * 获取当前用户所在上级部门ID - */ - @SaCheckPermission("message:config:allUsersOfTheDepartment") - @GetMapping("/allUsersOfTheDepartment") - public R allUsersOfTheDepartment() { - //获取当前用户的上级部门 - Long deptId = Objects.requireNonNull(LoginHelper.getLoginUser()).getDeptId(); - SysDeptBo bm = deptService.selectDeptByIdBo(deptId); - //从顶级往下推两个部门 - return R.ok(bm); - } /** * 查询消息配置列表 @@ -79,7 +55,7 @@ public class MsgConfigController extends BaseController { @SaCheckPermission("message:config:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(msgConfigService.queryById(id)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java index 200a04f9..6f84f6fb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java @@ -1,36 +1,35 @@ package org.dromara.project.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.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.attendance.*; -import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; -import org.dromara.project.domain.vo.attendance.*; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; -import org.dromara.project.service.IBusProjectTeamService; -import org.dromara.system.domain.dto.FbUserListDto; -import org.dromara.system.domain.vo.SysUserVo; -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 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.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.project.domain.vo.BusAttendanceVo; -import org.dromara.project.domain.bo.BusAttendanceBo; -import org.dromara.project.service.IBusAttendanceService; +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.contractor.domain.dto.contractor.SubContractorQueryReq; +import org.dromara.contractor.domain.vo.contractor.SubContractorVo; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.bo.BusAttendanceBo; +import org.dromara.project.domain.dto.attendance.*; +import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; +import org.dromara.project.domain.vo.BusAttendanceVo; +import org.dromara.project.domain.vo.attendance.*; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; +import org.dromara.project.service.IBusAttendanceService; +import org.dromara.project.service.IBusProjectTeamService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 考勤 @@ -92,7 +91,7 @@ public class BusAttendanceController extends BaseController { @SaCheckPermission("project:attendance:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(busAttendanceService.queryById(id)); } @@ -138,6 +137,7 @@ public class BusAttendanceController extends BaseController { public R> getClockDateForTwoWeekList(TwoWeekDto dto) { return R.ok(busAttendanceService.getClockDateForTwoWeekList(dto)); } + /** * 查询项目施工人员当天考勤状况 */ @@ -150,8 +150,8 @@ public class BusAttendanceController extends BaseController { * 查询当天出勤人员 */ @GetMapping("/list/attendanceUser") - public TableDataInfo getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery) { - return busAttendanceService.getTodayAttendanceUser(dto,pageQuery); + public TableDataInfo getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery) { + return busAttendanceService.getTodayAttendanceUser(dto, pageQuery); } /** @@ -209,8 +209,8 @@ public class BusAttendanceController extends BaseController { * 查询分包当天出勤人员 */ @GetMapping("/sub/list/attendanceUser") - public TableDataInfo getSubTodayAttendanceUser(SubTodayUserDto dto, PageQuery pageQuery) { - return busAttendanceService.getSubTodayAttendanceUser(dto,pageQuery); + public TableDataInfo getSubTodayAttendanceUser(SubTodayUserDto dto, PageQuery pageQuery) { + return busAttendanceService.getSubTodayAttendanceUser(dto, pageQuery); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java index 52bde677..d7db496a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java @@ -168,4 +168,9 @@ public class BusProject extends BaseEntity { */ private String position; + /** + * xzd项目id + */ + private Long xzdProjectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java index 8d83f563..fa973bb3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java @@ -140,4 +140,9 @@ public class BusProjectCreateReq implements Serializable { * 所属部门列表 */ private List deptIds; + + /** + * xzd项目id + */ + private Long xzdProjectId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java index 8334204f..8c53f358 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java @@ -223,4 +223,9 @@ public class BusProjectVo implements Serializable { */ private List roleVos; + /** + * xzd项目id + */ + private Long xzdProjectId; + } 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 index 54bdfe83..46d9f292 100644 --- 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 @@ -99,6 +99,7 @@ public class MqDelayTaskServiceImpl extends ServiceImpl userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hiddenDanger.getDangerLevelId(), projectId); - SseMessageDto sseDto = new SseMessageDto(); - String title = "安全隐患工单[" + dangerCode + "]未进行整改,请及时关注!"; - for (Long userId : userIds) { + // 隐患等级 + HazardRule rule = hazardRuleService.getById(hiddenDanger.getDangerLevelId()); + String notifyMethod = rule.getNotifyMethod(); + if (notifyMethod.equals("1")) { + // 通知领导 + } else { + // 发送消息 + String dangerCode = hiddenDanger.getDangerCode(); + Long rectifyUserId = hiddenDanger.getRectifyUserId(); + Long projectId = hiddenDanger.getProjectId(); + String titleRectify = "您的安全隐患工单[" + dangerCode + "]已超时,请及时处理!"; try { - chatServerHandler.sendSystemMessageToUser(userId, title, "2"); + chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); + SseMessageUtils.sendMessage(rectifyUserId, titleRectify); } catch (Exception e) { - log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, title, 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); + // 重复整改 + if (notifyMethod.equals("2")) { + // 获取通知时间 + LocalDateTime executeTime = LocalDateTime.now(); + String responseUnit = rule.getResponseUnit(); + switch (responseUnit) { + case "3" -> executeTime = executeTime.plusDays(rule.getResponseTime()); + case "2" -> executeTime = executeTime.plusHours(rule.getResponseTime()); + case "1" -> executeTime = executeTime.plusMinutes(rule.getResponseTime()); + } + // 发送整改期限数据到消息队列 + MqDelayTask task = new MqDelayTask(); + task.setBizType(MqDelayTaskTypeEnum.HIDDEN_DANGER.getType()); + task.setBizId(bizId); + task.setExecuteTime(executeTime); + try { + mqDelayTaskService.addDelayTask(task); + } catch (Exception e) { + log.error("添加延迟任务失败,延迟任务: {}", task, e); + throw new ServiceException("添加延迟任务失败"); + } } } - 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/system/service/ISysDeptService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index 82e1b0ee..2d4eaac2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -1,7 +1,6 @@ package org.dromara.system.service; import cn.hutool.core.lang.tree.Tree; -import org.dromara.system.domain.SysDept; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.vo.SysDeptVo; @@ -60,13 +59,6 @@ public interface ISysDeptService { */ SysDeptVo selectDeptById(Long deptId); - /** - * 根据部门ID获取到顶级部门 - * - * @return 部门信息 - */ - SysDeptBo selectDeptByIdBo(Long deptId); - /** * 根据部门ID查询所属项目ID列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 2153b337..0b0ebd47 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -35,7 +35,6 @@ import org.dromara.system.mapper.SysPostMapper; import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISysDeptService; -import org.dromara.system.service.ISysRoleService; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; @@ -60,8 +59,6 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { private final SysUserMapper userMapper; private final SysPostMapper postMapper; - private final ISysRoleService roleService; - /** * 查询部门管理数据 * @@ -220,16 +217,6 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return dept; } - /** - * 根据部门ID获取到顶级部门 - * - * @return 部门信息 - */ - @Override - public SysDeptBo selectDeptByIdBo(Long deptId) { - return null; - } - /** * 根据部门ID查询所属项目ID列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java index 50b9f74d..fe0ddb5a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java @@ -1,7 +1,10 @@ package org.dromara.xzd.biddingManagement.biaoqianlixiang.service.impl; import cn.hutool.core.bean.BeanUtil; +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.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; @@ -9,19 +12,20 @@ import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; -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.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBidPreProject; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBqlxProjectInfo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdProjectRiskAssessment; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBidPreProjectBo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBqlxProjectInfoBo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.BiddingManagementDto; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.QuerBiddingManagementDto; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QuerListXzdBidPreVo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QueryListXzdVo; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBidPreProjectVo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBqlxProjectInfoVo; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.mapper.XzdBidPreProjectMapper; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService; import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBqlxProjectInfoService; import org.dromara.xzd.biddingManagement.biddingDocument.domain.XzdBiddingFileEstimate; import org.dromara.xzd.biddingManagement.biddingDocument.service.IXzdBiddingFileEstimateService; @@ -41,15 +45,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBidPreProjectBo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBidPreProjectVo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBidPreProject; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.mapper.XzdBidPreProjectMapper; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -69,7 +66,6 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl(XzdBqlxProjectInfo.class).eq(XzdBqlxProjectInfo::getBidPreProjectId, id)); XzdBqlxProjectInfoVo res = new XzdBqlxProjectInfoVo(); - if (xzdBqlxProjectInfo != null){ + if (xzdBqlxProjectInfo != null) { BeanUtils.copyProperties(xzdBqlxProjectInfo, res); } querListXzdBidPreVo.setXzdBqlxProjectInfoVo(res); @@ -141,12 +135,12 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl list = baseMapper.queryPageListBy(bo,pageQuery.getPageSize()); - Integer res = baseMapper.queryPageListByNum(bo,pageQuery.getPageSize()); + List list = baseMapper.queryPageListBy(bo, pageQuery.getPageSize()); + Integer res = baseMapper.queryPageListByNum(bo, pageQuery.getPageSize()); queryListXzdVo.setList(list); @@ -203,19 +197,19 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { } for (Long id : ids) { @@ -285,7 +278,7 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl 0) throw new ServiceException("招标文件审估已引用,不允许删除"); //投标文件 - l = xzdBiddingDocumentService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdBiddingDocument::getProjectName, id)); + l = xzdBiddingDocumentService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdBiddingDocument::getProjectName, id)); if (l > 0) throw new ServiceException("投标文件已引用,不允许删除"); //投标保证金缴纳 @@ -305,23 +298,22 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl 0) throw new ServiceException("招标代理服务费支付申请已引用,不允许删除"); // 删除附件 - if (!StringUtils.isEmpty(xzdBidPreProjectVo.getFileId())){ - List collect = Arrays.stream(xzdBidPreProjectVo.getFileId().split(",")).map(item -> { - return Long.parseLong(item); - }).collect(Collectors.toList()); + if (!StringUtils.isEmpty(xzdBidPreProjectVo.getFileId())) { + List collect = Arrays.stream(xzdBidPreProjectVo.getFileId().split(",")).map(Long::parseLong).collect(Collectors.toList()); sysOssService.deleteWithValidByIds(collect, false); } // 删除项目信息 HashMap objectObjectHashMap = new HashMap<>(); - objectObjectHashMap.put("bid_pre_project_id",id); + objectObjectHashMap.put("bid_pre_project_id", id); iXzdBqlxProjectInfoService.removeByMap(objectObjectHashMap); } return baseMapper.deleteByIds(ids) > 0; } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' @@ -329,7 +321,7 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl queryPageList(XzdProjectBo bo, PageQuery pageQuery) { - if(pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) { + if (pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) { bo.setPageNum(pageQuery.getPageNum()); bo.setPageSize(pageQuery.getPageSize()); - }else { + } else { bo.setPageNum(1); bo.setPageSize(10); } @@ -112,12 +119,12 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); if (ids.size() == 2) { bo.setSsgs(deptVo.getDeptId()); - }else { + } else { bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); } } @@ -202,30 +209,30 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); if (ids.size() == 2) { add.setSsgs(deptVo.getDeptId()); - }else { + } else { add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); } } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); - }else { + } else { return false; } //项目概况处理 - if (bo.getXmgk() != null){ + if (bo.getXmgk() != null) { bo.getXmgk().setXzdProjectId(add.getId()); xzdProjectProfileService.insertByBo(bo.getXmgk()); } //项目人员处理 - if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ + if (bo.getXmry() != null && !bo.getXmry().isEmpty()) { for (XzdProjectPersonnelBo personnelBo : bo.getXmry()) { personnelBo.setXzdProjectId(add.getId()); xzdProjectPersonnelService.insertByBo(personnelBo); @@ -233,19 +240,19 @@ public class XzdProjectServiceImpl extends ServiceImpl 0; - if (!b){ + if (!b) { return false; } //项目概况处理 - if (bo.getXmgk() != null){ + if (bo.getXmgk() != null) { xzdProjectProfileService.updateByBo(bo.getXmgk()); } //项目人员处理 - if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ + if (bo.getXmry() != null && !bo.getXmry().isEmpty()) { // 获取原有记录的ID列表 if (oldValue.getXmry() != null && !oldValue.getXmry().isEmpty()) { @@ -323,9 +330,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectWarehousesBo boValue : bo.getXmck()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectWarehouses temp = new XzdProjectWarehouses(); @@ -373,9 +380,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectInternalAccountsBo boValue : bo.getNbzj()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectInternalAccounts temp = new XzdProjectInternalAccounts(); @@ -412,9 +419,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectParticipatingUnitsBo boValue : bo.getCjdw()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectParticipatingUnits temp = new XzdProjectParticipatingUnits(); @@ -451,9 +458,9 @@ public class XzdProjectServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } @@ -549,7 +556,7 @@ public class XzdProjectServiceImpl extends ServiceImpl profileLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -627,7 +634,7 @@ public class XzdProjectServiceImpl extends ServiceImpl Date: Mon, 8 Dec 2025 19:28:29 +0800 Subject: [PATCH 65/73] =?UTF-8?q?12-05-=E4=BA=8B=E6=95=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BA=8B=E6=95=85=E4=B8=8A=E6=8A=A5=E3=80=81?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E8=B0=83=E6=9F=A5-=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safety/accident/service/impl/HseSafetySgdcServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 index e58b3439..e1b2270a 100644 --- 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 @@ -89,6 +89,7 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl queryPageList(HseSafetySgdcBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + setValue(result.getRecords()); return TableDataInfo.build(result); } From 511bf33914cceaf6774244643a8467a692126100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Mon, 8 Dec 2025 19:36:59 +0800 Subject: [PATCH 66/73] =?UTF-8?q?12-05-=E4=BA=8B=E6=95=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BA=8B=E6=95=85=E4=B8=8A=E6=8A=A5=E3=80=81?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E8=B0=83=E6=9F=A5-=E4=BF=AE=E6=94=B9-?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HseSafetySgdcServiceImpl.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) 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 index e1b2270a..3090167e 100644 --- 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 @@ -26,7 +26,6 @@ import org.dromara.system.service.impl.SysUserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -207,11 +206,11 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl vos){ - List deptVos = new ArrayList<>(); - if (!vos.isEmpty()) { - //获取部门 - deptVos = deptService.querListDept(); - } +// List deptVos = new ArrayList<>(); +// if (!vos.isEmpty()) { +// //获取部门 +// deptVos = deptService.querListDept(); +// } for (HseSafetySgdcVo vo : vos) { //事故关联项目id HseSafetySgsb hseSafetySgsbVo = baseMapper.getSgsb(vo.getSgId()); @@ -224,10 +223,14 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl Date: Mon, 8 Dec 2025 19:57:28 +0800 Subject: [PATCH 67/73] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SubConstructionUserController.java | 2 +- .../SubConstructionUserFileController.java | 16 ++++ .../SubConstructionUserChangeProjectReq.java | 7 ++ .../SubConstructionUserVo.java | 27 ++++++ .../ISubConstructionUserFileService.java | 9 ++ .../SubConstructionUserFileServiceImpl.java | 91 +++++++++++++++++++ .../impl/SubConstructionUserServiceImpl.java | 39 +++++++- .../controller/BusAttendanceController.java | 8 ++ .../controller/BusProjectTeamController.java | 7 ++ .../domain/BusConstructionUserExit.java | 24 +++++ .../vo/attendance/BusAttendanceListByDay.java | 12 +++ .../BusAttendanceMonthByUserIdCountVo.java | 34 +++++++ .../BusAttendanceMonthByUserIdVo.java | 5 + .../BusConstructionUserExitVo.java | 23 +++++ .../vo/projectteam/BusProjectTeamCountVo.java | 45 +++++++++ .../service/IBusAttendanceService.java | 4 + .../service/IBusProjectTeamService.java | 8 +- .../impl/BusAttendanceServiceImpl.java | 79 +++++++++++++++- .../BusConstructionUserExitServiceImpl.java | 34 +++++++ .../impl/BusProjectTeamMemberServiceImpl.java | 28 +++++- .../impl/BusProjectTeamServiceImpl.java | 51 +++++++++-- 21 files changed, 530 insertions(+), 23 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java 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 30f2a027..fea2b053 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 @@ -140,7 +140,7 @@ public class SubConstructionUserController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("contractor:constructionUser:query") +// @SaCheckPermission("contractor:constructionUser:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java index 7ec70011..34c4e7ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; /** * 施工人员文件存储 @@ -45,6 +46,21 @@ public class SubConstructionUserFileController extends BaseController { return R.ok(constructionUserFileService.queryList(req)); } + + /** + * 下载用户文件的ZIP(按类型分文件夹) + * @param userId 用户ID + */ + @GetMapping("/downloadFiles") + public void downloadUserFilesByType(Long userId,String type, HttpServletResponse response) { + try { + constructionUserFileService.generateTypeGroupZip(userId,type, response); + } catch (Exception e) { + e.printStackTrace(); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + } + /** * 导出施工人员文件存储列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java index 9e95b14a..5e9848fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java @@ -34,4 +34,11 @@ public class SubConstructionUserChangeProjectReq implements Serializable { */ @NotNull(message = "分包公司id不能为空") private Long contractorId; + + + /** + * 工种 + */ + private String typeOfWork; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java index b57de4fe..6be001ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java @@ -9,12 +9,15 @@ import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; +import org.dromara.project.domain.vo.constructionuserexit.BusConstructionUserExitVo; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; +import java.util.List; /** @@ -295,5 +298,29 @@ public class SubConstructionUserVo implements Serializable { */ private Long sysUserId; + /** + * 岗位(默认为0普通员工,1组长) + */ private String postId; + + /** + * 分包管理人员ID + */ + private String fbId; + + /** + * 分包管理人员名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "fbId") + private String fbName; + + /** + * 文件 + */ + List subConstructionUserFileVos; + + /** + * 记录 + */ + List busConstructionUserExitVos; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java index 65bcfecc..04af8b5f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java @@ -9,6 +9,7 @@ import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUse import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileSaveReq; import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileTemplateReq; import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -82,4 +83,12 @@ public interface ISubConstructionUserFileService extends IService getFileByUserId(Long userId); + + /** + * 获取施工人员文件列表 + */ + Map> fileList(Long userId); + + + void generateTypeGroupZip(Long userId,String type, HttpServletResponse response) throws Exception; } 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 70c09e5d..1fb5f21b 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 @@ -45,6 +45,9 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; @@ -470,6 +473,94 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl> fileList(Long userId) { + + List subConstructionUserFileVos = baseMapper.selectVoList(Wrappers.lambdaQuery() + .eq(SubConstructionUserFile::getUserId, userId)); + Map> resultMap = subConstructionUserFileVos.stream().collect(Collectors.groupingBy(SubConstructionUserFileVo::getFileType)); + return resultMap; + } + + + + + @Override + public void generateTypeGroupZip(Long userId,String type, HttpServletResponse response) throws Exception { + + // 1. 查询该用户的所有文件 + List list = lambdaQuery() + .eq(SubConstructionUserFile::getUserId, userId) + .eq(StrUtil.isNotBlank(type),SubConstructionUserFile::getFileType, type) + .list(); + if (list.isEmpty()) { + throw new ServiceException("该用户没有文件"); + } + List userFileType = dictTypeService.selectDictDataByType("user_file_type"); + Map collect = userFileType.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel)); + + // 3. 设置响应头(ZIP文件下载) + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=\"user_files.zip\""); + + // 4. 压缩流直接写入响应(无临时文件) + try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { + // 遍历每个文件类型分组 + for (SubConstructionUserFile entry : list) { + String fileType = entry.getFileType(); // 文件夹名称:文件类型(如"01") + + String fileTypeName = collect.get(fileType); + + String fileUrl = entry.getPath(); + if (StringUtils.isBlank(fileUrl)) { + continue; + } + String[] split = fileUrl.split(","); + List ossIds = Arrays.stream(split).map(Long::valueOf).toList(); + List sysOssVos = ossService.listByIds(ossIds); + for (SysOssVo sysOssVo : sysOssVos) { + String ossVoUrl = sysOssVo.getUrl(); + if (StringUtils.isBlank(ossVoUrl)) { + continue; + } + String zipEntryName = fileTypeName + "/" + sysOssVo.getOriginalName(); + ZipEntry zipEntry = new ZipEntry(zipEntryName); + zipOut.putNextEntry(zipEntry); + // 下载远程文件并写入ZIP + URL url = new URL(ossVoUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(10000); + + try (InputStream in = connection.getInputStream()) { + byte[] buffer = new byte[1024 * 8]; + int len; + while ((len = in.read(buffer)) != -1) { + zipOut.write(buffer, 0, len); + } + } finally { + connection.disconnect(); + zipOut.closeEntry(); // 关闭当前条目 + } + } + } + } + } + + + + + + + + + + + + + + /** * 递归扫描指定目录,找到 “姓名-Id” 格式的文件夹并解析 */ 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 19d25689..2217c133 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 @@ -38,9 +38,11 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubConstructionUserFile; import org.dromara.contractor.domain.SubContractor; import org.dromara.contractor.domain.dto.constructionuser.*; +import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileQueryReq; import org.dromara.contractor.domain.enums.SubConstructionUserFileStatusEnum; import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo; import org.dromara.contractor.domain.vo.constructionuser.*; +import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; import org.dromara.contractor.domain.vo.contractor.SubContractorVo; import org.dromara.contractor.mapper.SubConstructionUserMapper; import org.dromara.contractor.service.ISubConstructionUserFileService; @@ -48,10 +50,12 @@ import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.*; import org.dromara.project.domain.dto.attendance.TodayUserDto; +import org.dromara.project.domain.dto.constructionuserexit.BusConstructionUserExitQueryReq; import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusAttendanceCommuterEnum; import org.dromara.project.domain.enums.BusConstructionUserAttendanceStatusEnum; import org.dromara.project.domain.vo.attendance.AttendanceTodayUserVo; +import org.dromara.project.domain.vo.constructionuserexit.BusConstructionUserExitVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.service.*; import org.dromara.system.domain.SysUser; @@ -157,6 +161,10 @@ public class SubConstructionUserServiceImpl extends ServiceImpl subConstructionUserFileVos = constructionUserFileService.queryList(req); + vo.setSubConstructionUserFileVos(subConstructionUserFileVos); + BusConstructionUserExitQueryReq busConstructionUserExitQueryReq = new BusConstructionUserExitQueryReq(); + busConstructionUserExitQueryReq.setUserId(constructionUser.getSysUserId()); + List busConstructionUserExitVos = busConstructionUserExitService.queryList(busConstructionUserExitQueryReq); + vo.setBusConstructionUserExitVos(busConstructionUserExitVos); + return vo; } /** @@ -661,7 +678,9 @@ public class SubConstructionUserServiceImpl extends ServiceImpl lambdaUpdate = Wrappers.lambdaUpdate(SubConstructionUser.class) .eq(SubConstructionUser::getId, id) .set(SubConstructionUser::getProjectId, req.getProjectId()) - .set(SubConstructionUser::getContractorId, req.getContractorId()); + .set(SubConstructionUser::getContractorId, req.getContractorId()) + .set(SubConstructionUser::getTypeOfWork, req.getTypeOfWork()) + ; userProjectRelevancyService.deleteByUserId(constructionUser.getSysUserId()); @@ -895,6 +914,22 @@ public class SubConstructionUserServiceImpl extends ServiceImpllambdaQuery() + .eq(BusProjectTeamMember::getTeamId, constructionUser.getTeamId()) + .last("limit 1") + ); + if (one != null) { + constructionUserVo.setPostId(one.getPostId()); + } + } + } return constructionUserVo; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java index 6f84f6fb..92b8b671 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java @@ -67,6 +67,14 @@ public class BusAttendanceController extends BaseController { return R.ok(busAttendanceService.listAttendanceMonthListByUserId(req)); } + /** + * 统计施工人员月份考勤列表 + */ + @GetMapping("/count/month/byUserId") + public R countAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { + return R.ok(busAttendanceService.countAttendanceMonthListByUserId(req)); + } + @GetMapping("/sub/list/month/byUserId") public R> subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { return R.ok(busAttendanceService.subListAttendanceMonthListByUserId(req)); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java index f9fa5bba..26bb9211 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java @@ -23,6 +23,7 @@ import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; import org.dromara.project.domain.vo.BusProjectPunchrangeVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamCountVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.service.IBusProjectPunchrangeService; @@ -181,4 +182,10 @@ public class BusProjectTeamController extends BaseController { return R.ok(busProjectTeamService.queryList(req)); } + + @GetMapping("/teamCount") + public R teamCount(BusProjectTeamQueryReq req) { + return R.ok(busProjectTeamService.teamCount(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java index 0c83aa24..7a0c58cc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java @@ -72,5 +72,29 @@ public class BusConstructionUserExit implements Serializable { */ private String remark; + /** + * 工种 + */ + private String typeOfWork; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 分包公司id + */ + private Long contractorId; + + /** + * 分包公司名称 + */ + private String contractorName; + + /** + * 班组名称 + */ + private String teamName; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java index 29ac1f47..4cf3d63a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java @@ -33,6 +33,17 @@ public class BusAttendanceListByDay { */ private String clockStatus; + /** + * 人脸照 + */ + private String facePic; + + + private String url; + + + + public static BusAttendanceListByDay build(BusAttendance attendance) { if (attendance == null) { return null; @@ -41,6 +52,7 @@ public class BusAttendanceListByDay { attendanceListByDay.setClockType(attendance.getClockType()); attendanceListByDay.setClockTime(attendance.getClockTime()); attendanceListByDay.setClockStatus(attendance.getClockStatus()); + attendanceListByDay.setFacePic(attendance.getFacePic()); return attendanceListByDay; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java new file mode 100644 index 00000000..322965b6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java @@ -0,0 +1,34 @@ +package org.dromara.project.domain.vo.attendance; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * @author lilemy + * @date 2025/4/8 16:58 + */ +@Data +public class BusAttendanceMonthByUserIdCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = -6172238396618801431L; + + /** + * 出勤天数 + */ + private Long full; + /** + * 迟到和早退次数 + */ + private Long half; + /** + * 请假次数 + */ + private Long leave; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java index 05df4ab7..5b76244e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java @@ -37,6 +37,11 @@ public class BusAttendanceMonthByUserIdVo implements Serializable { */ private String Status; + /** + * 当天打卡状态 + */ + private Integer week; + /** * 当天打卡记录 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java index efff647d..e6648714 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java @@ -96,5 +96,28 @@ public class BusConstructionUserExitVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 工种 + */ + private String typeOfWork; + /** + * 项目名称 + */ + private String projectName; + + /** + * 分包公司id + */ + private Long contractorId; + + /** + * 分包公司名称 + */ + private String contractorName; + + /** + * 班组名称 + */ + private String teamName; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java new file mode 100644 index 00000000..313786dd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java @@ -0,0 +1,45 @@ +package org.dromara.project.domain.vo.projectteam; + +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.project.domain.BusProjectTeam; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 项目班组视图对象 bus_project_team + * + * @author lilemy + * @date 2025-03-07 + */ +@Data +public class BusProjectTeamCountVo { + + /** + * 总班组 + */ + private Integer total=0; + + /** + * 总人数 + */ + private Long peopleNumber=0L; + + /** + * 限制打卡组数 + */ + private Long limitNumber=0L; + + /** + * 出勤班组数 + */ + private Long attendanceNumber=0L; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java index 09b5f68b..489f7aa3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java @@ -44,6 +44,10 @@ public interface IBusAttendanceService extends IService{ */ List listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); + /** + * 统计用户每月考勤 + */ + BusAttendanceMonthByUserIdCountVo countAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); List subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java index d686dd09..daef99f4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java @@ -11,10 +11,7 @@ import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; -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.domain.vo.projectteam.*; import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; import org.springframework.web.bind.annotation.PathVariable; @@ -129,4 +126,7 @@ public interface IBusProjectTeamService extends IService { List getManager(Long teamId); List selectByPunchRangeIn(List punchRangeList); + + + BusProjectTeamCountVo teamCount(BusProjectTeamQueryReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index 3bf263af..2facfce5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -62,6 +62,7 @@ import java.math.BigDecimal; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; +import java.time.temporal.ValueRange; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -179,10 +180,29 @@ public class BusAttendanceServiceImpl extends ServiceImpl> dateListMap = this.lambdaQuery() + List list = this.lambdaQuery() .eq(BusAttendance::getUserId, constructionUser.getSysUserId()) .between(BusAttendance::getClockDate, start, end) - .list() + .list(); + //转成Long + // 转换逻辑:将字符串解析为Long + List longList = list.stream() + .filter(attendance -> StringUtils.isNotBlank(attendance.getFacePic())) // 过滤空字符串 + .map(attendance -> { + try { + // 假设facePic是纯数字字符串(如"123456") + return Long.parseLong(attendance.getFacePic()); + } catch (NumberFormatException e) { + // 处理转换失败的情况(如非数字字符串) + // 可选:抛异常/返回null/忽略(此处示例返回null,后续可过滤) + return null; + } + }) + .filter(java.util.Objects::nonNull) // 过滤转换失败的null + .collect(Collectors.toList()); + List sysOssVos = ossService.listByIds(longList); + Map ossMap = sysOssVos.stream().collect(Collectors.toMap(SysOssVo::getOssId, SysOssVo::getUrl)); + Map> dateListMap = list .stream().collect(Collectors.groupingBy(BusAttendance::getClockDate)); // 遍历每天,计算考勤状态 List respList = new ArrayList<>(); @@ -190,6 +210,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl attendanceListByDayList = new ArrayList<>(); String clockInStatus = null; String clockOutStatus = null; @@ -198,6 +222,12 @@ public class BusAttendanceServiceImpl extends ServiceImpl list = this.lambdaQuery() + .eq(BusAttendance::getUserId, constructionUser.getSysUserId()) + .between(BusAttendance::getClockDate, start, end) + .list(); + BusAttendanceMonthByUserIdCountVo vo = new BusAttendanceMonthByUserIdCountVo(); + long count = list.stream().filter(attendance -> ATTENDANCE_LIST.contains(attendance.getClockType())) + .map(BusAttendance::getClockDate).distinct().count(); + vo.setFull(count); + + long late = list.stream().filter(attendance -> LATE.getValue().equals(attendance.getClockStatus()) || LEAVEEARLY.getValue().equals(attendance.getClockStatus())).count(); + vo.setHalf(late); + long leave = list.stream().filter(attendance -> LEAVE.getValue().equals(attendance.getClockStatus())).count(); + vo.setLeave(leave); + return vo; + } + @Override public List subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { Long userId = req.getUserId(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserExitServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserExitServiceImpl.java index 699df33c..7c493259 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserExitServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserExitServiceImpl.java @@ -14,8 +14,12 @@ 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.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.BusConstructionUserExit; +import org.dromara.project.domain.BusProject; +import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.domain.dto.constructionuserexit.BusConstructionUserExitCreateReq; import org.dromara.project.domain.dto.constructionuserexit.BusConstructionUserExitQueryReq; @@ -23,7 +27,9 @@ import org.dromara.project.domain.dto.constructionuserexit.BusConstructionUserEx import org.dromara.project.domain.vo.constructionuserexit.BusConstructionUserExitVo; import org.dromara.project.mapper.BusConstructionUserExitMapper; import org.dromara.project.service.IBusConstructionUserExitService; +import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectTeamMemberService; +import org.dromara.project.service.IBusProjectTeamService; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.BeanUtils; @@ -55,6 +61,19 @@ public class BusConstructionUserExitServiceImpl extends ServiceImpl selectByPunchRangeIn(List punchRangeList) { return baseMapper.selectByPunchRangeIn(punchRangeList); } + + + @Override + public BusProjectTeamCountVo teamCount(BusProjectTeamQueryReq req) { + BusProjectTeamCountVo vo = new BusProjectTeamCountVo(); + List list = lambdaQuery().eq(BusProjectTeam::getProjectId, req.getProjectId()).list(); + vo.setTotal(list.size()); + List list1 = list.stream().map(BusProjectTeam::getId).toList(); + if(CollUtil.isNotEmpty(list1)){ + long count = constructionUserService.count(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, req.getProjectId()) + .in(SubConstructionUser::getTeamId, list1) + ); + vo.setPeopleNumber(count); + } + long count = list.stream().filter(projectTeam -> "0".equals(projectTeam.getIsClockIn())).count(); + vo.setLimitNumber(count); + + + List list2 = attendanceService.lambdaQuery() + .eq(BusAttendance::getProjectId, req.getProjectId()) + .eq(BusAttendance::getClockDate, LocalDate.now()) + .in(BusAttendance::getClockStatus, BusAttendanceClockStatusEnum.ATTENDANCE_LIST) + .list(); + List list11 = list2.stream().map(BusAttendance::getUserId).toList(); + if(CollUtil.isNotEmpty(list11)){ + long count1 = constructionUserService.count(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, req.getProjectId()) + .in(SubConstructionUser::getTeamId, list11) + ); + vo.setPeopleNumber(count1); + } + return vo; + } } From f5cea23daacef18a3d0c60260fefdc6e8fb45b79 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Tue, 9 Dec 2025 09:06:35 +0800 Subject: [PATCH 68/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BA=8B=E6=95=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/HseSafetySgdcServiceImpl.java | 13 +++++++++++-- .../main/java/org/dromara/safety/enums/AqEnums.java | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) 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 index 3090167e..96532344 100644 --- 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 @@ -5,6 +5,7 @@ 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.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -25,6 +26,7 @@ import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; @@ -170,6 +172,7 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl Date: Tue, 9 Dec 2025 18:50:20 +0800 Subject: [PATCH 69/73] =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BA=8B=E6=95=85bug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=92=8C=E6=84=8F=E8=A7=81=E7=AE=B1bug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BusComplaintBoxServiceImpl.java | 6 +- .../controller/HseSafetyPublicController.java | 57 ++++++++ .../controller/HseSafetySgdcController.java | 30 ++++ .../controller/HseSafetySgzgbhController.java | 2 +- .../domain/bo/HseSafetySgdcxqReq.java | 5 +- .../domain/bo/HseSafetySgssqkReq.java | 2 +- .../accident/domain/bo/HseSafetySgxqReq.java | 2 +- .../domain/bo/HseSafetySgzgfcxqReq.java | 2 +- .../accident/domain/vo/HseSafetySgsbVo.java | 11 ++ .../accident/domain/vo/SgsbCountVo.java | 22 +-- .../safety/accident/menu/SGStatusEnum.java | 14 +- .../impl/HseSafetySgdcServiceImpl.java | 47 ++++--- .../impl/HseSafetySgsbServiceImpl.java | 132 ++++++++++-------- .../impl/HseSafetySgzgbhServiceImpl.java | 90 ++++++++---- .../org/dromara/safety/enums/AqEnums.java | 2 +- 15 files changed, 296 insertions(+), 128 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetyPublicController.java 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 e25ec5a8..f4a0df4a 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 @@ -333,6 +333,9 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl lqw = new LambdaUpdateWrapper(); lqw.set(BusComplaintBox::getStatus, bo.getStatus()); lqw.eq(BusComplaintBox::getId, bo.getId()); - if ("5".equals(busComplaintBoxVo.getStatus())){ + if ("5".equals(bo.getStatus())){ BusComplaintBoxDisposeLogging logging = new BusComplaintBoxDisposeLogging(); logging.setComplaintId(bo.getId()); LoginUser loginUser = LoginHelper.getLoginUser(); @@ -351,6 +354,7 @@ public class BusComplaintBoxServiceImpl extends ServiceImpl list(SysUserBo user, PageQuery pageQuery) { + return userService.selectPageUserList(user, pageQuery); + } + + + +} 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 index 45b6918f..4d19e993 100644 --- 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 @@ -15,6 +15,10 @@ 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.contractor.domain.vo.contractor.SubContractorManagerVo; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; +import org.dromara.project.service.IBusProjectTeamService; import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; import org.dromara.safety.accident.domain.vo.SgsbCountVo; @@ -38,6 +42,32 @@ public class HseSafetySgdcController extends BaseController { private final IHseSafetySgdcService hseSafetySgdcService; + private final IBusProjectTeamService busProjectTeamService; + + private final ISubContractorService contractorService; + + + /** + * 根据项目id查询项目班组班组长信息列表 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @GetMapping("/listForeman/{projectId}") + public R> listForeman(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(busProjectTeamService.queryForemanListByProjectId(projectId)); + } + + + /** + * 根据项目id查询分包方管理人员信息列表 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @GetMapping("/listManager/{projectId}") + public R> listManager(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(contractorService.queryManagerListByProjectId(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 index 45917723..77e4aac8 100644 --- 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 @@ -44,7 +44,7 @@ public class HseSafetySgzgbhController extends BaseController { /** * 头部数据返回 */ - @SaCheckPermission("jxzgbh:yhzgbh:list") + @SaCheckPermission("accident:safetySgzgbh:list") @GetMapping("/getListHead") public R getListHead(HseSafetySgzgbhBo bo) { return R.ok(hseSafetySgzgbhService.getListHead(bo)); 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 index c834da62..bc1bee4b 100644 --- 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 @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.Date; /** - * 安全-事故调查业务对象 hse_safety_sgdc + * 档案-事故调查信息 * * @author Lion Li * @date 2025-12-05 @@ -44,16 +44,19 @@ public class HseSafetySgdcxqReq implements Serializable { * 责任部门 */ private Long zrbm; + private String zrbmName; /** * 主要负责人 */ private Long zyfzr; + private String zyfzrName; /** * 次要负责人 */ private Long cyfzr; + private String cyfzrName; /** * 责任划分 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 index 17d0a9a6..272d3b6c 100644 --- 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 @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.Date; /** - * 安全-事故上报业务对象 hse_safety_sgsb + * 档案-损失情况信息 * * @author Lion Li * @date 2025-12-05 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 index 531ed2ed..1e8bef2d 100644 --- 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 @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.Date; /** - * 安全-事故上报业务对象 hse_safety_sgsb + * 档案-事故详情信息 * * @author Lion Li * @date 2025-12-05 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 index 19f43521..3a502ab9 100644 --- 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 @@ -18,7 +18,7 @@ import java.util.Date; import java.util.List; /** - * 安全-事故整改闭环业务对象 hse_safety_sgzgbh + * 档案-事故整改与复查信息 * * @author Lion Li * @date 2025-12-05 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 index d0a3d81f..ec53cc11 100644 --- 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 @@ -2,8 +2,12 @@ package org.dromara.safety.accident.domain.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; 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.safety.accident.domain.HseSafetySgsb; import java.io.Serial; @@ -38,6 +42,8 @@ public class HseSafetySgsbVo implements Serializable { */ @ExcelProperty(value = "关联项目") private Long projectId; + @Translation(type = TransConstant.PROJECT_ID_TO_NAME, mapper = "projectId") + private String projectName; /** * 事故编号 @@ -162,4 +168,9 @@ public class HseSafetySgsbVo implements Serializable { */ private String createByName; + /** + * 创建时间 + */ + private Date createTime; + } 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 index e371bab5..055a756f 100644 --- 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 @@ -8,24 +8,24 @@ import java.math.BigDecimal; public class SgsbCountVo { /** - * 本月上报事故 + * 本月总上报事故 */ private Long bysbsg; - /** - * 待处理事故 - */ - private Long dclsg; - /** * 已闭环事故 */ private Long ybhsg; - /** - * 事故整改完成率 + * 待整改事故 */ - private BigDecimal sgzgwcl; + private Long dzgsg; + /** + * 已整改事故 + */ + private Long yzgsg; + + /** * 待调查事故 @@ -43,8 +43,8 @@ public class SgsbCountVo { private Long ywcdc; /** - * 待整改事故 + * 总调查事故 */ - private Long dzgsg; + private Long zdcsg; } 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 index a0a10d8f..bd0f25bf 100644 --- 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 @@ -66,7 +66,19 @@ public enum SGStatusEnum { /** * 未闭环 */ - OPEN_LOOP("1", "未闭环"); + OPEN_LOOP("1", "未闭环"), + + + //事故调查保存状态 + /** + * 草稿 + */ + DRAFT("0", "草稿"), + /** + * 提交 + */ + SUBMIT("1", "提交"); + private final String code; 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 index 96532344..121f44ac 100644 --- 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 @@ -313,6 +313,8 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl sbList = baseMapper.getSgsbListByProjectId(projectId); + if (sbList != null && !sbList.isEmpty()){ + zdcsg = sbList.size(); + } for (HseSafetySgsb sgsb : sbList) { //待调查事故 上报后 审核后 待调查 if (sgsb.getSgzt().equals(SGStatusEnum.UNDER_INVESTIGATION.getCode())){ - ddcsg++; - }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode())){ - //调查中事故 待调查 填写完数据提交后 待整改 - dczsg++; - }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode())){ - //已完成调查 待整改 -> 已整改 - ywcdc++; - } - //待整改事项 查看整改表关联此调查的数据 整改状态为待整改 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(HseSafetySgdc::getSgId,sgsb.getId()); - List sgdcs = list(queryWrapper); - for (HseSafetySgdc sgdc : sgdcs) { - //寻找对应整改数据 - LambdaQueryWrapper zgqwr = new LambdaQueryWrapper<>(); - zgqwr.eq(HseSafetySgzgbh::getDcId,sgdc.getId()); - List zgs = zgbhService.list(zgqwr); - for (HseSafetySgzgbh zg : zgs) { - //寻找待整改 - if (zg.getZgStatus().equals(SGStatusEnum.TO_BE_RECTIFIED.getCode())){ - dzgsg++; + HseSafetySgdcVo sgdcVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(HseSafetySgdc::getSgId, sgsb.getId())); + if (sgdcVo != null){ + //待调查事故 已生成调查事件但还未调查 + if (sgdcVo.getBczt() == null){ + ddcsg++; + continue; + } + //调查中事故 已调查但提交状态为草稿 + if (SGStatusEnum.DRAFT.getCode().equals(sgdcVo.getBczt())){ + dczsg++; } } + + }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode())){ + //待整改 + ywcdc++; } + } countVo.setDdcsg(ddcsg); countVo.setDczsg(dczsg); countVo.setYwcdc(ywcdc); - countVo.setDzgsg(dzgsg); + countVo.setZdcsg(zdcsg); return countVo; } 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 index 9c807f0d..096cfcdc 100644 --- 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 @@ -16,6 +16,7 @@ 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.HseSafetySgzgbhHeadVo; import org.dromara.safety.accident.domain.vo.SgsbCountVo; import org.dromara.safety.accident.mapper.HseSafetySgsbMapper; import org.dromara.safety.accident.menu.SGStatusEnum; @@ -186,68 +187,79 @@ public class HseSafetySgsbServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(HseSafetySgsb::getProjectId, projectId); - List list = this.list(lambdaQueryWrapper); - //获取整改对应列表 - List zgxxes = baseMapper.getSgzgList(); - //获取调查列表 - 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 sgzgbhHeadVo = new SgsbCountVo(); + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgsb::getProjectId, projectId).le(HseSafetySgsb::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgsb::getCreateTime, LocalDate.now().minusDays(29))); + if (sgzgbhs != null && !sgzgbhs.isEmpty()) { + sgzgbhHeadVo.setBysbsg((long) sgzgbhs.size()); + sgzgbhHeadVo.setDdcsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.UNDER_INVESTIGATION.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setDzgsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_TO_BE_RECTIFIED.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setYzgsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setYbhsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_CLOSED_LOOP_OPERATION.getCode().equals(jxYhzgbh.getSgzt())).count()); } - 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; + return sgzgbhHeadVo; +// //获取对应列表 +// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); +// lambdaQueryWrapper.eq(HseSafetySgsb::getProjectId, projectId); +// List list = this.list(lambdaQueryWrapper); +// //获取整改对应列表 +// List zgxxes = baseMapper.getSgzgList(); +// //获取调查列表 +// 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; } /** 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 index 73dba277..3a0f5ab5 100644 --- 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 @@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.BeanUtils; 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; @@ -14,6 +15,7 @@ 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.common.utils.BatchNumberGenerator; import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; @@ -26,6 +28,10 @@ import org.dromara.safety.accident.domain.bo.*; import org.dromara.safety.accident.domain.vo.*; import org.dromara.safety.accident.menu.SGStatusEnum; import org.dromara.safety.accident.service.*; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysUserService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.dromara.safety.accident.domain.HseSafetySgzgbh; @@ -65,6 +71,12 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl zgxxVos =zgxxService.getZGBGInfoVoByIdList(vo.getId()); - if(!zgxxVos.isEmpty()){ + if (null != vo) { + List zgxxVos = zgxxService.getZGBGInfoVoByIdList(vo.getId()); + if (!zgxxVos.isEmpty()) { vo.setZgxxVos(zgxxVos); } } @@ -167,7 +179,7 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -196,17 +208,24 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl().eq(HseSafetyZgxx::getMasterId, sgzgbh.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); - if (zgxx == null){ + if (zgxx == null) { throw new ServiceException("找不到整改信息"); } bo.setZgId(zgxx.getId()); Boolean b = fcxxService.insertByBo(bo); //修改主数据整改状态合复查状态 sgzgbh.setFcStatus(bo.getReviewState()); - if (SGStatusEnum.PASS.getCode().equals(bo.getReviewState())){ + if (SGStatusEnum.PASS.getCode().equals(bo.getReviewState())) { sgzgbh.setReviewStatus(SGStatusEnum.CLOSED_LOOP_OPERATION.getCode()); hseSafetySgsb.setSgzt(SGStatusEnum.SG_CLOSED_LOOP_OPERATION.getCode()); //复查通过则生成档案信息数据 @@ -258,7 +285,7 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl reqs = new ArrayList<>(); - if (vo.getZgxxVos() != null){ + if (vo.getZgxxVos() != null) { vo.getZgxxVos().forEach(v -> { HseSafetySgzgfcxqReq req = new HseSafetySgzgfcxqReq(); req.setAbarbeitungMeasure(v.getAbarbeitungMeasure()); @@ -294,7 +332,7 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgzgbh::getProjectId,bo.getProjectId()).le(HseSafetySgzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgzgbh::getCreateTime, LocalDate.now().minusDays(29))); - if ( sgzgbhs != null && !sgzgbhs.isEmpty()) { + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgzgbh::getProjectId, bo.getProjectId()).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()); @@ -335,11 +373,11 @@ public class HseSafetySgzgbhServiceImpl extends ServiceImpl().eq(HseSafetyZgxx::getMasterId, bo.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); - if (zgxx == null){ + if (zgxx == null) { throw new ServiceException("找不到整改信息"); } HseSafetyFcxx fcxx = fcxxService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseSafetyFcxx::getZgId, zgxx.getId()).orderByDesc(HseSafetyFcxx::getCreateTime).last("limit 1")); - if (fcxx == null){ + if (fcxx == null) { throw new ServiceException("找不到复查信息"); } return fcxx.getNotPassCause(); 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 index 6d4dceff..dba42a50 100644 --- 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 @@ -3,7 +3,7 @@ package org.dromara.safety.enums; public enum AqEnums { AQJDZT_S("是否交底", "1"), - AQJDZT_F("是否交底", "2"), + AQJDZT_F("是否交底", "0"), AQWXJX_S("是否存在危险迹象", "1"), AQWXJX_F("是否存在危险迹象", "0"); From b8334c77646b2475e636d279ee490454db0be6a6 Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 10 Dec 2025 10:14:08 +0800 Subject: [PATCH 70/73] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bigscreen/controller/UEController.java | 39 +++++++++++++++++++ .../dto/attendance/AttendanceExportDto.java | 6 +++ .../BusProjectTeamMemberVo.java | 12 ++++++ .../impl/BusAttendanceServiceImpl.java | 9 ++++- .../impl/BusProjectTeamMemberServiceImpl.java | 14 +++++-- 5 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java new file mode 100644 index 00000000..efc4a1d4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java @@ -0,0 +1,39 @@ +package org.dromara.bigscreen.controller; + +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; +import org.dromara.bigscreen.service.ProjectBigScreenService; +import org.dromara.common.core.domain.R; +import org.dromara.project.domain.vo.project.BusProjectVo; +import org.dromara.project.service.IBusProjectService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * UE大屏 + * + * @author Lion Li + * @date 2025-11-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/UE/screen") +public class UEController { + + @Resource + private IBusProjectService projectService; + + + @GetMapping("/projectInfo/{projectId}") + public R getProjectPeople(@NotNull(message = "主键不能为空") + @PathVariable Long projectId) { + return R.ok(projectService.selectById(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java index 63a884d0..8eef9f38 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java @@ -30,4 +30,10 @@ public class AttendanceExportDto { * 打卡月份 */ private String clockDate; + + + /** + * 人员Id + */ + private Long userId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java index c576155a..98fd137a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java @@ -94,4 +94,16 @@ public class BusProjectTeamMemberVo implements Serializable { @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeOfWork",other = "type_of_work") private String typeOfWorkName; + + /** + * 电话 + */ + private String phone; + + + /** + * 入场时间 + */ + private Date entryDate; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index 2facfce5..1e5f4cd1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -2077,6 +2077,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl wrapper.between(SubConstructionUser::getLeaveDate, startTime, endTime).or() .isNull(SubConstructionUser::getLeaveDate)) .eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId()) + .eq(dto.getUserId() != null, SubConstructionUser::getSysUserId, dto.getUserId()) .eq(StrUtil.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork()) .like(StringUtils.isNotBlank(dto.getUserName()), SubConstructionUser::getUserName, dto.getUserName()) ); @@ -2369,7 +2370,13 @@ public class BusAttendanceServiceImpl extends ServiceImpl teamMemberIds = projectTeamMemberList.stream().map(BusProjectTeamMember::getMemberId) .distinct().toList(); - List userVos = userService.selectUserByIds(teamMemberIds, null); - Map userVoMap = userVos.stream().collect(Collectors.toMap(SysUserVo::getUserId, userVo -> userVo)); + List list = constructionUserService.lambdaQuery().in(SubConstructionUser::getSysUserId, teamMemberIds).list(); + Map constructionUserMap = list.stream().collect(Collectors.toMap(SubConstructionUser::getSysUserId, constructionUser -> constructionUser)); +// List userVos = userService.selectUserByIds(teamMemberIds, null); +// Map userVoMap = userVos.stream().collect(Collectors.toMap(SysUserVo::getUserId, userVo -> userVo)); // 填充信息 List projectTeamMemberVoList = projectTeamMemberList.stream().map(projectTeamMember -> { BusProjectTeamMemberVo projectTeamMemberVo = new BusProjectTeamMemberVo(); BeanUtils.copyProperties(projectTeamMember, projectTeamMemberVo); Long memberId = projectTeamMember.getMemberId(); String memberName = null; - if (userVoMap.containsKey(memberId)) { - memberName = userVoMap.get(memberId).getNickName(); + if (constructionUserMap.containsKey(memberId)) { + SubConstructionUser constructionUser = constructionUserMap.get(memberId); + memberName = constructionUser.getUserName(); + projectTeamMemberVo.setTypeOfWork(constructionUser.getTypeOfWork()); + projectTeamMemberVo.setPhone(constructionUser.getPhone()); + projectTeamMemberVo.setEntryDate(constructionUser.getEntryDate()); } projectTeamMemberVo.setMemberName(memberName); return projectTeamMemberVo; From f2c0932e2ea1628c46bcc89b1554445824bc472e Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 10 Dec 2025 10:58:25 +0800 Subject: [PATCH 71/73] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PgsProgressCategoryServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java index af746ebd..86c3cfb9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java @@ -2005,9 +2005,12 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST); } // 更新进度类别数量 + BigDecimal total = category.getTotal().add(BigDecimal.valueOf(number)); PgsProgressCategory updateCategory = new PgsProgressCategory(); updateCategory.setId(progressCategoryId); - updateCategory.setTotal(category.getTotal().add(BigDecimal.valueOf(number))); + updateCategory.setTotal(total); + updateCategory.setOwnerPrice(total.multiply(category.getOwnerPrice())); + updateCategory.setConstructionPrice(total.multiply(category.getConstructionPrice())); boolean update = this.updateById(updateCategory); if (!update) { throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR); From c45d98856e111c22dfc8c7387de3ff0f6644f9a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 10 Dec 2025 15:52:05 +0800 Subject: [PATCH 72/73] =?UTF-8?q?12-10-=E4=BF=AE=E6=94=B9=E4=BA=8B?= =?UTF-8?q?=E6=95=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accident/domain/vo/HseSafetySgdcVo.java | 5 +++++ .../accident/mapper/HseSafetySgdcMapper.java | 4 ++++ .../service/impl/HseSafetySgdcServiceImpl.java | 17 +++++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) 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 index 9a1d147d..3c94aaa5 100644 --- 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 @@ -242,4 +242,9 @@ public class HseSafetySgdcVo implements Serializable { */ private String fcjg; + /** + * 事故状态 + */ + private String sgzt; + } 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 index ec586b53..1ff03355 100644 --- 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 @@ -1,6 +1,7 @@ package org.dromara.safety.accident.mapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.safety.accident.domain.HseSafetySgdc; import org.dromara.safety.accident.domain.HseSafetySgsb; @@ -24,4 +25,7 @@ public interface HseSafetySgdcMapper extends BaseMapperPlus getSgsbListByProjectId(Long projectId); + + @Update("update hse_safety_sgsb set sgzt = #{state} where id = #{id}") + boolean updateSgzt(Long id, String state); } 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 index 121f44ac..bce2b498 100644 --- 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 @@ -179,6 +179,12 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl 0; } @@ -279,6 +285,13 @@ public class HseSafetySgdcServiceImpl extends ServiceImpl().eq(HseSafetySgdc::getSgId, sgsb.getId())); if (sgdcVo != null){ //待调查事故 已生成调查事件但还未调查 - if (sgdcVo.getBczt() == null){ + if (sgdcVo.getBczt() == null || sgdcVo.getBczt().equals(SGStatusEnum.DRAFT.getCode())){ ddcsg++; continue; } //调查中事故 已调查但提交状态为草稿 - if (SGStatusEnum.DRAFT.getCode().equals(sgdcVo.getBczt())){ + if (SGStatusEnum.SUBMIT.getCode().equals(sgdcVo.getBczt())){ dczsg++; } } From 46ac312ddf63f6f143a8b1684f37073521ac8c45 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 10 Dec 2025 15:53:31 +0800 Subject: [PATCH 73/73] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=96=B0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xinnengyuan/pom.xml | 9 + .../src/main/resources/application-menu.yml | 356 ++++++++++++++++++ .../impl/DroProjectDroneServiceImpl.java | 18 +- .../service/impl/FacRedLineServiceImpl.java | 1 + .../manager/dronemanager/DroneManager.java | 9 +- .../dronemanager/DroneRequestUtils.java | 28 +- 6 files changed, 403 insertions(+), 18 deletions(-) create mode 100644 xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml diff --git a/xinnengyuan/pom.xml b/xinnengyuan/pom.xml index 7022d665..70e17df4 100644 --- a/xinnengyuan/pom.xml +++ b/xinnengyuan/pom.xml @@ -86,6 +86,15 @@ true + + menu + + menu + info + ruoyi + 123456 + + prod diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml new file mode 100644 index 00000000..68773c98 --- /dev/null +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml @@ -0,0 +1,356 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 9528 +--- # 临时文件存储位置 避免临时文件被系统清理报错 +spring.servlet.multipart.location: /ruoyi/server/temp + +--- # 监控中心配置 +spring.boot.admin.client: + # 增加客户端开关 + enabled: false + url: http://localhost:9090/admin + instance: + service-host-type: IP + metadata: + username: ${spring.boot.admin.client.username} + userpassword: ${spring.boot.admin.client.password} + username: @monitor.username@ + password: @monitor.password@ + +--- # snail-job 配置 +snail-job: + enabled: false + # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 + group: "ruoyi_group" + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表 + token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" + server: + host: 127.0.0.1 + port: 17888 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 + namespace: ${spring.profiles.active} + # 随主应用端口漂移 + port: 2${server.port} + # 客户端ip指定 + host: + # RPC类型: netty, grpc + rpc-type: grpc + +--- # 数据源配置 +spring: + ai: + dashscope: + api-key: sk-8d8df92fcbac4bd2922edba30b0bb8fa + chat: + options: + model: qwen3-max + datasource: + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + # 性能分析插件(有性能损耗 不建议生产环境使用) + p6spy: false + # 设置默认的数据源或者数据源组,默认值即为 master + primary: master + # 严格模式 匹配不到数据源则报错 + strict: true + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:mysql://192.168.110.2:13386/xinnengyuanmenu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: xinnengyuanmenu + password: 2RkXFG8ZE6r5LL7B + # # 从库数据源 + # slave: + # lazy: true + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + # username: + # password: + # oracle: + # type: ${spring.datasource.type} + # driverClassName: oracle.jdbc.OracleDriver + # url: jdbc:oracle:thin:@//localhost:1521/XE + # username: ROOT + # password: root + # postgres: + # type: ${spring.datasource.type} + # driverClassName: org.postgresql.Driver + # url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true + # username: root + # password: root + # sqlserver: + # type: ${spring.datasource.type} + # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver + # url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true + # username: SA + # password: root + hikari: + # 最大连接池数量 + maxPoolSize: 20 + # 最小空闲线程数量 + minIdle: 10 + # 配置获取连接等待超时的时间 + connectionTimeout: 30000 + # 校验超时时间 + validationTimeout: 5000 + # 空闲连接存活最大时间,默认10分钟 + idleTimeout: 600000 + # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟 + maxLifetime: 1800000 + # 多久检查一次连接的活性 + keepaliveTime: 30000 + +--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉) +spring.data: + redis: + # 地址 + host: 192.168.110.2 + # 端口,默认为6379 + port: 9287 + # 数据库索引 + database: 21 + # redis 密码必须配置 + password: syar23rdsaagdrsa + # 连接超时时间 + timeout: 10s + # 是否开启ssl + ssl.enabled: false + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 16 + # Netty线程池数量 + nettyThreads: 32 + # 单节点配置 + singleServerConfig: + # 客户端名称 + clientName: ${ruoyi.name} + # 最小空闲连接数 + connectionMinimumIdleSize: 32 + # 连接池大小 + connectionPoolSize: 64 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 + +--- # mail 邮件发送 +mail: + enabled: false + host: smtp.163.com + port: 465 + # 是否需要用户名密码验证 + auth: true + # 发送方,遵循RFC-822标准 + from: xxx@163.com + # 用户名(注意:如果使用foxmail邮箱,此处user为qq号) + user: xxx@163.com + # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助) + pass: xxxxxxxxxx + # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 + starttlsEnable: true + # 使用SSL安全连接 + sslEnable: true + # SMTP超时时长,单位毫秒,缺省值不超时 + timeout: 0 + # Socket连接超时值,单位毫秒,缺省值不超时 + connectionTimeout: 0 + +--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 +# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用 +sms: + # 配置源类型用于标定配置来源(interface,yaml) + config-type: yaml + # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 + restricted: false + # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 + minute-max: 1 + # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 + account-max: 30 + # 以下配置来自于 org.dromara.sms4j.provider.config.BaseConfig类中 + blends: + # 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可 + # 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户 + config1: + # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: alibaba + # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 + access-key-id: 您的accessKey + # 称为accessSecret有些称之为apiSecret + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + config2: + # 登录 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2491779 + config3: + # 注册 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2491776 + config4: + # 质量工单逾期 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534747 + config5: + # 设计图纸 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534750 + config6: + # 安全工单 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534848 + +--- # 三方授权 +justauth: + # 前端外网访问地址 + address: http://localhost:80 + type: + maxkey: + # maxkey 服务器地址 + # 注意 如下均配置均不需要修改 maxkey 已经内置好了数据 + server-url: http://sso.maxkey.top + client-id: 876892492581044224 + client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8 + redirect-uri: ${justauth.address}/social-callback?source=maxkey + topiam: + # topiam 服务器地址 + server-url: http://127.0.0.1:1989/api/v1/authorize/y0q************spq***********8ol + client-id: 449c4*********937************759 + client-secret: ac7***********1e0************28d + redirect-uri: ${justauth.address}/social-callback?source=topiam + scopes: [ openid, email, phone, profile ] + qq: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=qq + union-id: false + weibo: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=weibo + gitee: + client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98 + client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac + redirect-uri: ${justauth.address}/social-callback?source=gitee + dingtalk: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=dingtalk + baidu: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=baidu + csdn: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=csdn + coding: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=coding + coding-group-name: xx + oschina: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=oschina + alipay_wallet: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet + alipay-public-key: MIIB**************DAQAB + wechat_open: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_open + wechat_mp: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_mp + wechat_enterprise: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise + agent-id: 1000002 + gitlab: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitlab +# 和风天气 https://dev.qweather.com/ +weather: + key-id: T65EAABUXC + project-id: 2JTHPUQ5YY + private-key: MC4CAQAwBQYDK2VwBCIEIMAglX7IsxYiTeM+FXXnvCUsIggajeP4s8gAllewm6BN + api-host: n35rk53njv.re.qweatherapi.com +# dxf转 geojson 执行文件名 +dxf2GeoJson: + file-name: main +ys7: + app-key: xxx + app-secret: xxx + job: + capture-enabled: false # 控制是否启用萤石抓拍任务 + device-sync-enabled: false # 控制是否同步萤石设备 +# 斯巴达算法 +sparta: + url: http://119.3.204.120:8040 + client-id: test + client-secret: 115fcb08fa6742a1b086d9bb80a6ad59 +# 身份证加密密钥(32 位) +id-card: + encrypt-key: 7ae260d150a14027d2238a1cf80a48ef +recognizer: + url: http://192.168.110.5:50071 + +qrCode: + url: http://xny.yj-3d.com:7788 +# 无人机大图 +drone: + url: http://192.168.110.2:9512 +# 聊天服务 +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-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java index 37322aab..c8b4cd46 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java @@ -17,6 +17,8 @@ import org.dromara.drone.domain.bo.DroProjectDroneBo; import org.dromara.drone.domain.vo.DroProjectDroneVo; import org.dromara.drone.mapper.DroProjectDroneMapper; import org.dromara.drone.service.IDroProjectDroneService; +import org.dromara.facility.domain.FacRedLine; +import org.dromara.facility.service.IFacRedLineService; import org.dromara.manager.dronemanager.DroneManager; import org.springframework.stereotype.Service; @@ -37,6 +39,9 @@ public class DroProjectDroneServiceImpl extends ServiceImpl gatewayList = list.stream().map(DroProjectDrone::getDroneSn).toList(); + // 获取项目红线信息 + FacRedLine redLine = facRedLineService.lambdaQuery() + .eq(FacRedLine::getProjectId, projectId) + .last("limit 1") + .one(); + String positionStr = null; + if (redLine != null) { + positionStr = redLine.getPositions(); + } + // 添加机场信息 + droneManager.addAirportInfoByProject(gatewayList, positionStr, projectId); } return true; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java index 8c92ec42..6bb12489 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java @@ -168,6 +168,7 @@ public class FacRedLineServiceImpl extends ServiceImpl gateways, Long projectId) { - DroneRequestUtils.addAirportInfoByProject(droneProperties.getUrl(), gateways, projectId); + public void addAirportInfoByProject(List gateways, String redLineStr, Long projectId) { + DroneRequestUtils.addAirportInfoByProject(droneProperties.getUrl(), gateways, redLineStr, projectId); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java index fe17682b..605b2815 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java @@ -1,6 +1,7 @@ package org.dromara.manager.dronemanager; import cn.hutool.core.collection.CollUtil; +import cn.hutool.http.Header; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONArray; @@ -25,28 +26,29 @@ public class DroneRequestUtils { /** * 添加项目机场信息 * - * @param gateways 飞机编号 - * @param projectId 项目id + * @param gateways 飞机编号 + * @param redLineStr 红线位置 + * @param projectId 项目 id */ - public static void addAirportInfoByProject(String url, List gateways, Long projectId) { + public static void addAirportInfoByProject(String url, List gateways, String redLineStr, Long projectId) { if (CollUtil.isEmpty(gateways)) { throw new ServiceException("请选择飞机", HttpStatus.BAD_REQUEST); } if (projectId == null) { throw new ServiceException("请选择项目", HttpStatus.BAD_REQUEST); } - // 拼接 query 参数 - StringBuilder queryBuilder = new StringBuilder(); - queryBuilder.append("projectId=").append(projectId); - for (String gateway : gateways) { - queryBuilder.append("&gateways=").append(gateway); - } - - // 完整 URL - String fullUrl = url + DroneConstant.ADD_DRONE_INFO_BY_PROJECT + "?" + queryBuilder; + String gatewayStr = String.join(",", gateways); + // 构造请求体 JSON + JSONObject reqBody = new JSONObject(); + reqBody.set("projectId", projectId); + reqBody.set("gateways", gatewayStr); + reqBody.set("range", redLineStr); + String fullUrl = url + DroneConstant.ADD_DRONE_INFO_BY_PROJECT; + log.info("添加项目机场信息请求 URL:{}", fullUrl); String errorMsg = "添加项目机场信息请求失败"; try (HttpResponse response = HttpRequest.post(fullUrl) - .body("{}") + .header(Header.CONTENT_TYPE, "application/json") + .body(reqBody.toString()) .execute()) { if (!response.isOk()) { log.error("{}:{}", errorMsg, response.getStatus());