diff --git a/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CarbonPubProductionReportDTO.java b/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CarbonPubProductionReportDTO.java index 2918129..27e404d 100644 --- a/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CarbonPubProductionReportDTO.java +++ b/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CarbonPubProductionReportDTO.java @@ -1,5 +1,8 @@ package com.thing.carbon.pub.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -37,8 +40,12 @@ public class CarbonPubProductionReportDTO implements Serializable { @Schema(description = "数据边界类型:1-自然月;2-自然年;3-自定义") private Integer boundaryType; @Schema(description = "数据边界开始时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date boundaryStart; @Schema(description = "数据边界结束时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date boundaryEnd; @Schema(description = "碳足迹值") private BigDecimal totalCarbon; diff --git a/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CockpitProductionCarbon.java b/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CockpitProductionCarbon.java index f543bc0..1840da0 100644 --- a/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CockpitProductionCarbon.java +++ b/modules/carbon-public/src/main/java/com/thing/carbon/pub/dto/CockpitProductionCarbon.java @@ -1,5 +1,8 @@ package com.thing.carbon.pub.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -28,5 +31,7 @@ public class CockpitProductionCarbon { private BigDecimal carbon; @Schema(description = "工单日期") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date prDate; } diff --git a/modules/carbon-track/src/main/java/com/thing/carbontrack/outbound/dto/IotCarbonOutboundConfigDTO.java b/modules/carbon-track/src/main/java/com/thing/carbontrack/outbound/dto/IotCarbonOutboundConfigDTO.java index 3065676..f4ea672 100644 --- a/modules/carbon-track/src/main/java/com/thing/carbontrack/outbound/dto/IotCarbonOutboundConfigDTO.java +++ b/modules/carbon-track/src/main/java/com/thing/carbontrack/outbound/dto/IotCarbonOutboundConfigDTO.java @@ -1,6 +1,9 @@ package com.thing.carbontrack.outbound.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import com.thing.carbontrack.useConfig.dto.IotCarbonUseConfigDTO; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -38,6 +41,8 @@ public class IotCarbonOutboundConfigDTO implements Serializable { @Schema(description = "出库数量") private Long num; @Schema(description = "出库时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date outboundTime; private List configDTOList; diff --git a/modules/carbon-track/src/main/java/com/thing/carbontrack/productionRecord/dto/IotCarbonProductionRecordDTO.java b/modules/carbon-track/src/main/java/com/thing/carbontrack/productionRecord/dto/IotCarbonProductionRecordDTO.java index 943d243..fbb8665 100644 --- a/modules/carbon-track/src/main/java/com/thing/carbontrack/productionRecord/dto/IotCarbonProductionRecordDTO.java +++ b/modules/carbon-track/src/main/java/com/thing/carbontrack/productionRecord/dto/IotCarbonProductionRecordDTO.java @@ -1,5 +1,8 @@ package com.thing.carbontrack.productionRecord.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -29,8 +32,12 @@ public class IotCarbonProductionRecordDTO implements Serializable { @Schema(description = "生产车间") private String workName; @Schema(description = "生产开始时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date startTime; @Schema(description = "生产结束时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date endTime; @Schema(description = "生产数量") private Long pNum; diff --git a/modules/carbon-track/src/main/java/com/thing/carbontrack/productionResult/dto/IotCarbonProductionResultDTO.java b/modules/carbon-track/src/main/java/com/thing/carbontrack/productionResult/dto/IotCarbonProductionResultDTO.java index bc27def..1a34cfc 100644 --- a/modules/carbon-track/src/main/java/com/thing/carbontrack/productionResult/dto/IotCarbonProductionResultDTO.java +++ b/modules/carbon-track/src/main/java/com/thing/carbontrack/productionResult/dto/IotCarbonProductionResultDTO.java @@ -1,5 +1,8 @@ package com.thing.carbontrack.productionResult.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -54,8 +57,12 @@ public class IotCarbonProductionResultDTO implements Serializable { @Schema(description = "产品核算边界 1.摇篮到大门,2摇篮到坟墓") private String boundary; @Schema(description = "工单开始时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date startTime; @Schema(description = "工单完工时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date finishTime; @Schema(description = "生产耗时") private Integer prDur; diff --git a/modules/carbon-track/src/main/java/com/thing/carbontrack/report/dto/IotCarbonProductionReportDTO.java b/modules/carbon-track/src/main/java/com/thing/carbontrack/report/dto/IotCarbonProductionReportDTO.java index 767efca..f522443 100644 --- a/modules/carbon-track/src/main/java/com/thing/carbontrack/report/dto/IotCarbonProductionReportDTO.java +++ b/modules/carbon-track/src/main/java/com/thing/carbontrack/report/dto/IotCarbonProductionReportDTO.java @@ -1,5 +1,8 @@ package com.thing.carbontrack.report.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.thing.common.core.utils.DateTimeUtils; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -36,8 +39,12 @@ public class IotCarbonProductionReportDTO implements Serializable { @Schema(description = "数据边界类型:1-自然月;2-自然年;3-自定义") private Integer boundaryType; @Schema(description = "数据边界开始时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date boundaryStart; @Schema(description = "数据边界结束时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) private Date boundaryEnd; @Schema(description = "报告有效期") private Long validEndTime; diff --git a/modules/thing/src/main/java/com/thing/event/ThingRelationDetailUpdateEvent.java b/modules/thing/src/main/java/com/thing/event/ThingRelationDetailUpdateEvent.java new file mode 100644 index 0000000..88fed56 --- /dev/null +++ b/modules/thing/src/main/java/com/thing/event/ThingRelationDetailUpdateEvent.java @@ -0,0 +1,25 @@ +package com.thing.event; + +import com.thing.thing.entity.entity.IotThingEntity; +import lombok.Getter; +import lombok.Setter; +import org.springframework.context.ApplicationEvent; + +import java.util.List; + +/** + * Author: SiYang + * Date: 2023/12/01 14:39 + * Description: 新增物关系子节点事件 + */ +@Getter +@Setter +public class ThingRelationDetailUpdateEvent extends ApplicationEvent { + + private List list; + + public ThingRelationDetailUpdateEvent(Object source, List list) { + super(source); + this.list = list; + } +} diff --git a/modules/thing/src/main/java/com/thing/extend/dto/TransportExtendCalculationDTO.java b/modules/thing/src/main/java/com/thing/extend/dto/TransportExtendCalculationDTO.java index cec3a30..63dfada 100644 --- a/modules/thing/src/main/java/com/thing/extend/dto/TransportExtendCalculationDTO.java +++ b/modules/thing/src/main/java/com/thing/extend/dto/TransportExtendCalculationDTO.java @@ -56,20 +56,20 @@ public class TransportExtendCalculationDTO implements Serializable { @Schema(description = "是否在线") private Boolean online; @Schema(description = "更新时间") - private Date lastDate; + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) + private Long lastDate; @Schema(description = "创建者") @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Long creator; @Schema(description = "创建时间") - @JsonProperty(access = JsonProperty.Access.READ_ONLY) - @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) - private Date createDate; + + private Long createDate; @Schema(description = "更新者") @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Long updater; @Schema(description = "更新时间") - @JsonProperty(access = JsonProperty.Access.READ_ONLY) - @JsonFormat(pattern = DateTimeUtils.DATE_TIME_PATTERN_STR) - private Date updateDate; + + private Long updateDate; } \ No newline at end of file diff --git a/modules/thing/src/main/java/com/thing/extend/service/impl/TransportExtendCalculationServiceImpl.java b/modules/thing/src/main/java/com/thing/extend/service/impl/TransportExtendCalculationServiceImpl.java index aab0318..d349dd8 100644 --- a/modules/thing/src/main/java/com/thing/extend/service/impl/TransportExtendCalculationServiceImpl.java +++ b/modules/thing/src/main/java/com/thing/extend/service/impl/TransportExtendCalculationServiceImpl.java @@ -89,7 +89,7 @@ public class TransportExtendCalculationServiceImpl extends BaseServiceImpl list = event.getList(); + for (IotThingEntity thing : list) { + List fromEntities = thingRelationDetailService.findByFromIdAndToId(thing.getId(),null); + if(CollectionUtils.isNotEmpty(fromEntities)){ + for (IotThingRelationDetailEntity entity : fromEntities) { + entity.setFromName(thing.getName()); + } + thingRelationDetailService.updateBatch(fromEntities); + } + + List toEntities = thingRelationDetailService.findByFromIdAndToId(null, thing.getId()); + + if(CollectionUtils.isNotEmpty(toEntities)){ + for (IotThingRelationDetailEntity entity : toEntities) { + entity.setToName(thing.getName()); + } + thingRelationDetailService.updateBatch(toEntities); + } + } + cache.clearTopic(CacheNameEnum.THING_DETAIL_RELATION); + } +} diff --git a/modules/thing/src/main/java/com/thing/reissue/service/impl/DataReissueServiceImpl.java b/modules/thing/src/main/java/com/thing/reissue/service/impl/DataReissueServiceImpl.java index fbb0e48..b38dfa1 100644 --- a/modules/thing/src/main/java/com/thing/reissue/service/impl/DataReissueServiceImpl.java +++ b/modules/thing/src/main/java/com/thing/reissue/service/impl/DataReissueServiceImpl.java @@ -28,6 +28,7 @@ import com.thing.thing.entity.dto.IotThingEntityDTO; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.Nullable; import org.springframework.context.ApplicationEventPublisher; @@ -39,7 +40,7 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.kv.TsKvEntry; +import org.thingsboard.server.common.data.kv.*; import java.util.*; import java.util.stream.Collectors; @@ -74,6 +75,9 @@ public class DataReissueServiceImpl extends BaseServiceImpl params) { String dashboardGroupId = (String) params.get("dashboardGroupId"); @@ -132,9 +136,8 @@ public class DataReissueServiceImpl extends BaseServiceImpl> longListMap = thingsAttributesList.stream().collect(Collectors.groupingBy(IotThingDictRelationParamDTO::getEntityId)); longListMap.forEach((k,v)->{ - boolean flag = true; - String limit = "100"; - while (flag){ + Long start = startTime; + while (start < endTime){ String entityCode = v.get(0).getEntityCode(); List keyList = v.stream().map(IotThingDictRelationParamDTO::getCode).collect(Collectors.toList()); HttpHeaders headers = new HttpHeaders(); @@ -147,25 +150,22 @@ public class DataReissueServiceImpl extends BaseServiceImpl> timeseries = getTskvtMap(responseEntity, token, dataReissueSettingDTO, keyList, startTime, endTime,limit); -// List tsKvEntries = RestJsonConverter.toTimeseries(timeseries); -// if(CollectionUtil.isNotEmpty(tsKvEntries)){ -// pushQueue(entityCode,tsKvEntries); -// -// }else{ -// flag = false; -// } + Map> timeseries = getTskvtMap(responseEntity, token, dataReissueSettingDTO, keyList, start, start+ONE_DAY); + if(MapUtils.isNotEmpty(timeseries)){ + pushQueue(entityCode,timeseries); + } + start += ONE_DAY; } }); } @Nullable private Map> getTskvtMap(ResponseEntity responseEntity, String token, DataReissueSettingDTO dataReissueSettingDTO, - List keyList, Long startTime, Long endTime,String limit) { + List keyList, Long startTime, Long endTime) { DeviceId deviceId = responseEntity.getBody().getId(); - HttpHeaders headers1 = new HttpHeaders(); - headers1.setContentType(MediaType.APPLICATION_JSON); - headers1.set("x-authorization","Bearer " + token); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("x-authorization","Bearer " + token); UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(dataReissueSettingDTO.getUrl()) .path("/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries") .queryParam("keys", "{keys}") @@ -179,22 +179,21 @@ public class DataReissueServiceImpl extends BaseServiceImpl requestEntity = new HttpEntity<>(null , headers1); - + HttpEntity requestEntity = new HttpEntity<>(null , headers); Map> timeseries = restTemplate.exchange( uriComponents.toUri(), @@ -231,18 +230,17 @@ public class DataReissueServiceImpl extends BaseServiceImpl timeSeries) { - if (CollectionUtil.isEmpty(timeSeries)) { + private void pushQueue(String thingCode, Map> timeseries) { + if (MapUtils.isEmpty(timeseries)) { return ; } - List list = timeSeries.parallelStream() - .filter(tsKv -> Objects.nonNull(tsKv.getValue())) - .map(tsKv -> new TsKvDTO(thingCode, tsKv.getKey(), tsKv.getTs(), tsKv.getValueAsString())) - .toList(); - //send 队列 - publisher.publishEvent(new TsKvEvent(Topics.V1_TSKV_HISTORY.getValue(), TsKvDTO.toDataProtoList(list))); - + timeseries.forEach((key, values) -> { + if(!values.isEmpty()){ + List list = values.stream().map(ts -> new TsKvDTO(thingCode, key, ts.get("ts").asLong(), ts.get("value").asText())).toList(); + //send 队列 + publisher.publishEvent(new TsKvEvent(Topics.V1_TSKV_HISTORY.getValue(), TsKvDTO.toDataProtoList(list))); + } + }); } - } \ No newline at end of file diff --git a/modules/thing/src/main/java/com/thing/thing/entity/service/impl/IotThingEntityServiceImpl.java b/modules/thing/src/main/java/com/thing/thing/entity/service/impl/IotThingEntityServiceImpl.java index d43b621..c8349f4 100644 --- a/modules/thing/src/main/java/com/thing/thing/entity/service/impl/IotThingEntityServiceImpl.java +++ b/modules/thing/src/main/java/com/thing/thing/entity/service/impl/IotThingEntityServiceImpl.java @@ -23,6 +23,7 @@ import com.thing.common.data.tskv.TsKvDTO; import com.thing.common.orm.service.impl.BaseServiceImpl; import com.thing.common.tskv.service.TsKvService; import com.thing.event.ThingChangedEvent; +import com.thing.event.ThingRelationDetailUpdateEvent; import com.thing.sys.biz.entity.SysDeptEntity; import com.thing.sys.biz.mapper.SysDeptMapper; import com.thing.sys.oss.cloud.OSSFactory; @@ -531,6 +532,7 @@ public class IotThingEntityServiceImpl extends BaseServiceImpl findByFromIdAndToId(Long fromId,Long toId); + List findByRootId(Long rootId); Long findByMaxSort(Long rootId); diff --git a/modules/thing/src/main/java/com/thing/thing/relation/detail/service/impl/IotThingRelationDetailServiceImpl.java b/modules/thing/src/main/java/com/thing/thing/relation/detail/service/impl/IotThingRelationDetailServiceImpl.java index adfd661..1cb9d58 100644 --- a/modules/thing/src/main/java/com/thing/thing/relation/detail/service/impl/IotThingRelationDetailServiceImpl.java +++ b/modules/thing/src/main/java/com/thing/thing/relation/detail/service/impl/IotThingRelationDetailServiceImpl.java @@ -191,6 +191,13 @@ public class IotThingRelationDetailServiceImpl extends BaseServiceImpl findByFromIdAndToId(Long fromId, Long toId) { + return mapper.selectListByQuery(QueryWrapper.create() + .eq(IotThingRelationDetailEntity::getToId, toId,!Objects.isNull(toId)) + .eq(IotThingRelationDetailEntity::getFromId, fromId,!Objects.isNull(fromId))); + } + @Override public List findByRootId(Long rootId) { return mapper.selectListByQueryAs(QueryWrapper.create()