From e4f84a2239947f78b0739c7dffb8c7cd714ae365 Mon Sep 17 00:00:00 2001 From: "review512jwy@163.com" <“review512jwy@163.com”> Date: Tue, 27 Jan 2026 21:11:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=BF=81=E7=A7=BB=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/back/common/Constants.java | 5 + .../DeviceDataBaStatusController.java | 18 + .../back/dao/auto/BaStatusHistoryMapper.java | 96 +++ .../back/dao/ex/BaStatusHistoryMapperExt.java | 9 + .../mappers/auto/BaStatusHistoryMapper.xml | 257 ++++++++ .../mybatis-generator/generatorConfig.xml | 5 + .../dashboard/back/model/BaStatusHistory.java | 166 ++++++ .../back/model/BaStatusHistoryExample.java | 552 ++++++++++++++++++ .../service/DeviceDataBaStatusService.java | 5 + .../back/service/common/CommonOpt.java | 10 +- .../impl/DeviceDataAccumulateServiceImpl.java | 2 +- .../impl/DeviceDataBaStatusServiceImpl.java | 77 ++- .../impl/DeviceDataMeasureServiceImpl.java | 2 +- .../dongjian/dashboard/back/util/Test.java | 39 +- 14 files changed, 1217 insertions(+), 26 deletions(-) create mode 100644 dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/auto/BaStatusHistoryMapper.java create mode 100644 dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BaStatusHistoryMapperExt.java create mode 100644 dongjian-dashboard-back-dao/src/main/resources/mappers/auto/BaStatusHistoryMapper.xml create mode 100644 dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistory.java create mode 100644 dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistoryExample.java diff --git a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java b/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java index 7904d83..4edb1bb 100644 --- a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java +++ b/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java @@ -1,5 +1,7 @@ package com.dongjian.dashboard.back.common; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -7,6 +9,9 @@ import java.util.*; * @time 2022年5月20日 下午2:01:41 */ public class Constants { + + public static final ZoneId ZONE_TOKYO = ZoneId.of("Asia/Tokyo"); + public static final DateTimeFormatter FORMATTER_YMDHMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //这个很重要,不要随便动 public static final String DES_SALT = "ci3b512jwy199511"; diff --git a/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/DeviceDataBaStatusController.java b/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/DeviceDataBaStatusController.java index 6156013..3523a4f 100644 --- a/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/DeviceDataBaStatusController.java +++ b/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/DeviceDataBaStatusController.java @@ -6,13 +6,16 @@ import com.dongjian.dashboard.back.common.exception.BusinessException; import com.dongjian.dashboard.back.common.response.PageInfo; import com.dongjian.dashboard.back.common.response.PageResponse; import com.dongjian.dashboard.back.common.response.ResponseCode; +import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.configurator.aspect.OperationLog; import com.dongjian.dashboard.back.configurator.interceptor.AccessRequired; import com.dongjian.dashboard.back.dto.data.BaStatusDataSearchParam; +import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; import com.dongjian.dashboard.back.easyexcel.ExportDeviceBaStatusDataDTO; import com.dongjian.dashboard.back.easyexcel.LanguageDynamicHeaderAdapter; import com.dongjian.dashboard.back.service.DeviceDataBaStatusService; import com.dongjian.dashboard.back.vo.data.DeviceBaStatusData; +import com.dongjian.dashboard.back.vo.device.LineData; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; @@ -108,4 +111,19 @@ public class DeviceDataBaStatusController { .doWrite(exportList); } + @OperationLog(operation = "getLineData", remark = "") + @Operation(summary = "获取状态迁移图") + @RequestMapping(value = "/getLineData",method = RequestMethod.POST) + public SimpleDataResponse> getLineData( + @Parameter(name = "searchType", description = "1-按小时,2-全部数据", required = true) Integer searchType, + @Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName, + @Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken, + @Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId, + @Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId, + @Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType, + @RequestBody LineDataSearchParams lineDataSearchParams + ) throws BusinessException { + return deviceDataBaStatusService.getLineData(searchType, lineDataSearchParams, CompanyId, UserId, LanguageType); + } + } diff --git a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/auto/BaStatusHistoryMapper.java b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/auto/BaStatusHistoryMapper.java new file mode 100644 index 0000000..a1a3387 --- /dev/null +++ b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/auto/BaStatusHistoryMapper.java @@ -0,0 +1,96 @@ +package com.dongjian.dashboard.back.dao.auto; + +import com.dongjian.dashboard.back.model.BaStatusHistory; +import com.dongjian.dashboard.back.model.BaStatusHistoryExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface BaStatusHistoryMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + long countByExample(BaStatusHistoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int deleteByExample(BaStatusHistoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int insert(BaStatusHistory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int insertSelective(BaStatusHistory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + List selectByExample(BaStatusHistoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + BaStatusHistory selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int updateByExampleSelective(@Param("record") BaStatusHistory record, @Param("example") BaStatusHistoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int updateByExample(@Param("record") BaStatusHistory record, @Param("example") BaStatusHistoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int updateByPrimaryKeySelective(BaStatusHistory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + int updateByPrimaryKey(BaStatusHistory record); +} \ No newline at end of file diff --git a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BaStatusHistoryMapperExt.java b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BaStatusHistoryMapperExt.java new file mode 100644 index 0000000..f863644 --- /dev/null +++ b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BaStatusHistoryMapperExt.java @@ -0,0 +1,9 @@ +package com.dongjian.dashboard.back.dao.ex; + +import com.dongjian.dashboard.back.dao.auto.BaStatusHistoryMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BaStatusHistoryMapperExt extends BaStatusHistoryMapper { + +} diff --git a/dongjian-dashboard-back-dao/src/main/resources/mappers/auto/BaStatusHistoryMapper.xml b/dongjian-dashboard-back-dao/src/main/resources/mappers/auto/BaStatusHistoryMapper.xml new file mode 100644 index 0000000..771aef2 --- /dev/null +++ b/dongjian-dashboard-back-dao/src/main/resources/mappers/auto/BaStatusHistoryMapper.xml @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, device_info_id, is_running, update_ts + + + + + + delete from ba_status_history + where id = #{id,jdbcType=BIGINT} + + + + delete from ba_status_history + + + + + + + + SELECT LAST_INSERT_ID() + + insert into ba_status_history (device_info_id, is_running, update_ts + ) + values (#{deviceInfoId,jdbcType=INTEGER}, #{isRunning,jdbcType=INTEGER}, #{updateTs,jdbcType=VARCHAR} + ) + + + + + SELECT LAST_INSERT_ID() + + insert into ba_status_history + + + device_info_id, + + + is_running, + + + update_ts, + + + + + #{deviceInfoId,jdbcType=INTEGER}, + + + #{isRunning,jdbcType=INTEGER}, + + + #{updateTs,jdbcType=VARCHAR}, + + + + + + + update ba_status_history + + + id = #{record.id,jdbcType=BIGINT}, + + + device_info_id = #{record.deviceInfoId,jdbcType=INTEGER}, + + + is_running = #{record.isRunning,jdbcType=INTEGER}, + + + update_ts = #{record.updateTs,jdbcType=VARCHAR}, + + + + + + + + + update ba_status_history + set id = #{record.id,jdbcType=BIGINT}, + device_info_id = #{record.deviceInfoId,jdbcType=INTEGER}, + is_running = #{record.isRunning,jdbcType=INTEGER}, + update_ts = #{record.updateTs,jdbcType=VARCHAR} + + + + + + + update ba_status_history + + + device_info_id = #{deviceInfoId,jdbcType=INTEGER}, + + + is_running = #{isRunning,jdbcType=INTEGER}, + + + update_ts = #{updateTs,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + + update ba_status_history + set device_info_id = #{deviceInfoId,jdbcType=INTEGER}, + is_running = #{isRunning,jdbcType=INTEGER}, + update_ts = #{updateTs,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/dongjian-dashboard-back-dao/src/main/resources/mybatis-generator/generatorConfig.xml b/dongjian-dashboard-back-dao/src/main/resources/mybatis-generator/generatorConfig.xml index b750704..f51a384 100644 --- a/dongjian-dashboard-back-dao/src/main/resources/mybatis-generator/generatorConfig.xml +++ b/dongjian-dashboard-back-dao/src/main/resources/mybatis-generator/generatorConfig.xml @@ -154,5 +154,10 @@ + + + +
+ \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistory.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistory.java new file mode 100644 index 0000000..c6c761a --- /dev/null +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistory.java @@ -0,0 +1,166 @@ +package com.dongjian.dashboard.back.model; + +import java.io.Serializable; + +public class BaStatusHistory implements Serializable { + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column ba_status_history.id + * + * @mbg.generated + */ + private Long id; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column ba_status_history.device_info_id + * + * @mbg.generated + */ + private Integer deviceInfoId; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column ba_status_history.is_running + * + * @mbg.generated + */ + private Integer isRunning; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column ba_status_history.update_ts + * + * @mbg.generated + */ + private String updateTs; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table ba_status_history + * + * @mbg.generated + */ + private static final long serialVersionUID = 1L; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column ba_status_history.id + * + * @return the value of ba_status_history.id + * + * @mbg.generated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column ba_status_history.id + * + * @param id the value for ba_status_history.id + * + * @mbg.generated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column ba_status_history.device_info_id + * + * @return the value of ba_status_history.device_info_id + * + * @mbg.generated + */ + public Integer getDeviceInfoId() { + return deviceInfoId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column ba_status_history.device_info_id + * + * @param deviceInfoId the value for ba_status_history.device_info_id + * + * @mbg.generated + */ + public void setDeviceInfoId(Integer deviceInfoId) { + this.deviceInfoId = deviceInfoId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column ba_status_history.is_running + * + * @return the value of ba_status_history.is_running + * + * @mbg.generated + */ + public Integer getIsRunning() { + return isRunning; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column ba_status_history.is_running + * + * @param isRunning the value for ba_status_history.is_running + * + * @mbg.generated + */ + public void setIsRunning(Integer isRunning) { + this.isRunning = isRunning; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column ba_status_history.update_ts + * + * @return the value of ba_status_history.update_ts + * + * @mbg.generated + */ + public String getUpdateTs() { + return updateTs; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column ba_status_history.update_ts + * + * @param updateTs the value for ba_status_history.update_ts + * + * @mbg.generated + */ + public void setUpdateTs(String updateTs) { + this.updateTs = updateTs == null ? null : updateTs.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", deviceInfoId=").append(deviceInfoId); + sb.append(", isRunning=").append(isRunning); + sb.append(", updateTs=").append(updateTs); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistoryExample.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistoryExample.java new file mode 100644 index 0000000..75a14df --- /dev/null +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/model/BaStatusHistoryExample.java @@ -0,0 +1,552 @@ +package com.dongjian.dashboard.back.model; + +import java.util.ArrayList; +import java.util.List; + +public class BaStatusHistoryExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table ba_status_history + * + * @mbg.generated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table ba_status_history + * + * @mbg.generated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table ba_status_history + * + * @mbg.generated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public BaStatusHistoryExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table ba_status_history + * + * @mbg.generated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdIsNull() { + addCriterion("device_info_id is null"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdIsNotNull() { + addCriterion("device_info_id is not null"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdEqualTo(Integer value) { + addCriterion("device_info_id =", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdNotEqualTo(Integer value) { + addCriterion("device_info_id <>", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdGreaterThan(Integer value) { + addCriterion("device_info_id >", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdGreaterThanOrEqualTo(Integer value) { + addCriterion("device_info_id >=", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdLessThan(Integer value) { + addCriterion("device_info_id <", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdLessThanOrEqualTo(Integer value) { + addCriterion("device_info_id <=", value, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdIn(List values) { + addCriterion("device_info_id in", values, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdNotIn(List values) { + addCriterion("device_info_id not in", values, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdBetween(Integer value1, Integer value2) { + addCriterion("device_info_id between", value1, value2, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andDeviceInfoIdNotBetween(Integer value1, Integer value2) { + addCriterion("device_info_id not between", value1, value2, "deviceInfoId"); + return (Criteria) this; + } + + public Criteria andIsRunningIsNull() { + addCriterion("is_running is null"); + return (Criteria) this; + } + + public Criteria andIsRunningIsNotNull() { + addCriterion("is_running is not null"); + return (Criteria) this; + } + + public Criteria andIsRunningEqualTo(Integer value) { + addCriterion("is_running =", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningNotEqualTo(Integer value) { + addCriterion("is_running <>", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningGreaterThan(Integer value) { + addCriterion("is_running >", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningGreaterThanOrEqualTo(Integer value) { + addCriterion("is_running >=", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningLessThan(Integer value) { + addCriterion("is_running <", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningLessThanOrEqualTo(Integer value) { + addCriterion("is_running <=", value, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningIn(List values) { + addCriterion("is_running in", values, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningNotIn(List values) { + addCriterion("is_running not in", values, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningBetween(Integer value1, Integer value2) { + addCriterion("is_running between", value1, value2, "isRunning"); + return (Criteria) this; + } + + public Criteria andIsRunningNotBetween(Integer value1, Integer value2) { + addCriterion("is_running not between", value1, value2, "isRunning"); + return (Criteria) this; + } + + public Criteria andUpdateTsIsNull() { + addCriterion("update_ts is null"); + return (Criteria) this; + } + + public Criteria andUpdateTsIsNotNull() { + addCriterion("update_ts is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTsEqualTo(String value) { + addCriterion("update_ts =", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsNotEqualTo(String value) { + addCriterion("update_ts <>", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsGreaterThan(String value) { + addCriterion("update_ts >", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsGreaterThanOrEqualTo(String value) { + addCriterion("update_ts >=", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsLessThan(String value) { + addCriterion("update_ts <", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsLessThanOrEqualTo(String value) { + addCriterion("update_ts <=", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsLike(String value) { + addCriterion("update_ts like", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsNotLike(String value) { + addCriterion("update_ts not like", value, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsIn(List values) { + addCriterion("update_ts in", values, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsNotIn(List values) { + addCriterion("update_ts not in", values, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsBetween(String value1, String value2) { + addCriterion("update_ts between", value1, value2, "updateTs"); + return (Criteria) this; + } + + public Criteria andUpdateTsNotBetween(String value1, String value2) { + addCriterion("update_ts not between", value1, value2, "updateTs"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table ba_status_history + * + * @mbg.generated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table ba_status_history + * + * @mbg.generated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/DeviceDataBaStatusService.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/DeviceDataBaStatusService.java index a8b238b..204054b 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/DeviceDataBaStatusService.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/DeviceDataBaStatusService.java @@ -1,8 +1,11 @@ package com.dongjian.dashboard.back.service; import com.dongjian.dashboard.back.common.response.PageInfo; +import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.dto.data.BaStatusDataSearchParam; +import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; import com.dongjian.dashboard.back.vo.data.DeviceBaStatusData; +import com.dongjian.dashboard.back.vo.device.LineData; import java.util.List; @@ -14,4 +17,6 @@ public interface DeviceDataBaStatusService { PageInfo getDataList(BaStatusDataSearchParam pageSearchParam, Long companyId, Long userId, Integer languageType); List handleDeviceBaStatusData(BaStatusDataSearchParam pageSearchParam); + + SimpleDataResponse> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType); } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java index ef166fc..4cec390 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java @@ -260,7 +260,7 @@ public class CommonOpt { public List getPreDay(int days) { // 日本时区 - ZoneId JST = ZoneId.of("Asia/Tokyo"); + ZoneId JST = Constants.ZONE_TOKYO; // 获取当前日期 LocalDate currentDate = LocalDate.now(JST); // 设置日期格式化 @@ -399,8 +399,8 @@ public class CommonOpt { try (ResultSet rs = ps.executeQuery()) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - ZoneId JST = ZoneId.of("Asia/Tokyo"); + DateTimeFormatter formatter = Constants.FORMATTER_YMDHMS; + ZoneId JST = Constants.ZONE_TOKYO; while (rs.next()) { long ts = rs.getLong("upload_at"); @@ -516,7 +516,7 @@ public class CommonOpt { List yDataList = new ArrayList<>(); // 使用 DateTimeFormatter 来格式化时间 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter formatter = Constants.FORMATTER_YMDHMS; ObjectMapper mapper = new ObjectMapper(); // 遍历查询结果 @@ -532,7 +532,7 @@ public class CommonOpt { // 将 long 时间戳转换为 LocalDateTime(日本时区) Instant instant = Instant.ofEpochMilli(receiveTs); - String formattedDate = instant.atZone(ZoneId.of("Asia/Tokyo")) + String formattedDate = instant.atZone(Constants.ZONE_TOKYO) .toLocalDateTime() .format(formatter); diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java index 58ce354..f0c111f 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java @@ -138,7 +138,7 @@ public class DeviceDataAccumulateServiceImpl implements DeviceDataAccumulateServ } } - LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Tokyo")); + LocalDateTime now = LocalDateTime.now(Constants.ZONE_TOKYO); LocalDate today = now.toLocalDate(); LocalDate yesterday = today.minusDays(1); LocalDate lastYear = DateUtil.getLastYearSameIsoWeekDay(today); diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java index 027626b..4d1a553 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java @@ -3,20 +3,21 @@ package com.dongjian.dashboard.back.service.impl; import com.dongjian.dashboard.back.common.Constants; import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; import com.dongjian.dashboard.back.common.response.PageInfo; +import com.dongjian.dashboard.back.common.response.SimpleDataResponse; +import com.dongjian.dashboard.back.dao.ex.BaStatusHistoryMapperExt; import com.dongjian.dashboard.back.dao.ex.DeviceInfoMapperExt; import com.dongjian.dashboard.back.dao.ex.DeviceRawdataRealtimeMapperExt; import com.dongjian.dashboard.back.dao.ex.FavoritedDeviceMapperExt; import com.dongjian.dashboard.back.dto.data.BaStatusDataSearchParam; +import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; import com.dongjian.dashboard.back.easyexcel.SecondsToHMSConverter; -import com.dongjian.dashboard.back.model.DeviceInfo; -import com.dongjian.dashboard.back.model.DeviceInfoExample; -import com.dongjian.dashboard.back.model.DeviceRawdataRealtime; -import com.dongjian.dashboard.back.model.DeviceRawdataRealtimeExample; +import com.dongjian.dashboard.back.model.*; import com.dongjian.dashboard.back.service.DeviceDataBaStatusService; import com.dongjian.dashboard.back.service.common.CommonOpt; import com.dongjian.dashboard.back.vo.data.DeviceAccumulateData; import com.dongjian.dashboard.back.vo.data.DeviceBaStatusData; import com.dongjian.dashboard.back.vo.data.DeviceMeasureData; +import com.dongjian.dashboard.back.vo.device.LineData; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; @@ -30,6 +31,9 @@ import org.springframework.stereotype.Service; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -49,6 +53,8 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService @Autowired private FavoritedDeviceMapperExt favoritedDeviceMapperExt; @Autowired + private BaStatusHistoryMapperExt baStatusHistoryMapperExt; + @Autowired private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt; @Autowired private MsgLanguageChange msgLanguageChange; @@ -172,4 +178,67 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService return resultList; } + @Override + public SimpleDataResponse> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType) { + List lineDataList = new ArrayList<>(); + + DeviceInfoExample devExample = new DeviceInfoExample(); + devExample.createCriteria() + .andCompanyIdEqualTo(companyId) + .andDeviceIdEqualTo(lineDataSearchParams.getDeviceId()); + List deviceInfoList = deviceInfoMapperExt.selectByExample(devExample); + if (CollectionUtils.isEmpty(deviceInfoList)) { + return SimpleDataResponse.success(lineDataList); + } + + DeviceInfo deviceInfo = deviceInfoList.get(0); + + // 今天 00:00:00.000 + LocalDate today = LocalDate.now(); + long startOfDay = today + .atStartOfDay(ZoneId.systemDefault()) + .toInstant() + .toEpochMilli(); + String startTs = String.valueOf(startOfDay); + + BaStatusHistoryExample bshExample = new BaStatusHistoryExample(); + BaStatusHistoryExample.Criteria criteria = bshExample.createCriteria(); + criteria.andUpdateTsGreaterThanOrEqualTo(startTs).andDeviceInfoIdEqualTo(deviceInfo.getId()); + + List result = baStatusHistoryMapperExt.selectByExample(bshExample); + if (CollectionUtils.isNotEmpty(result)) { + LineData lineData = new LineData(); + List yCommon = new ArrayList<>(); + for (BaStatusHistory item : result) { + String tsStr = item.getUpdateTs(); + if (tsStr == null || tsStr.isEmpty()) { + continue; // 跳过 + } + + long ts; + try { + ts = Long.parseLong(tsStr); + } catch (NumberFormatException e) { + logger.error("Invalid timestamp: {}", tsStr); + continue; // 非法时间戳跳过 + } + + // 毫秒 -> 日本时间 -> 格式化 + String formatted = Instant.ofEpochMilli(ts) + .atZone(Constants.ZONE_TOKYO) + .format(Constants.FORMATTER_YMDHMS); + + lineData.getXData().add(formatted); + yCommon.add(item.getIsRunning()); + } + + lineData.setAttrCode(lineDataSearchParams.getAttrCodeList()[0]); + lineData.getYData().put("common", yCommon); + + lineDataList.add(lineData); + } + + return SimpleDataResponse.success(lineDataList); + } + } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java index 7e5e1ec..63e37aa 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java @@ -148,7 +148,7 @@ public class DeviceDataMeasureServiceImpl implements DeviceDataMeasureService { } } - ZoneId tokyoZone = ZoneId.of("Asia/Tokyo"); + ZoneId tokyoZone = Constants.ZONE_TOKYO; LocalDate tokyoToday = LocalDate.now(tokyoZone); int year = tokyoToday.getYear(); int month = tokyoToday.getMonthValue(); diff --git a/dongjian-dashboard-back-util/src/test/java/com/dongjian/dashboard/back/util/Test.java b/dongjian-dashboard-back-util/src/test/java/com/dongjian/dashboard/back/util/Test.java index 429b451..dcfc2b7 100644 --- a/dongjian-dashboard-back-util/src/test/java/com/dongjian/dashboard/back/util/Test.java +++ b/dongjian-dashboard-back-util/src/test/java/com/dongjian/dashboard/back/util/Test.java @@ -7,6 +7,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.regex.Matcher; @@ -22,23 +23,31 @@ public class Test { private final static long ondDayMillis = 3600 * 24 * 1000; private static final String betweenQuotesRegex = "\"([^\"]*)\""; + + private static final String[] suffixes = { "_85", "_85_9003", "_111", "_111_9003", "_S", "_s", "_131_5" }; public static void main(String[] args) throws ParseException{ - long ZeroTime = getTodayZeroTime(); - System.out.println(ZeroTime); - long startTime = ZeroTime - ondDayMillis; - System.out.println(startTime); - long endTime = ZeroTime - 1; - System.out.println(endTime); - - int days = 2; - System.out.println("前"+ days +"天的0点的毫秒级时间戳: " + getMinusZeroTimestamp(days)); - - int mins = 9; - minusInterval(mins); - - System.out.println(CommonUtil.extractContentBetweenQuotes("aurora_cluster_endpoint = \"company-13-aurora-cluster.cluster-cde6q2assvmn.ap-northeast-1.rds.amazonaws.com\"")); - +// long ZeroTime = getTodayZeroTime(); +// System.out.println(ZeroTime); +// long startTime = ZeroTime - ondDayMillis; +// System.out.println(startTime); +// long endTime = ZeroTime - 1; +// System.out.println(endTime); +// +// int days = 2; +// System.out.println("前"+ days +"天的0点的毫秒级时间戳: " + getMinusZeroTimestamp(days)); +// +// int mins = 9; +// minusInterval(mins); +// +// System.out.println(CommonUtil.extractContentBetweenQuotes("aurora_cluster_endpoint = \"company-13-aurora-cluster.cluster-cde6q2assvmn.ap-northeast-1.rds.amazonaws.com\"")); + + if (Arrays.stream(suffixes).anyMatch("AMMM_42_TL_TRED800073_131_5"::endsWith)){ + System.out.println("包含"); + } else { + System.out.println("不包含"); + } + } public static String extractContentBetweenQuotes(String text) {