diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvService.java b/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvService.java index 578b040..0145681 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvService.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvService.java @@ -235,6 +235,8 @@ public interface TsKvService { */ List findTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc); + List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc); + /** * 多设备 多属性 历史数据查询 按表名动态拼接sql @@ -284,6 +286,8 @@ public interface TsKvService { */ List findTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc); + List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc); + /** * 多设备 多属性 历史聚合数据 diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvServiceImpl.java b/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvServiceImpl.java index 96ff303..b5cffba 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvServiceImpl.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/TsKvServiceImpl.java @@ -189,6 +189,11 @@ public class TsKvServiceImpl implements TsKvService { return tsKvBaseService.findTsKvByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc); } + @Override + public List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc) { + return tsKvBaseService.findOriginalTsKvByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc); + } + @Override public List findTsKvByCodesAndAttrsWithTableSuffix(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, String tableSuffix) { return tsKvBaseService.findTsKvByCodesAndAttrsWithTableSuffix(codeList, attrList, startTime, endTime, isAsc,tableSuffix); @@ -214,6 +219,11 @@ public class TsKvServiceImpl implements TsKvService { return tsKvBaseService.findTsKvByMultiMap(multiMap, startTime, endTime, isAsc); } + @Override + public List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc) { + return tsKvBaseService.findOriginalTsKvByMultiMap(multiMap, startTime, endTime, isAsc); + } + @Override public List findTsKvAggByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc, AggType agg) { return tsKvBaseService.findTsKvAggByMultiMap(multiMap, startTime, endTime, isAsc, agg); diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvBaseService.java b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvBaseService.java index eb92863..c9fca37 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvBaseService.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvBaseService.java @@ -138,6 +138,8 @@ public interface TsKvBaseService { */ List findTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc); + List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc); + /** * 多设备 多属性 历史数据聚合查询 * @@ -175,6 +177,7 @@ public interface TsKvBaseService { * @return list */ List findTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc); + List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc); /** * 多设备 多属性 历史聚合数据 diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvCkServiceImpl.java b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvCkServiceImpl.java index d315abc..ab101f3 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvCkServiceImpl.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvCkServiceImpl.java @@ -134,6 +134,11 @@ public class TsKvCkServiceImpl extends ServiceImpl impleme return viewTsKvCkService.findTsKvByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc,""); } + @Override + public List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc) { + return null; + } + @Override public List findTsKvAggByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg) { return viewTsKvCkService.findTsKvAggByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc, agg); @@ -154,6 +159,11 @@ public class TsKvCkServiceImpl extends ServiceImpl impleme return viewTsKvCkService.findTsKvByMultiMap(multiMap, startTime, endTime, isAsc); } + @Override + public List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc) { + return null; + } + @Override public List findTsKvAggByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc, AggType agg) { return viewTsKvCkService.findTsKvAggByMultiMap(multiMap, startTime, endTime, isAsc, agg); diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvMyServiceImpl.java b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvMyServiceImpl.java index e09ec26..ca27f59 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvMyServiceImpl.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvMyServiceImpl.java @@ -2,7 +2,6 @@ package com.thing.common.tskv.service.tskv; import cn.hutool.core.util.ObjectUtil; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.mybatisflex.annotation.UseDataSource; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryChain; @@ -24,7 +23,6 @@ import com.thing.common.tskv.entity.TsKvMy; import com.thing.common.tskv.mapper.TsKvMyMapper; import com.thing.common.tskv.service.DatabaseType; import com.thing.common.tskv.service.TsKvNativeSQL; -import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -36,7 +34,9 @@ import org.springframework.stereotype.Service; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; import static com.thing.common.tskv.NativeSQLTool.*; import static com.thing.common.util.time.DaXiaUtils.getAmEndTime; @@ -59,11 +59,11 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme this.eventPublisher = eventPublisher; } - // private final Map intervalMap = Maps.newHashMap(); + // private final Map intervalMap = Maps.newHashMap(); @Override - public Integer saveDTOTsKv(List kvDTOList,String tableSuffix) { - return TsKvNativeSQL.saveDTOTsKv(kvDTOList, DatabaseType.MYSQL,tableSuffix); + public Integer saveDTOTsKv(List kvDTOList, String tableSuffix) { + return TsKvNativeSQL.saveDTOTsKv(kvDTOList, DatabaseType.MYSQL, tableSuffix); } @Override @@ -179,8 +179,8 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme @Override public List findTsKvAggByCodeAndAttrs(String code, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, Lists.newArrayList(code), attrList, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, Lists.newArrayList(code), attrList, startTime, endTime, agg, DataBaseType.MYSQL); return RowUtil.toEntityList(Db.selectListBySql(sql), TsKvDTO.class); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new SysException(String.format("调用%s%s%s方法异常,请检查代码", "get", agg, "Wrappers"), e); @@ -197,8 +197,8 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme @Override public PageData findPageTsKvAggByCodeAndAttrs(String code, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg, Integer page, Integer limit) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, Lists.newArrayList(code), attrList, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, Lists.newArrayList(code), attrList, startTime, endTime, agg, DataBaseType.MYSQL); long count = Db.selectCount(NativeSQLTool.countSql(sql, true)); return NativeSQLTool.getTsKvDTOPageData(sql, count, isAsc, page, limit); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { @@ -212,11 +212,16 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme return this.listAs(queryWrapper, TsKvDTO.class); } + @Override + public List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc) { + return findTsKvByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc); + } + @Override public List findTsKvAggByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, codeList, attrList, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, codeList, attrList, startTime, endTime, agg, DataBaseType.MYSQL); sql = sql + " ORDER BY ts "; if (!isAsc) { sql = sql + " DESC"; @@ -237,8 +242,8 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme @Override public PageData findPageTsKvAggByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg, Integer page, Integer limit) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, codeList, attrList, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "Wrappers", Collection.class, Collection.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, codeList, attrList, startTime, endTime, agg, DataBaseType.MYSQL); long count = Db.selectCount(NativeSQLTool.countSql(sql, true)); return NativeSQLTool.getTsKvDTOPageData(sql, count, isAsc, page, limit); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { @@ -252,11 +257,16 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme return this.listAs(queryChain.toQueryWrapper(), TsKvDTO.class); } + @Override + public List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc) { + return findTsKvByMultiMap(multiMap, startTime, endTime, isAsc); + } + @Override public List findTsKvAggByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc, AggType agg) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "MapWrapper", Map.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, multiMap, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "MapWrapper", Map.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, multiMap, startTime, endTime, agg, DataBaseType.MYSQL); return RowUtil.toEntityList(Db.selectListBySql(sql), TsKvDTO.class); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new SysException(String.format("调用%s%s%s方法异常,请检查代码", "get", agg, "MapWrapper"), e); @@ -273,8 +283,8 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme @Override public PageData findPageTsKvAggByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc, AggType agg, Integer page, Integer limit) { try { - Method method = NativeSQLTool.class.getMethod("get" + agg + "MapWrapper", Map.class, Long.class, Long.class, AggType.class,DataBaseType.class); - String sql = (String) method.invoke(NativeSQLTool.class, multiMap, startTime, endTime, agg,DataBaseType.MYSQL); + Method method = NativeSQLTool.class.getMethod("get" + agg + "MapWrapper", Map.class, Long.class, Long.class, AggType.class, DataBaseType.class); + String sql = (String) method.invoke(NativeSQLTool.class, multiMap, startTime, endTime, agg, DataBaseType.MYSQL); long count = Db.selectCount(NativeSQLTool.countSql(sql, true)); return NativeSQLTool.getTsKvDTOPageData(sql, count, isAsc, page, limit); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { @@ -335,33 +345,33 @@ public class TsKvMyServiceImpl extends ServiceImpl impleme QueryWrapper queryWrapper = QueryWrapper.create(); queryWrapper.in(TsKvMy::getAttrKey, attrList, CollectionUtils.isNotEmpty(attrList)) .in(TsKvMy::getThingCode, codeList, CollectionUtils.isNotEmpty(codeList)) - .in(TsKvMy::getTs,timeList,CollectionUtils.isNotEmpty(timeList)); + .in(TsKvMy::getTs, timeList, CollectionUtils.isNotEmpty(timeList)); queryWrapper.orderBy(TsKvMy::getTs, isAsc); - return mapper.selectListByQueryAs(queryWrapper,TsKvDTO.class); + return mapper.selectListByQueryAs(queryWrapper, TsKvDTO.class); } @Override public Integer deleteTskv(TsKvDTO kvDTO) { String delSql = NativeSQLTool.deleteTskvSql(kvDTO); - return Db.deleteBySql(delSql); + return Db.deleteBySql(delSql); } @Override public Integer deleteLastTskv(TsKvDTO kvDTO) { String delSql = NativeSQLTool.deleteLastTskvSql(kvDTO); - return Db.deleteBySql(delSql); + return Db.deleteBySql(delSql); } @Override public List findTsKvByCodesAndAttrsWithTableSuffix(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, String tableSuffix) { StringBuilder sql = new StringBuilder(" SELECT thing_code,attr_key,ts,val FROM thing_ts_kv"); sql.append(tableSuffix); - NativeSQLTool.spliceCodesAndAttrsSql(codeList,attrList,sql,startTime,endTime); + NativeSQLTool.spliceCodesAndAttrsSql(codeList, attrList, sql, startTime, endTime); sql.append(" ORDER BY ts "); - if(!isAsc){ + if (!isAsc) { sql.append(" DESC "); } - return RowUtil.toEntityList(Db.selectListBySql(sql.toString()),TsKvDTO.class); + return RowUtil.toEntityList(Db.selectListBySql(sql.toString()), TsKvDTO.class); } private PageData getTsKvDTOPageIntervalData(Integer page, Integer limit, long count, String sql) { diff --git a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvPgServiceImpl.java b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvPgServiceImpl.java index 0f3fb7e..5cf7705 100644 --- a/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvPgServiceImpl.java +++ b/common/tskv/src/main/java/com/thing/common/tskv/service/tskv/TsKvPgServiceImpl.java @@ -203,6 +203,11 @@ public class TsKvPgServiceImpl extends ServiceImpl impleme return this.listAs(queryWrapper, TsKvDTO.class); } + @Override + public List findOriginalTsKvByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc) { + return findTsKvByCodesAndAttrs(codeList, attrList, startTime, endTime, isAsc); + } + @Override public List findTsKvAggByCodesAndAttrs(Collection codeList, Collection attrList, Long startTime, Long endTime, Boolean isAsc, AggType agg) { try { @@ -243,6 +248,11 @@ public class TsKvPgServiceImpl extends ServiceImpl impleme return this.listAs(queryChain.toQueryWrapper(), TsKvDTO.class); } + @Override + public List findOriginalTsKvByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc) { + return findTsKvByMultiMap(multiMap, startTime, endTime, isAsc); + } + @Override public List findTsKvAggByMultiMap(Map> multiMap, Long startTime, Long endTime, Boolean isAsc, AggType agg) { try { diff --git a/modules/thing/src/main/java/com/thing/cache/controller/CacheTsKvController.java b/modules/thing/src/main/java/com/thing/cache/controller/CacheTsKvController.java index b328c75..a5764a6 100644 --- a/modules/thing/src/main/java/com/thing/cache/controller/CacheTsKvController.java +++ b/modules/thing/src/main/java/com/thing/cache/controller/CacheTsKvController.java @@ -56,6 +56,21 @@ public class CacheTsKvController { return new Result>().ok(page); } + @GetMapping("list") + @Operation(summary = "列表") + @Parameters({ + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)"), + @Parameter(name = "thingCodeList", description = "物编码list"), + @Parameter(name = "thingAttrList", description = "物属性list"), + @Parameter(name = "beginTime", description = "开始时间"), + @Parameter(name = "endTime", description = "结束时间") + }) + public Result> list(@RequestParam Map params) { + List list = tsKvHandleService.list(params); + return new Result>().ok(list); + } + @GetMapping("{thingCode}/{attrKey}/{ts}") @Operation(summary="信息") diff --git a/modules/thing/src/main/java/com/thing/cache/service/TsKvHandleService.java b/modules/thing/src/main/java/com/thing/cache/service/TsKvHandleService.java index 1b7e554..0ba7d82 100644 --- a/modules/thing/src/main/java/com/thing/cache/service/TsKvHandleService.java +++ b/modules/thing/src/main/java/com/thing/cache/service/TsKvHandleService.java @@ -21,6 +21,8 @@ public interface TsKvHandleService { PageData page(Map params); + List list(Map params); + CacheTsKvDTO get(String thingCode, String key, Long ts); void save(TsKvModifyForm dto); diff --git a/modules/thing/src/main/java/com/thing/cache/service/impl/TsKvHandleServiceImpl.java b/modules/thing/src/main/java/com/thing/cache/service/impl/TsKvHandleServiceImpl.java index b31cbd7..4117b98 100644 --- a/modules/thing/src/main/java/com/thing/cache/service/impl/TsKvHandleServiceImpl.java +++ b/modules/thing/src/main/java/com/thing/cache/service/impl/TsKvHandleServiceImpl.java @@ -20,6 +20,7 @@ import com.thing.common.core.web.response.Result; import com.thing.common.data.tskv.TsKvDTO; import com.thing.common.tskv.event.TsKvEvent; import com.thing.common.tskv.service.TsKvService; +import com.thing.common.tskv.service.tskv.TsKvBaseService; import com.thing.queue.util.Topics; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; @@ -35,7 +36,6 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; -import java.util.stream.Collectors; /** * @author zhenghh. 2022-09-15 @@ -48,6 +48,9 @@ public class TsKvHandleServiceImpl implements TsKvHandleService { private TsKvService tsKvService; @Resource private ApplicationEventPublisher publisher; + + @Resource + private TsKvBaseService tsKvBaseService; /** * 分页查询 * @@ -72,6 +75,41 @@ public class TsKvHandleServiceImpl implements TsKvHandleService { } } + @Override + public List list(Map params) { + List thingCodeList = MapUtil.get(params, "thingCodeList", List.class); + List atterList = MapUtil.get(params, "thingAttrList", List.class); + Long startTime = MapUtil.getLong(params, "beginTime"); + Long endTime = MapUtil.getLong(params, "endTime"); + if (StringUtils.isNotBlank((String) params.get("beginTime"))) { + List list = tsKvService.findOriginalTsKvByCodesAndAttrs(thingCodeList, atterList, startTime, endTime, Boolean.FALSE); + if(!CollectionUtils.isEmpty(list)) { + return list.stream().filter(s-> + !s.getAttrKey().endsWith("am") + && !s.getAttrKey().endsWith("hh") + && !s.getAttrKey().endsWith("dd") + && !s.getAttrKey().endsWith("mm") + && !s.getAttrKey().endsWith("yy")).toList(); + } + return Lists.newArrayList(); + } else { + Map> queryMap = new HashMap<>(); + if (thingCodeList != null) { + thingCodeList.forEach(temp -> queryMap.put(temp, atterList)); + } + List list = tsKvService.findOriginalTsKvByMultiMap(queryMap, startTime, endTime, Boolean.FALSE); + if(!CollectionUtils.isEmpty(list)) { + return list.stream().filter(s-> + !s.getAttrKey().endsWith("am") + && !s.getAttrKey().endsWith("hh") + && !s.getAttrKey().endsWith("dd") + && !s.getAttrKey().endsWith("mm") + && !s.getAttrKey().endsWith("yy")).toList(); + } + return Lists.newArrayList(); + } + } + @Override public CacheTsKvDTO get(String thingCode, String key, Long ts) { List tsKvByCodeAndAttr = tsKvService.findTsKvByCodeAndAttr(thingCode, key, ts, ts, false);