diff --git a/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java b/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java index 4f8a875..2187ef1 100644 --- a/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java +++ b/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java @@ -5,6 +5,9 @@ import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.os.common.core.page.PageDomain; +import com.os.common.core.page.TableSupport; +import org.checkerframework.checker.units.qual.A; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -38,9 +41,10 @@ public class RecordIotenvInstantController extends BaseController @GetMapping("/list") public TableDataInfo list (RecordIotenvInstant recordIotenvInstant)throws ParseException { - startPage(); - List list = recordIotenvInstantService.selectRecordIotenvInstantList(recordIotenvInstant); - return getDataTable(list); + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + return recordIotenvInstantService.selectRecordIotenvInstantListWithPage(recordIotenvInstant,pageNum,pageSize); } @@ -101,4 +105,12 @@ public class RecordIotenvInstantController extends BaseController { return toAjax(recordIotenvInstantService.deleteRecordIotenvInstantByObjids(objids)); } + + @PreAuthorize("@ss.hasPermi('ems/record:recordIotenvInstant:list')") + @GetMapping("/getList") + public AjaxResult getList (RecordIotenvInstant recordIotenvInstant)throws ParseException + { + List recordIotenvInstants = recordIotenvInstantService.selectRecordIotenvInstantList(recordIotenvInstant); + return success(recordIotenvInstants); + } } diff --git a/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java b/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java index cb51bf4..e6c0500 100644 --- a/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java +++ b/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java @@ -2,7 +2,11 @@ package com.os.ems.record.domain; import java.math.BigDecimal; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; +import com.os.common.annotation.DataSource; +import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.os.common.annotation.Excel; @@ -14,6 +18,7 @@ import com.os.common.core.domain.BaseEntity; * @author zch * @date 2025-04-28 */ +@Data public class RecordIotenvInstant extends BaseEntity { private static final long serialVersionUID = 1L; @@ -71,6 +76,9 @@ public class RecordIotenvInstant extends BaseEntity @Excel(name = "记录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date recodeTime; + + private String[] monitorIds; + public void setObjid(Long objid) { this.objid = objid; diff --git a/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java b/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java index 319c9cb..0976cb1 100644 --- a/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java +++ b/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java @@ -1,5 +1,6 @@ package com.os.ems.record.mapper; +import java.text.ParseException; import java.util.List; import java.util.Map; @@ -83,6 +84,35 @@ public interface RecordIotenvInstantMapper List selectRecordIotenvInstantListFromTables(@Param("tableNames") List tableNames, @Param("recordIotenvInstant") RecordIotenvInstant recordIotenvInstant); + + + /** + * 分页查询物联网数据列表 + * + * @param recordIotenvInstant 物联网数据 + * @return 物联网数据 + */ + List selectFromTablesWithPage(@Param("tableNames") List tableNames, + @Param("recordIotenvInstant") RecordIotenvInstant recordIotenvInstant, + @Param("offset") int offset, + @Param("pageSize") int pageSize); + + /** + * 检查表是否存在 + * + * @param params 参数 + * @return 结果 + */ Integer checkTableExists(Map params); + + /** + * 统计多表查询的总记录数 + * + * @param tableNames 表名列表 + * @param recordIotenvInstant 查询条件 + * @return 总记录数 + */ + int countFromTables(@Param("tableNames") List tableNames, @Param("recordIotenvInstant") RecordIotenvInstant recordIotenvInstant); + } diff --git a/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java b/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java index 3956752..42f5133 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java +++ b/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java @@ -3,6 +3,8 @@ package com.os.ems.record.service; import java.text.ParseException; import java.util.Date; import java.util.List; + +import com.os.common.core.page.TableDataInfo; import com.os.ems.record.domain.RecordIotenvInstant; /** @@ -61,4 +63,14 @@ public interface IRecordIotenvInstantService * @return 结果 */ public int deleteRecordIotenvInstantByObjid(Long objid); + + + /** + * 分页查询物联网数据列表 + * + * @param recordIotenvInstant 物联网数据 + * @return 物联网数据 + */ + public TableDataInfo selectRecordIotenvInstantListWithPage(RecordIotenvInstant recordIotenvInstant, int pageNum, int pageSize) throws ParseException; + } diff --git a/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java b/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java index c03006b..2d51ffc 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java @@ -3,8 +3,15 @@ package com.os.ems.record.service.impl; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import com.github.pagehelper.PageInfo; +import com.os.common.constant.HttpStatus; +import com.os.common.core.page.TableDataInfo; import com.os.common.exception.ServiceException; +import com.os.common.utils.bean.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.os.ems.record.mapper.RecordIotenvInstantMapper; @@ -49,13 +56,11 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi // } @Override public List selectRecordIotenvInstantList(RecordIotenvInstant recordIotenvInstant) throws ParseException { - - Map params = recordIotenvInstant.getParams(); - // 检查是否有时间范围参数 + Map params = recordIotenvInstant.getParams(); + // 检查是否有时间范围参数 // 获取开始和结束时间 String beginTimeStr = params.get("beginRecordTime").toString(); String endTimeStr = params.get("endRecordTime").toString(); - // 解析日期 SimpleDateFormat fullFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date beginDate = fullFormat.parse(beginTimeStr); @@ -135,7 +140,6 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi // 设置日期格式 SimpleDateFormat tableFormat = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - // 获取开始日期和结束日期(不含时间部分) String beginDateStr = dateFormat.format(beginDate); String endDateStr = dateFormat.format(endDate); @@ -163,6 +167,52 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi } + /** + * 分页查询物联网数据列表 + * + * @param recordIotenvInstant 物联网数据 + * @return 物联网数据 + */ + @Override + public TableDataInfo selectRecordIotenvInstantListWithPage(RecordIotenvInstant recordIotenvInstant, int pageNum, int pageSize) throws ParseException { + + Map params = recordIotenvInstant.getParams(); + // 检查是否有时间范围参数 + // 获取开始和结束时间 + String beginTimeStr = params.get("beginRecordTime").toString(); + String endTimeStr = params.get("endRecordTime").toString(); + // 解析日期 + SimpleDateFormat fullFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date beginDate = fullFormat.parse(beginTimeStr); + Date endDate = fullFormat.parse(endTimeStr); + + // 获取需要查询的表名列表 + List tableNames = getTableNamesByDateRange(beginDate, endDate); + // 如果没有需要查询的表,则返回空结果 + if (tableNames.isEmpty()) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(0); + rspData.setRows(new ArrayList<>()); + rspData.setTotal(0); + return rspData; + } + + // 先查询总记录数 + int total = recordIotenvInstantMapper.countFromTables(tableNames, recordIotenvInstant); + // 计算分页偏移量 + int offset = (pageNum - 1) * pageSize; + // 执行分页查询 + List list = recordIotenvInstantMapper.selectFromTablesWithPage(tableNames, recordIotenvInstant, offset, pageSize); + + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(total); + return rspData; + } + + /** * 验证表是否存在 * @@ -170,11 +220,66 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi * @return 是否存在 */ private boolean isTableExists(String tableName) { - // 查询数据库中是否存在该表 - Map params = new HashMap<>(); - params.put("tableName", tableName); - Integer count = recordIotenvInstantMapper.checkTableExists(params); - return count != null && count > 0; + // 查询数据库中是否存在该表 + Map params = new HashMap<>(); + params.put("tableName", tableName); + Integer count = recordIotenvInstantMapper.checkTableExists(params); + return count != null && count > 0; } + + + + /** + * 多线程并行查询多个设备的数据 + * @param tableNames 表名列表 + * @param recordIotenvInstant 查询参数 + * @param monitorIds 设备ID数组 + * @return 合并后的查询结果 + */ + private List selectMultipleMonitorData(List tableNames, RecordIotenvInstant recordIotenvInstant,String[] monitorIds) { + // 创建线程池 + int threadCount = Math.min(monitorIds.length,20); + ExecutorService executorService = Executors.newFixedThreadPool(threadCount); + + //创建任务列表 + List>> futures = new ArrayList<>(); + + // 为每个设备创建查询任务 + for(String monitorId : monitorIds){ + Future> future + = executorService.submit(() -> { + // 创建新的查询对象,避免并发修改 + RecordIotenvInstant query = new RecordIotenvInstant(); + BeanUtils.copyProperties(recordIotenvInstant, query); + query.setMonitorId(monitorId); + query.setMonitorIds(null); // 清空数组,使用单个ID查询 + + // 执行查询 + return recordIotenvInstantMapper + .selectRecordIotenvInstantListFromTables(tableNames, query); + }); + futures.add(future); + } + + // 收集所有查询结果 + List result = new ArrayList<>(); + for (Future> future : futures) { + try { + List partialResult = future.get(); + if (partialResult != null && !partialResult.isEmpty()) { + result.addAll(partialResult); + } + } catch (Exception e) { + // 记录异常但继续处理其他结果 + e.printStackTrace(); + } + } + // 关闭线程池 + executorService.shutdown(); + + return result; + } + + } diff --git a/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml b/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml index 9aab525..9ccbf48 100644 --- a/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml +++ b/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml @@ -150,6 +150,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND recodeTime BETWEEN #{recordIotenvInstant.params.beginRecordTime} AND #{recordIotenvInstant.params.endRecordTime} + + + ORDER BY recodeTime ASC @@ -161,4 +169,71 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE table_schema = DATABASE() AND table_name = #{tableName} + + + + + + + \ No newline at end of file