Commit 67f536f6f56f413ccc2d20e7826b4075bfe2ef98

Authored by xp.Huang
1 parent 5e024d57

fix: 修复租户首页消息数、告警数统计

... ... @@ -620,52 +620,19 @@ public class TkHomePageServiceImpl implements HomePageService {
620 620 private void setAlarmAndMessageInfo(
621 621 String tenantId, HomePageTopMessage messageInfo, BaseHomePageTop alarm)
622 622 throws ExecutionException, InterruptedException {
623   - List<EntityKey> entityFields = new ArrayList<>();
624   - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"));
625   - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label"));
626   - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "additionalInfo"));
627   - List<EntityKey> latestValues = new ArrayList<>();
628   - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount"));
629   - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportDataPointsCount"));
630   - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "createdAlarmsCount"));
631   -
  623 + List<String> dictionaries = new ArrayList<>();
  624 + dictionaries.add("transportMsgCount");
  625 + dictionaries.add("transportDataPointsCount");
  626 + dictionaries.add("createdAlarmsCount");
  627 + //查询所有数据
  628 + List<Integer> sumCount = deviceMapper.getMsgSumByTenantIdAndDictionary(tenantId,dictionaries);
  629 + if(!sumCount.isEmpty()){
  630 + messageInfo.setMessageCount(sumCount.get(0));
  631 + messageInfo.setDataPointsCount(sumCount.get(1));
  632 + alarm.setSumCount(sumCount.get(2));
  633 + }
632 634 TenantId currentTenantId = TenantId.fromUUID(UUID.fromString(tenantId));
633 635 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId);
634   - PageData<EntityData> pageData =
635   - queryEntityData(apiUsageState.getId(), currentTenantId, entityFields, latestValues);
636   - Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest();
637   - latest
638   - .keySet()
639   - .forEach(
640   - item -> {
641   - if (item.equals(EntityKeyType.TIME_SERIES)) {
642   - Map<String, TsValue> tsValueMap = latest.get(item);
643   - tsValueMap
644   - .keySet()
645   - .forEach(
646   - mapKey -> {
647   - String tsValue = tsValueMap.get(mapKey).getValue();
648   - Integer value =
649   - StringUtils.isEmpty(tsValue)
650   - ? FastIotConstants.MagicNumber.ZERO
651   - : Integer.parseInt(tsValue);
652   - switch (mapKey) {
653   - case "createdAlarmsCount":
654   - alarm.setSumCount(value);
655   - break;
656   - case "transportMsgCount":
657   - messageInfo.setMessageCount(value);
658   - break;
659   - case "transportDataPointsCount":
660   - messageInfo.setDataPointsCount(value);
661   - break;
662   - default:
663   - break;
664   - }
665   - });
666   - }
667   - });
668   -
669 636 // 查询今日数据
670 637 setTodayAlarmAndMessageInfo(currentTenantId, apiUsageState.getId(), messageInfo, alarm);
671 638 }
... ...
... ... @@ -146,4 +146,6 @@ public interface DeviceMapper extends BaseMapper<TkDeviceEntity> {
146 146 String getDeviceRelation(@Param("isSlave") boolean isSlave, @Param("deviceId") String deviceId);
147 147
148 148 DeviceDTO findDeviceInfo(@Param("tenantId") String tenantId,@Param("tbDeviceId") String tbDeviceId);
  149 +
  150 + List<Integer> getMsgSumByTenantIdAndDictionary(@Param("tenantId") String tenantId, @Param("dictionaries")List<String> dictionaries);
149 151 }
... ...
1 1 package org.thingsboard.server.dao.yunteng.service;
2 2
3 3 import org.springframework.web.context.request.async.DeferredResult;
4   -import org.thingsboard.server.common.data.id.CustomerId;
5 4 import org.thingsboard.server.common.data.id.EntityId;
6 5 import org.thingsboard.server.common.data.id.TenantId;
7 6 import org.thingsboard.server.common.data.query.TsValue;
... ...
... ... @@ -460,4 +460,19 @@
460 460 WHERE ifd.tb_device_id = #{tbDeviceId}
461 461 AND ifd.tenant_id = #{tenantId}
462 462 </select>
  463 +
  464 + <select id="getMsgSumByTenantIdAndDictionary" resultType="java.lang.Integer">
  465 + SELECT SUM ( long_v ) AS msgCount FROM
  466 + ts_kv tk
  467 + LEFT JOIN api_usage_state aus ON tk.entity_id = aus.ID
  468 + LEFT JOIN ts_kv_dictionary tkd ON tkd.key_id = tk."key"
  469 + WHERE
  470 + aus.tenant_id ::TEXT = #{tenantId}
  471 + AND tkd."key" IN
  472 + <foreach collection="dictionaries" item="dictionary" open="(" separator="," close=")">
  473 + #{dictionary}
  474 + </foreach>
  475 + GROUP BY
  476 + tk."key";
  477 + </select>
463 478 </mapper>
... ...