|
@@ -0,0 +1,128 @@
|
|
|
|
|
+package com.usky.fire.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
+import com.usky.common.core.bean.CommonPage;
|
|
|
|
|
+import com.usky.common.core.exception.BusinessException;
|
|
|
|
|
+import com.usky.fire.domain.Yhhj;
|
|
|
|
|
+import com.usky.fire.mapper.YhhjMapper;
|
|
|
|
|
+import com.usky.fire.service.YhhjService;
|
|
|
|
|
+import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
|
|
+import com.usky.fire.service.vo.YhhjRequestVO;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import java.time.Duration;
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.Collections;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Optional;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 隐患汇总表 服务实现类
|
|
|
|
|
+ * </p>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author fu
|
|
|
|
|
+ * @since 2026-06-16
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@DS("hz")
|
|
|
|
|
+public class YhhjServiceImpl extends AbstractCrudService<YhhjMapper, Yhhj> implements YhhjService {
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public CommonPage<Yhhj> getYhhj(YhhjRequestVO vo) {
|
|
|
|
|
+ // 1. 参数校验
|
|
|
|
|
+ if (vo == null) {
|
|
|
|
|
+ throw new BusinessException("查询参数不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ int pageNum = Optional.ofNullable(vo.getPageNum()).orElse(1);
|
|
|
|
|
+ int pageSize = Optional.ofNullable(vo.getPageSize()).orElse(20);
|
|
|
|
|
+
|
|
|
|
|
+ if (pageNum < 1) {
|
|
|
|
|
+ throw new BusinessException("页码不能小于1");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (pageSize < 1) {
|
|
|
|
|
+ throw new BusinessException("每页大小不能小于1");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ final int MAX_PAGE_SIZE = 500;
|
|
|
|
|
+ if (pageSize > MAX_PAGE_SIZE) {
|
|
|
|
|
+ pageSize = MAX_PAGE_SIZE;
|
|
|
|
|
+ vo.setPageSize(pageSize);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 时间范围处理
|
|
|
|
|
+ LocalDateTime startTime = vo.getStartTime();
|
|
|
|
|
+ LocalDateTime endTime = vo.getEndTime();
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+
|
|
|
|
|
+ if (startTime == null && endTime == null) {
|
|
|
|
|
+ startTime = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
|
|
|
|
+ endTime = now;
|
|
|
|
|
+ } else if (startTime == null) {
|
|
|
|
|
+ startTime = endTime.minusYears(3);
|
|
|
|
|
+ } else if (endTime == null) {
|
|
|
|
|
+ endTime = startTime.plusYears(3);
|
|
|
|
|
+ if (endTime.isAfter(now)) {
|
|
|
|
|
+ endTime = now;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 时间校验
|
|
|
|
|
+ if (startTime.isAfter(endTime)) {
|
|
|
|
|
+ throw new BusinessException("开始时间不能晚于结束时间");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (startTime.plusYears(3).isBefore(endTime)) {
|
|
|
|
|
+ throw new BusinessException("查询时间跨度不能超过3年");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 构建查询条件
|
|
|
|
|
+ LambdaQueryWrapper<Yhhj> qw = new LambdaQueryWrapper<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 精确匹配
|
|
|
|
|
+ qw.eq(StringUtils.isNotBlank(vo.getZj()), Yhhj::getZj, vo.getZj())
|
|
|
|
|
+ .eq(StringUtils.isNotBlank(vo.getCompete()), Yhhj::getCompete, vo.getCompete())
|
|
|
|
|
+ .eq(StringUtils.isNotBlank(vo.getYhxxbDelFlag()), Yhhj::getYhxxbDelFlag, vo.getYhxxbDelFlag())
|
|
|
|
|
+ .eq(vo.getUnitId() != null, Yhhj::getUnitId, vo.getUnitId())
|
|
|
|
|
+ .eq(vo.getBuildingId() != null, Yhhj::getBuildingId, vo.getBuildingId());
|
|
|
|
|
+
|
|
|
|
|
+ // 模糊匹配(trim处理)
|
|
|
|
|
+ likeTrim(qw, vo.getUnitName(), Yhhj::getUnitName);
|
|
|
|
|
+ likeTrim(qw, vo.getCreateName(), Yhhj::getCreateName);
|
|
|
|
|
+ likeTrim(qw, vo.getBuildingName(), Yhhj::getBuildingName);
|
|
|
|
|
+ likeTrim(qw, vo.getJzName(), Yhhj::getJzName);
|
|
|
|
|
+ likeTrim(qw, vo.getQyName(), Yhhj::getQyName);
|
|
|
|
|
+ likeTrim(qw, vo.getRhAddress(), Yhhj::getRhAddress);
|
|
|
|
|
+
|
|
|
|
|
+ // 坐标
|
|
|
|
|
+ eqTrim(qw, vo.getX(), Yhhj::getX);
|
|
|
|
|
+ eqTrim(qw, vo.getY(), Yhhj::getY);
|
|
|
|
|
+
|
|
|
|
|
+ qw.between(Yhhj::getCreateTime, startTime, endTime)
|
|
|
|
|
+ .orderByDesc(Yhhj::getCreateTime);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 分页查询
|
|
|
|
|
+ Page<Yhhj> page = this.page(new Page<>(pageNum, pageSize), qw);
|
|
|
|
|
+ return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageNum);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 提取公共方法
|
|
|
|
|
+ private <T> void likeTrim(LambdaQueryWrapper<Yhhj> qw, String val, SFunction<Yhhj, T> column) {
|
|
|
|
|
+ Optional.ofNullable(val)
|
|
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
|
|
+ .map(String::trim)
|
|
|
|
|
+ .ifPresent(v -> qw.like(column, v));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private <T> void eqTrim(LambdaQueryWrapper<Yhhj> qw, String val, SFunction<Yhhj, T> column) {
|
|
|
|
|
+ Optional.ofNullable(val)
|
|
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
|
|
+ .map(String::trim)
|
|
|
|
|
+ .ifPresent(v -> qw.eq(column, v));
|
|
|
|
|
+ }
|
|
|
|
|
+}
|