diff --git a/evcs-modules/evcs-common/pom.xml b/evcs-modules/evcs-common/pom.xml new file mode 100644 index 00000000..e055a93b --- /dev/null +++ b/evcs-modules/evcs-common/pom.xml @@ -0,0 +1,93 @@ + + + com.xhpc + evcs-modules + 1.0 + + + 4.0.0 + evcs-common + + + + + org.projectlombok + lombok + + + + org.apache.commons + commons-lang3 + + + + org.springframework.data + spring-data-commons + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework + spring-web + 5.3.8 + + + org.springframework + spring-webmvc + 5.3.8 + + + + com.jayway.jsonpath + json-path + + + javax.servlet + javax.servlet-api + + + joda-time + joda-time + 2.9.9 + + + com.fasterxml.jackson.core + jackson-annotations + 2.12.3 + + + com.fasterxml.jackson.core + jackson-databind + 2.12.3 + + + com.alibaba + fastjson + 1.2.76 + + + + + org.springframework.boot + spring-boot-devtools + true + + + + org.springframework.data + spring-data-jpa + 2.5.1 + + + com.ruoyi + xhpc-common + 3.0.0 + compile + + + diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/AuthSecretToken.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/AuthSecretToken.java new file mode 100644 index 00000000..c8004f21 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/AuthSecretToken.java @@ -0,0 +1,69 @@ +package com.xhpc.evcs.domain; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Getter +@Setter +@Entity +@Table(name = "ET_AUTH_SEC_TOKEN") +public class AuthSecretToken { + + public final static String SECRET_TOKEN_TYPE_IN = "IN"; + public final static String SECRET_TOKEN_TYPE_OUT = "OUT"; + + @Id + @GeneratedValue() + private Integer id; + + private String operatorId; + + private String operatorId3irdpty; + + private String urlPrefix; + + private String secretTokenType; + + private String operatorSecret; + + private String sigSecret; + + private String dataSecret; + + private String dataSecretIV; + + private String token; + + private Date tokenExpiry; + + private boolean encrypt; + + private Long lastPushOrder; + + public AuthSecretToken() { + + } + + public AuthSecretToken(String operatorId, String secretTokenType) { + + this.operatorId = operatorId; + this.secretTokenType = secretTokenType; + } + + public Long getLastPushOrder() { + + return lastPushOrder == null ? 0 : lastPushOrder; + } + + public void setLastPushOrder(Long lastPushOrder) { + + this.lastPushOrder = lastPushOrder; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CDChargeOrderInfo4Bonus.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CDChargeOrderInfo4Bonus.java new file mode 100644 index 00000000..4678505f --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CDChargeOrderInfo4Bonus.java @@ -0,0 +1,159 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.xhpc.evcs.dto.ChargeDetails; +import com.xhpc.evcs.utils.DateUtil; +import com.xhpc.order.domain.XhpcHistoryOrder; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import javax.persistence.Column; +import javax.persistence.Id; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +//@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "ConnectorID", + "StartTime", + "EndTime", + "ChargeModel", + "TotalPower", + "TotalElecMoney", + "TotalSeviceMoney", + "TotalMoney", + "StopReason", + "SumPeriod", + "ChargeDetails", + "UserName", + "StationID", + "EquipmentID", + "ConnectorPower", + "ChargeLast", + "MeterValueStart", + "MeterValueEnd" +}) +@Data +public class CDChargeOrderInfo4Bonus { + + @Id + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("ChargeModel") + private Integer chargeModel; + @JsonProperty("ChargeLast") + private Integer chargeLast; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("UserName") + private String userName; + @JsonProperty("StationID") + private String stationId; + @JsonProperty("EquipmentID") + private String equipmentId; + @JsonProperty("TotalPower") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalPower = 0.0; + @JsonProperty("MeterValueStart") + @Column(columnDefinition = "Decimal(10,2)") + private Double meterValueStart = 0.0; + @JsonProperty("MeterValueEnd") + @Column(columnDefinition = "Decimal(10,2)") + private Double meterValueEnd = 0.0; + @JsonProperty("TotalElecMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalElecMoney = 0.0; + @JsonProperty("TotalSeviceMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalSeviceMoney = 0.0; + @JsonProperty("ConnectorPower") + @Column(columnDefinition = "Decimal(10,2)") + private Double connectorPower = 0.0; + @JsonProperty("TotalMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalMoney = 0.0; + @JsonProperty("StopReason") + private Integer stopReason; + @JsonProperty("SumPeriod") + private Integer sumPeriod; + @JsonProperty("ChargeDetails") + private ChargeDetails[] chargeDetails; + + public CDChargeOrderInfo4Bonus(XhpcHistoryOrder xhpcHistoryOrder, EtOrderMapping etOrderMapping) { + + this.startChargeSeq = etOrderMapping.getEvcsOrderNo(); + this.connectorID = xhpcHistoryOrder.getSerialNumber().substring(0, 16); + this.endTime = DateUtil.date2String(xhpcHistoryOrder.getCreateTime(), DateUtil.DATE_FORMAT_DATE_TIME); + this.startTime = DateUtil.date2String(xhpcHistoryOrder.getStartTime(), DateUtil.DATE_FORMAT_DATE_TIME); + this.chargeModel = xhpcHistoryOrder.getChargeModelEvcs(); + this.totalPower = xhpcHistoryOrder.getTotalPower(); + this.totalElecMoney = xhpcHistoryOrder.getTotalPrice().doubleValue(); + this.totalSeviceMoney = xhpcHistoryOrder.getServicePriceTotal().doubleValue(); + this.totalMoney = xhpcHistoryOrder.getTotalPrice().doubleValue(); + this.stopReason = xhpcHistoryOrder.getStopReasonEvcs(); + this.sumPeriod = xhpcHistoryOrder.getXhpcStatisticsTimeIntervalList().size(); + this.chargeDetails = translate(xhpcHistoryOrder.getXhpcStatisticsTimeIntervalList()); + this.userName = xhpcHistoryOrder.getUserNameEvcs(); + this.stationId = xhpcHistoryOrder.getChargingStationId().toString(); + this.equipmentId = xhpcHistoryOrder.getSerialNumber().substring(0, 14); + this.connectorPower = xhpcHistoryOrder.getConnectorPowerEvcs(); + Date starttime = xhpcHistoryOrder.getStartTime(); + Date endtime = xhpcHistoryOrder.getCreateTime(); + int cl = 0; + if (starttime != null && endtime != null) { + cl = Math.toIntExact((endtime.getTime() - starttime.getTime()) / 1000); + } + this.chargeLast = cl; + this.meterValueStart = xhpcHistoryOrder.getMeterValueStartEvcs(); + this.meterValueEnd = xhpcHistoryOrder.getMeterValueEndEvcs(); + } + + private ChargeDetails[] translate(List xhpcStatisticsTimeIntervalList) { + + List details = new LinkedList<>(); + for (XhpcStatisticsTimeInterval statistics : xhpcStatisticsTimeIntervalList) { + details.add(new ChargeDetails(statistics)); + } + ChargeDetails[] a = new ChargeDetails[details.size()]; + return details.toArray(a); + } + + public CDChargeOrderInfo4Bonus() { + + super(); + } + + @Override + public String toString() { + + return new ToStringBuilder(this) + .append("startChargeSeq", startChargeSeq) + .append("connectorID", connectorID) + .append("startTime", startTime) + .append("chargeModel", chargeModel) + .append("chargeLast", chargeLast) + .append("endTime", endTime) + .append("userName", userName) + .append("stationId", stationId) + .append("equipmentId", equipmentId) + .append("totalPower", totalPower) + .append("meterValueStart", meterValueStart) + .append("meterValueEnd", meterValueEnd) + .append("totalElecMoney", totalElecMoney) + .append("totalSeviceMoney", totalSeviceMoney) + .append("connectorPower", connectorPower) + .append("totalMoney", totalMoney) + .append("stopReason", stopReason) + .append("sumPeriod", sumPeriod) + .append("chargeDetails", chargeDetails) + .toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ChargeOrderInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ChargeOrderInfo.java new file mode 100644 index 00000000..96b9d5f2 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ChargeOrderInfo.java @@ -0,0 +1,234 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.*; +import com.xhpc.evcs.dto.ChargeDetails; +import com.xhpc.order.domain.XhpcHistoryOrder; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import javax.persistence.*; +import java.util.HashMap; +import java.util.Map; + +//@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "ConnectorID", + "StartTime", + "EndTime", + "TotalPower", + "TotalElecMoney", + "TotalSeviceMoney", + "TotalMoney", + "StopReason", + "SumPeriod" +}) +@Entity +@Setter +@Getter +@Table(name = "ET_CHARGE_ORDER_INFO") +public class ChargeOrderInfo { + + @Id + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonIgnore + private Integer startChargeSeqStat; + @JsonIgnore + private Integer failReason; + @JsonIgnore + private String identCode; + @JsonIgnore + @Column(updatable = false) + private String infraOperatorId; + @JsonIgnore + @Column(updatable = false) + private String billerOperatorId;//biller + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("ChargeModel") + private Integer chargeModel; + @JsonProperty("Vin") + private String vin; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("TotalPower") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalPower = 0.0; + @JsonProperty("TotalElecMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalElecMoney = 0.0; + @JsonProperty("TotalSeviceMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalSeviceMoney = 0.0; + @JsonProperty("TotalMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalMoney = 0.0; + @JsonProperty("StopReason") + private Integer stopReason; + @JsonProperty("SumPeriod") + private Integer sumPeriod; + @JsonProperty("ChargeDetails") + private ChargeDetails[] chargeDetails; + @JsonIgnore + @Transient + private Map additionalProperties = new HashMap(); + + public ChargeOrderInfo(XhpcHistoryOrder xhpcHistoryOrder) { +// this.connectorID = xhpcHistoryOrder.getTerminalId() + } + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + public ChargeOrderInfo setStartChargeSeqAndReturn(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + return this; + } + + @JsonProperty("ConnectorID") + public String getConnectorID() { + + return connectorID; + } + + @JsonProperty("ConnectorID") + public void setConnectorID(String connectorID) { + + this.connectorID = connectorID; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonProperty("TotalPower") + public Double getTotalPower() { + + return totalPower; + } + + @JsonProperty("TotalPower") + public void setTotalPower(Double totalPower) { + + this.totalPower = totalPower; + } + + @JsonProperty("TotalElecMoney") + public Double getTotalElecMoney() { + + return totalElecMoney; + } + + @JsonProperty("TotalElecMoney") + public void setTotalElecMoney(Double totalElecMoney) { + + this.totalElecMoney = totalElecMoney; + } + + @JsonProperty("TotalSeviceMoney") + public Double getTotalSeviceMoney() { + + return totalSeviceMoney; + } + + @JsonProperty("TotalSeviceMoney") + public void setTotalSeviceMoney(Double totalSeviceMoney) { + + this.totalSeviceMoney = totalSeviceMoney; + } + + @JsonProperty("TotalMoney") + public Double getTotalMoney() { + + return totalMoney; + } + + @JsonProperty("TotalMoney") + public void setTotalMoney(Double totalMoney) { + + this.totalMoney = totalMoney; + } + + @JsonProperty("StopReason") + public Integer getStopReason() { + + return stopReason; + } + + @JsonProperty("StopReason") + public void setStopReason(Integer stopReason) { + + this.stopReason = stopReason; + } + + @JsonProperty("SumPeriod") + public Integer getSumPeriod() { + + return sumPeriod; + } + + @JsonProperty("SumPeriod") + public void setSumPeriod(Integer sumPeriod) { + + this.sumPeriod = sumPeriod; + } + + @JsonAnyGetter + @Transient + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + @Transient + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("connectorID", connectorID).append( + "startTime", startTime).append("endTime", endTime).append("totalPower", totalPower).append("totalElecMoney", + totalElecMoney).append("totalSeviceMoney", totalSeviceMoney).append("totalMoney", totalMoney).append( + "stopReason", stopReason).append("sumPeriod", sumPeriod).append("additionalProperties", + additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonOperatorInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonOperatorInfo.java new file mode 100644 index 00000000..ffc1f809 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonOperatorInfo.java @@ -0,0 +1,32 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Getter +@Setter +@Entity(name = "ET_COMMON_OPERATOR_INFO") +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class CommonOperatorInfo { + + @Id + @JsonProperty("OperatorID") + String operatorId; + @JsonProperty("OperatorName") + String operatorName; + @JsonProperty("OperatorTel1") + String operatorTel1; + @JsonProperty("OperatorTel2") + String operatorTel2; + @JsonProperty("OperatorRegAddress") + String operatorRegAddress; + @JsonProperty("OperatorNote") + String operatorNote; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonStationInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonStationInfo.java new file mode 100644 index 00000000..eaa6bce9 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/CommonStationInfo.java @@ -0,0 +1,32 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Setter +@Entity +@Table(name = "ET_COMMON_STATION_INFO") +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class CommonStationInfo { + + @Id + @JsonProperty("StationID") + String stationId; + @JsonProperty("OperatorID") + String operatorId; + @JsonProperty("EquipmentOwnerID") + String equipmentOwnerId; + @JsonProperty("StationName") + String stationName; + @JsonProperty("CountryCode") + String countryCode; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ConnectorStatusInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ConnectorStatusInfo.java new file mode 100644 index 00000000..b74d6e33 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/ConnectorStatusInfo.java @@ -0,0 +1,85 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.*; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + + +@JsonPropertyOrder({ + "ConnectorID", + "Status" +}) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +@Entity +@Getter +@Setter +@Table(name = "ET_CONNECTOR_STATUS_INFO") +public class ConnectorStatusInfo { + + final static int OFF_LINE = 0;//离网 + final static int FREE = 1;//空闲 + final static int CONNECTED = 2;//占用(未充电) + final static int CHARGING = 3;//占用(充电中) + final static int BOOKED = 4;//占用(预约锁定) + final static int ERROR = 255;//故障 + + @Id + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("OperatorID") + private String operatorID; + @JsonProperty("Status") + private Integer status; + @Transient + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this) + .append("connectorID", connectorID) + .append("operatorID", operatorID) + .append("status", status) + .append("additionalProperties", additionalProperties) + .toString(); + } + + @Override + public boolean equals(Object o) { + + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ConnectorStatusInfo that = (ConnectorStatusInfo) o; + return connectorID.equals(that.connectorID) && operatorID.equals(that.operatorID); + } + + @Override + public int hashCode() { + + return Objects.hash(connectorID, operatorID); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/EtOrderMapping.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/EtOrderMapping.java new file mode 100644 index 00000000..034118b0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/EtOrderMapping.java @@ -0,0 +1,52 @@ +package com.xhpc.evcs.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; + +import javax.persistence.*; + +@Table(name = "et_order_mapping") +@Entity +public class EtOrderMapping extends BaseEntity { + + @Id + @Column(name = "id", nullable = false) + @GeneratedValue + private Long id; + + @Column(name = "xh_order_no", nullable = false, length = 50) + private String xhOrderNo; + + @Column(name = "evcs_order_no", nullable = false, length = 50) + private String evcsOrderNo; + + public String getEvcsOrderNo() { + + return evcsOrderNo; + } + + public void setEvcsOrderNo(String evcsOrderNo) { + + this.evcsOrderNo = evcsOrderNo; + } + + public String getXhOrderNo() { + + return xhOrderNo; + } + + public void setXhOrderNo(String xhOrderNo) { + + this.xhOrderNo = xhOrderNo; + } + + public Long getId() { + + return id; + } + + public void setId(Long id) { + + this.id = id; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/OperatorInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/OperatorInfo.java new file mode 100644 index 00000000..85da20d9 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/OperatorInfo.java @@ -0,0 +1,24 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Entity; +import javax.persistence.Table; + +@EqualsAndHashCode(callSuper = true) +@Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +@Entity +@Table(name = "ET_OPERATOR_INFO") +public class OperatorInfo extends CommonOperatorInfo { + + @JsonIgnore() + @JsonProperty("Key") + private String opKey; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/StationInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/StationInfo.java new file mode 100644 index 00000000..570dbe92 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/StationInfo.java @@ -0,0 +1,116 @@ +package com.xhpc.evcs.domain; + +import com.fasterxml.jackson.annotation.*; +import com.xhpc.evcs.dto.EquipmentInfo; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StationID", + "OperatorID", + "EquipmentOwnerID", + "StationName", + "CountryCode", + "AreaCode", + "Address", + "ServiceTel", + "StationType", + "StationStatus", + "ParkNums", + "StationLng", + "StationLat", + "Construction", + "BusineHours", + "ElectricityFee", + "ServiceFee", + "Payment", + "SupportOrder", + "EquipmentInfos" +}) +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +@Entity +@Table(name = "ET_STATION_INFO") +public class StationInfo extends CommonStationInfo { + + @Transient + @JsonProperty("AreaCode") + public String areaCode; + @Transient + @JsonProperty("Address") + public String address; + @Transient + @JsonProperty("ServiceTel") + public String serviceTel; + @Transient + @JsonProperty("StationType") + public Long stationType; + @Transient + @JsonProperty("StationStatus") + public Long stationStatus; + @Transient + @JsonProperty("ParkNums") + public Long parkNums; + @Transient + @JsonProperty("StationLng") + public Double stationLng; + @Transient + @JsonProperty("StationLat") + public Double stationLat; + @Transient + @JsonProperty("Construction") + public Long construction; + @Transient + @JsonProperty("BusineHours") + public String busineHours; + @Transient + @JsonProperty("ElectricityFee") + public String electricityFee; + @Transient + @JsonProperty("ServiceFee") + public String serviceFee; + @Transient + @JsonProperty("Payment") + public String payment; + @Transient + @JsonProperty("SupportOrder") + public Long supportOrder; + @Transient + @JsonProperty("EquipmentInfos") + public List equipmentInfos = null; + @Transient + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("stationID", getStationId()).append("operatorID", getOperatorId()).append( + "equipmentOwnerID", getEquipmentOwnerId()).append("stationName", getStationName()).append("countryCode", + getCountryCode()).append("areaCode", areaCode).append("address", address).append("serviceTel", serviceTel).append("stationType", stationType).append("stationStatus", stationStatus).append("parkNums", parkNums).append("stationLng", stationLng).append("stationLat", stationLat).append("construction", construction).append("busineHours", busineHours).append("electricityFee", electricityFee).append("serviceFee", serviceFee).append("payment", payment).append("supportOrder", supportOrder).append("equipmentInfos", equipmentInfos).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingPile.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingPile.java new file mode 100644 index 00000000..2876998a --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingPile.java @@ -0,0 +1,364 @@ +package com.xhpc.evcs.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; + +import javax.persistence.*; + +@Table(name = "xhpc_charging_pile") +@Entity +public class XhpcChargingPile extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "charging_pile_id", nullable = false) + private Long id; + + @Column(name = "charging_station_id") + private Long chargingStationId; + + @Column(name = "name", length = 30) + private String name; + + @Column(name = "national_standard", length = 50) + private String nationalStandard; + + @Column(name = "power") + private Double power; + + @Column(name = "auxiliary_power_supply") + private Double auxiliaryPowerSupply; + + @Column(name = "input_voltage") + private Double inputVoltage; + + @Column(name = "max_voltage") + private Double maxVoltage; + + @Column(name = "min_voltage") + private Double minVoltage; + + @Column(name = "max_electric_current") + private Double maxElectricCurrent; + + @Column(name = "min_electric_current") + private Double minElectricCurrent; + + @Column(name = "serial_number", length = 30) + private String serialNumber; + + @Column(name = "type") + private Integer type; + + @Column(name = "program_version", length = 20) + private String programVersion; + + @Column(name = "network_link_type", length = 20) + private String networkLinkType; + + @Column(name = "gun_number") + private Integer gunNumber; + + @Column(name = "communication_protocol_version", length = 20) + private String communicationProtocolVersion; + + @Column(name = "communication_operator", length = 20) + private String communicationOperator; + + @Column(name = "sim_card", length = 30) + private String simCard; + + @Column(name = "status") + private Integer status; + + @Column(name = "del_flag") + private Integer delFlag; + + @Column(name = "rate_model_id") + private Long rateModelId; + + @Column(name = "brand_model") + private String brandModel; + + @Column(name = "production_date", length = 10) + private String productionDate; + + @Column(name = "manufacture_name", length = 30) + private String manufactureName; + + @Column(name = "connector_type") + private Integer connectorType; + + @Column(name = "current") + private Integer current; + + public Integer getCurrent() { + + return current; + } + + public void setCurrent(Integer current) { + + this.current = current; + } + + public Integer getConnectorType() { + + return connectorType; + } + + public void setConnectorType(Integer connectorType) { + + this.connectorType = connectorType; + } + + public String getManufactureName() { + + return manufactureName; + } + + public void setManufactureName(String manufactureName) { + + this.manufactureName = manufactureName; + } + + public String getProductionDate() { + + return productionDate; + } + + public void setProductionDate(String productionDate) { + + this.productionDate = productionDate; + } + + public String getBrandModel() { + + return brandModel; + } + + public void setBrandModel(String brandModel) { + + this.brandModel = brandModel; + } + + public Long getRateModelId() { + + return rateModelId; + } + + public void setRateModelId(Long rateModelId) { + + this.rateModelId = rateModelId; + } + + public Integer getDelFlag() { + + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + + this.delFlag = delFlag; + } + + public Integer getStatus() { + + return status; + } + + public void setStatus(Integer status) { + + this.status = status; + } + + public String getSimCard() { + + return simCard; + } + + public void setSimCard(String simCard) { + + this.simCard = simCard; + } + + public String getCommunicationOperator() { + + return communicationOperator; + } + + public void setCommunicationOperator(String communicationOperator) { + + this.communicationOperator = communicationOperator; + } + + public String getCommunicationProtocolVersion() { + + return communicationProtocolVersion; + } + + public void setCommunicationProtocolVersion(String communicationProtocolVersion) { + + this.communicationProtocolVersion = communicationProtocolVersion; + } + + public Integer getGunNumber() { + + return gunNumber; + } + + public void setGunNumber(Integer gunNumber) { + + this.gunNumber = gunNumber; + } + + public String getNetworkLinkType() { + + return networkLinkType; + } + + public void setNetworkLinkType(String networkLinkType) { + + this.networkLinkType = networkLinkType; + } + + public String getProgramVersion() { + + return programVersion; + } + + public void setProgramVersion(String programVersion) { + + this.programVersion = programVersion; + } + + public Integer getType() { + + return type; + } + + public void setType(Integer type) { + + this.type = type; + } + + public String getSerialNumber() { + + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + + this.serialNumber = serialNumber; + } + + public Double getMinElectricCurrent() { + + return minElectricCurrent; + } + + public void setMinElectricCurrent(Double minElectricCurrent) { + + this.minElectricCurrent = minElectricCurrent; + } + + public Double getMaxElectricCurrent() { + + return maxElectricCurrent; + } + + public void setMaxElectricCurrent(Double maxElectricCurrent) { + + this.maxElectricCurrent = maxElectricCurrent; + } + + public Double getMinVoltage() { + + return minVoltage; + } + + public void setMinVoltage(Double minVoltage) { + + this.minVoltage = minVoltage; + } + + public Double getMaxVoltage() { + + return maxVoltage; + } + + public void setMaxVoltage(Double maxVoltage) { + + this.maxVoltage = maxVoltage; + } + + public Double getInputVoltage() { + + return inputVoltage; + } + + public void setInputVoltage(Double inputVoltage) { + + this.inputVoltage = inputVoltage; + } + + public Double getAuxiliaryPowerSupply() { + + return auxiliaryPowerSupply; + } + + public void setAuxiliaryPowerSupply(Double auxiliaryPowerSupply) { + + this.auxiliaryPowerSupply = auxiliaryPowerSupply; + } + + public Double getPower() { + + return power; + } + + public void setPower(Double power) { + + this.power = power; + } + + public String getNationalStandard() { + + return nationalStandard; + } + + public void setNationalStandard(String nationalStandard) { + + this.nationalStandard = nationalStandard; + } + + public String getName() { + + return name; + } + + public void setName(String name) { + + this.name = name; + } + + public Long getChargingStationId() { + + return chargingStationId; + } + + public void setChargingStationId(Long chargingStationId) { + + this.chargingStationId = chargingStationId; + } + + public Long getId() { + + return id; + } + + public void setId(Long id) { + + this.id = id; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingStation.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingStation.java new file mode 100644 index 00000000..722ed706 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/domain/XhpcChargingStation.java @@ -0,0 +1,316 @@ +package com.xhpc.evcs.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; + +import javax.persistence.*; + +@Table(name = "xhpc_charging_station") +@Entity +public class XhpcChargingStation extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "charging_station_id", nullable = false) + private Long id; + + @Column(name = "name", length = 30) + private String name; + + @Column(name = "operator_id") + private Long operatorId; + + @Column(name = "type") + private Integer type; + + @Lob + @Column(name = "construction_site") + private String constructionSite; + + @Lob + @Column(name = "service_facilities") + private String serviceFacilities; + + @Lob + @Column(name = "periphery_facilities") + private String peripheryFacilities; + + @Column(name = "area_code") + private Integer areaCode; + + @Column(name = "address", length = 50) + private String address; + + @Column(name = "detailed_address", length = 50) + private String detailedAddress; + + @Column(name = "longitude", length = 30) + private String longitude; + + @Column(name = "latitude", length = 30) + private String latitude; + + @Column(name = "parking_instructions") + private String parkingInstructions; + + @Column(name = "serial_number", length = 50) + private String serialNumber; + + @Column(name = "client_visible", length = 50) + private String clientVisible; + + @Column(name = "status") + private Integer status; + + @Column(name = "del_flag") + private Integer delFlag; + + @Column(name = "rate_model_id") + private Long rateModelId; + + @Column(name = "business_instructions") + private String businessInstructions; + + @Column(name = "reminder_instructions") + private String reminderInstructions; + + @Column(name = "img_id", length = 500) + private String imgId; + + @Lob + @Column(name = "station_type") + private String stationType; + + @Column(name = "operator_id_evcs", length = 20) + private String operatorIdEvcs; + + public String getOperatorIdEvcs() { + + return operatorIdEvcs; + } + + public void setOperatorIdEvcs(String operatorIdEvcs) { + + this.operatorIdEvcs = operatorIdEvcs; + } + + public String getStationType() { + + return stationType; + } + + public void setStationType(String stationType) { + + this.stationType = stationType; + } + + public String getImgId() { + + return imgId; + } + + public void setImgId(String imgId) { + + this.imgId = imgId; + } + + public String getReminderInstructions() { + + return reminderInstructions; + } + + public void setReminderInstructions(String reminderInstructions) { + + this.reminderInstructions = reminderInstructions; + } + + public String getBusinessInstructions() { + + return businessInstructions; + } + + public void setBusinessInstructions(String businessInstructions) { + + this.businessInstructions = businessInstructions; + } + + public Long getRateModelId() { + + return rateModelId; + } + + public void setRateModelId(Long rateModelId) { + + this.rateModelId = rateModelId; + } + + public Integer getDelFlag() { + + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + + this.delFlag = delFlag; + } + + public Integer getStatus() { + + return status; + } + + public void setStatus(Integer status) { + + this.status = status; + } + + public String getClientVisible() { + + return clientVisible; + } + + public void setClientVisible(String clientVisible) { + + this.clientVisible = clientVisible; + } + + public String getSerialNumber() { + + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + + this.serialNumber = serialNumber; + } + + public String getParkingInstructions() { + + return parkingInstructions; + } + + public void setParkingInstructions(String parkingInstructions) { + + this.parkingInstructions = parkingInstructions; + } + + public String getLatitude() { + + return latitude; + } + + public void setLatitude(String latitude) { + + this.latitude = latitude; + } + + public String getLongitude() { + + return longitude; + } + + public void setLongitude(String longitude) { + + this.longitude = longitude; + } + + public String getDetailedAddress() { + + return detailedAddress; + } + + public void setDetailedAddress(String detailedAddress) { + + this.detailedAddress = detailedAddress; + } + + public String getAddress() { + + return address; + } + + public void setAddress(String address) { + + this.address = address; + } + + public Integer getAreaCode() { + + return areaCode; + } + + public void setAreaCode(Integer areaCode) { + + this.areaCode = areaCode; + } + + public String getPeripheryFacilities() { + + return peripheryFacilities; + } + + public void setPeripheryFacilities(String peripheryFacilities) { + + this.peripheryFacilities = peripheryFacilities; + } + + public String getServiceFacilities() { + + return serviceFacilities; + } + + public void setServiceFacilities(String serviceFacilities) { + + this.serviceFacilities = serviceFacilities; + } + + public String getConstructionSite() { + + return constructionSite; + } + + public void setConstructionSite(String constructionSite) { + + this.constructionSite = constructionSite; + } + + public Integer getType() { + + return type; + } + + public void setType(Integer type) { + + this.type = type; + } + + public Long getOperatorId() { + + return operatorId; + } + + public void setOperatorId(Long operatorId) { + + this.operatorId = operatorId; + } + + public String getName() { + + return name; + } + + public void setName(String name) { + + this.name = name; + } + + public Long getId() { + + return id; + } + + public void setId(Long id) { + + this.id = id; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDConnectorStatusInfo4BonusRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDConnectorStatusInfo4BonusRequest.java new file mode 100644 index 00000000..80607fc9 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDConnectorStatusInfo4BonusRequest.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + + +@Setter +@Getter +@Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class CDConnectorStatusInfo4BonusRequest { + + @JsonProperty("ConnectorStatusInfo") + private ConnectorStatusInfo connectorStatusInfo; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipChargeStatusCDInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipChargeStatusCDInfo.java new file mode 100644 index 00000000..4d228bdd --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipChargeStatusCDInfo.java @@ -0,0 +1,77 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "StartChargeSeqStat", + "ConnectorID", + "ConnectorStatus", + "CurrentA", + "CurrentB", + "CurrentC", + "VoltageA", + "VoltageB", + "VoltageC", + "Soc", + "StartTime", + "EndTime", + "ChargeModel", + "TotalPower", + "ElecMoney", + "SeviceMoney", + "TotalMoney", + "SumPeriod", + "ChargeDetails" +}) +public class CDEquipChargeStatusCDInfo { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("StartChargeSeqStat") + private Integer startChargeSeqStat = 4; + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("ConnectorStatus") + private Integer connectorStatus = 1; + @JsonProperty("CurrentA") + private Double currentA = 15.0; + @JsonProperty("CurrentB") + private Double currentB = 15.0; + @JsonProperty("CurrentC") + private Double currentC = 15.0; + @JsonProperty("VoltageA") + private Double voltageA = 220.0; + @JsonProperty("VoltageB") + private Double voltageB = 220.0; + @JsonProperty("VoltageC") + private Double voltageC = 220.0; + @JsonProperty("Soc") + private Double soc = 0.0; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("ChargeModel") + private Integer chargeModel = 0; + @JsonProperty("TotalPower") + private Double totalPower = 0.0; + @JsonProperty("ElecMoney") + private Double elecMoney = 0.0; + @JsonProperty("SeviceMoney") + private Double seviceMoney = 0.0; + @JsonProperty("TotalMoney") + private Double totalMoney = 0.0; + @JsonProperty("SumPeriod") + private Integer sumPeriod = 0; + @JsonProperty("ChargeDetails") + private com.xhpc.evcs.dto.ChargeDetails[] chargeDetails; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipmentChargeStatusResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipmentChargeStatusResponse.java new file mode 100644 index 00000000..83e39167 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CDEquipmentChargeStatusResponse.java @@ -0,0 +1,42 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "SuccStat" +}) +public class CDEquipmentChargeStatusResponse { + + @JsonProperty("SuccStat") + private Integer succStat; + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + + public Integer getSuccStat() { + + return succStat; + } + + public void setSuccStat(Integer succStat) { + + this.succStat = succStat; + } + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeDetails.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeDetails.java new file mode 100644 index 00000000..44a8833a --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeDetails.java @@ -0,0 +1,51 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.xhpc.evcs.domain.XhpcStatisticsTimeInterval; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ChargeDetails { + + @JsonProperty("DetailStartTime") + private String detailStartTime; + + @JsonProperty("DetailEndTime") + private String detailEndTime; + + @JsonProperty("ElecPrice") + private Double elecPrice = 0.0; + + @JsonProperty("SevicePrice") + private Double sevicePrice = 0.0; + + @JsonProperty("DetailPower") + private Double detailPower = 0.0; + + @JsonProperty("DetailElecMoney") + private Double detailElecMoney = 0.0; + + @JsonProperty("DetailSeviceMoney") + private Double detailSeviceMoney = 0.0; + + public ChargeDetails(XhpcStatisticsTimeInterval statistics) { + + this.detailElecMoney = statistics.getPowerPrice().doubleValue(); + this.detailSeviceMoney = statistics.getServicePrice().doubleValue(); + this.elecPrice = statistics.getElecPriceEvcs().doubleValue(); + this.sevicePrice = statistics.getServicePriceEvcs().doubleValue(); + this.detailPower = statistics.getChargingDegree().doubleValue(); + this.detailStartTime = statistics.getStartTimeEvcs(); + this.detailEndTime = statistics.getEndTimeEvcs(); + } + + public ChargeDetails() { + + super(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoByBillerOperatorIdRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoByBillerOperatorIdRequest.java new file mode 100644 index 00000000..d1b2cafa --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoByBillerOperatorIdRequest.java @@ -0,0 +1,22 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class ChargeInfoByBillerOperatorIdRequest { + + @JsonProperty("BillerOperatorId") + String billerOperatorId; + + //当该属性 为 0 时表示查询所有订单信息 当该属性为 1 时表示根据billerOperatorId查询(四九订单) + //当该属性为 2 时表示查询四九订单信息 这时数据库字段billerOperatorId值为null + @JsonProperty("QueryType") + Integer queryType = 0; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoRequest.java new file mode 100644 index 00000000..248e29b3 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeInfoRequest.java @@ -0,0 +1,17 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class ChargeInfoRequest { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrder.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrder.java new file mode 100644 index 00000000..f2709216 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrder.java @@ -0,0 +1,83 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "TotalPower", + "TotalMoney", + "StartChargeSeq" +}) +public class ChargeOrder { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("TotalPower") + private Integer totalPower; + @JsonProperty("TotalMoney") + private Integer totalMoney; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonProperty("TotalPower") + public Integer getTotalPower() { + + return totalPower; + } + + @JsonProperty("TotalPower") + public void setTotalPower(Integer totalPower) { + + this.totalPower = totalPower; + } + + @JsonProperty("TotalMoney") + public Integer getTotalMoney() { + + return totalMoney; + } + + @JsonProperty("TotalMoney") + public void setTotalMoney(Integer totalMoney) { + + this.totalMoney = totalMoney; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("totalPower", totalPower).append( + "totalMoney", totalMoney).append("startChargeSeq", startChargeSeq).append("additionalProperties", + additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java new file mode 100644 index 00000000..e08acc21 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java @@ -0,0 +1,81 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "ConnectorID", + "ConfirmResult" +}) +public class ChargeOrderInfoResponse { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("ConfirmResult") + private Integer confirmResult; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonProperty("ConnectorID") + public String getConnectorID() { + + return connectorID; + } + + @JsonProperty("ConnectorID") + public void setConnectorID(String connectorID) { + + this.connectorID = connectorID; + } + + @JsonProperty("ConfirmResult") + public Integer getConfirmResult() { + + return confirmResult; + } + + @JsonProperty("ConfirmResult") + public void setConfirmResult(Integer confirmResult) { + + this.confirmResult = confirmResult; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("connectorID", connectorID).append( + "confirmResult", confirmResult).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeRequest.java new file mode 100644 index 00000000..1d449d0f --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeRequest.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class ChargeRequest { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + @JsonProperty("ConnectorID") + String connectorId; + @JsonProperty("QRCode") + String QRCode; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResponse.java new file mode 100644 index 00000000..aca284e7 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResponse.java @@ -0,0 +1,122 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "SuccStat", + "FailReason", + "ConnectorID", + "StartChargeSeqStat", + "StartChargeSeq" +}) +public class ChargeResponse { + + @JsonProperty("SuccStat") + private Integer succStat; + + //0 无; + //1 此设备不存在 + //2 此设备离线: + //其它 自定义 + @JsonProperty("FailReason") + private Integer failReason; + @JsonProperty("ConnectorID") + private String connectorID; + + //1 启动中 + //2 充电中 + //3 停止中 + //4 已结束 + //其它值 未知 + @JsonProperty("StartChargeSeqStat") + private Integer startChargeSeqStat; + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("SuccStat") + public Integer getSuccStat() { + + return succStat; + } + + @JsonProperty("SuccStat") + public void setSuccStat(Integer succStat) { + + this.succStat = succStat; + } + + @JsonProperty("FailReason") + public Integer getFailReason() { + + return failReason; + } + + @JsonProperty("FailReason") + public void setFailReason(Integer failReason) { + + this.failReason = failReason; + } + + @JsonProperty("ConnectorID") + public String getConnectorID() { + + return connectorID; + } + + @JsonProperty("ConnectorID") + public void setConnectorID(String connectorID) { + + this.connectorID = connectorID; + } + + @JsonProperty("StartChargeSeqStat") + public Integer getStartChargeSeqStat() { + + return startChargeSeqStat; + } + + @JsonProperty("StartChargeSeqStat") + public void setStartChargeSeqStat(Integer startChargeSeqStat) { + + this.startChargeSeqStat = startChargeSeqStat; + } + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("succStat", succStat).append("failReason", failReason).append("connectorID", + connectorID).append("startChargeSeqStat", startChargeSeqStat).append("startChargeSeq", startChargeSeq).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultRequest.java new file mode 100644 index 00000000..752b8483 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultRequest.java @@ -0,0 +1,25 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; + +@lombok.Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +/** + * 推送停止充电请求数据dto类 + */ +public class ChargeResultRequest { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + @JsonProperty("StartChargeSeqStat") + String startChargeSeqStat; + @JsonProperty("ConnectorID") + String connectorID; + @JsonProperty("SuccStat") + Integer succStat; + @JsonProperty("FailReason") + Integer failReason; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultResponse.java new file mode 100644 index 00000000..56aea212 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeResultResponse.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; + +@lombok.Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +/** + * 推送停止充电结果返回数据dto类 + */ +public class ChargeResultResponse { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + @JsonProperty("SuccStat") + Integer succStat; + @JsonProperty("FailReason") + Integer failReason; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeStatusRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeStatusRequest.java new file mode 100644 index 00000000..be143e11 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeStatusRequest.java @@ -0,0 +1,17 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class ChargeStatusRequest { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderRequestData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderRequestData.java new file mode 100644 index 00000000..8ddf0688 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderRequestData.java @@ -0,0 +1,144 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "CheckOrderSeq", + "StartTime", + "EndTime", + "OrderCount", + "TotalOrderPower", + "TotalOrderMoney", + "ChargeOrders" +}) +public class CheckChargeOrderRequestData { + + @JsonProperty("CheckOrderSeq") + private String checkOrderSeq; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("OrderCount") + private Integer orderCount; + @JsonProperty("TotalOrderPower") + private Integer totalOrderPower; + @JsonProperty("TotalOrderMoney") + private Integer totalOrderMoney; + @JsonProperty("ChargeOrders") + private List chargeOrders = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("CheckOrderSeq") + public String getCheckOrderSeq() { + + return checkOrderSeq; + } + + @JsonProperty("CheckOrderSeq") + public void setCheckOrderSeq(String checkOrderSeq) { + + this.checkOrderSeq = checkOrderSeq; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonProperty("OrderCount") + public Integer getOrderCount() { + + return orderCount; + } + + @JsonProperty("OrderCount") + public void setOrderCount(Integer orderCount) { + + this.orderCount = orderCount; + } + + @JsonProperty("TotalOrderPower") + public Integer getTotalOrderPower() { + + return totalOrderPower; + } + + @JsonProperty("TotalOrderPower") + public void setTotalOrderPower(Integer totalOrderPower) { + + this.totalOrderPower = totalOrderPower; + } + + @JsonProperty("TotalOrderMoney") + public Integer getTotalOrderMoney() { + + return totalOrderMoney; + } + + @JsonProperty("TotalOrderMoney") + public void setTotalOrderMoney(Integer totalOrderMoney) { + + this.totalOrderMoney = totalOrderMoney; + } + + @JsonProperty("ChargeOrders") + public List getChargeOrders() { + + return chargeOrders; + } + + @JsonProperty("ChargeOrders") + public void setChargeOrders(List chargeOrders) { + + this.chargeOrders = chargeOrders; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("checkOrderSeq", checkOrderSeq).append("startTime", startTime).append( + "endTime", endTime).append("orderCount", orderCount).append("totalOrderPower", totalOrderPower).append( + "totalOrderMoney", totalOrderMoney).append("chargeOrders", chargeOrders).append("additionalProperties" + , additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderResponseData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderResponseData.java new file mode 100644 index 00000000..04a198fc --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CheckChargeOrderResponseData.java @@ -0,0 +1,142 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "CheckOrderSeq", + "StartTime", + "EndTime", + "TotalDisputeOrder", + "TotalDisputePower", + "TotalDisputeMoney", + "DisputeOrders" +}) +public class CheckChargeOrderResponseData { + + @JsonProperty("CheckOrderSeq") + private String checkOrderSeq; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("TotalDisputeOrder") + private Integer totalDisputeOrder; + @JsonProperty("TotalDisputePower") + private Double totalDisputePower; + @JsonProperty("TotalDisputeMoney") + private Double totalDisputeMoney; + @JsonProperty("DisputeOrders") + private DisputeOrder[] disputeOrders = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("CheckOrderSeq") + public String getCheckOrderSeq() { + + return checkOrderSeq; + } + + @JsonProperty("CheckOrderSeq") + public void setCheckOrderSeq(String checkOrderSeq) { + + this.checkOrderSeq = checkOrderSeq; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonProperty("TotalDisputeOrder") + public Integer getTotalDisputeOrder() { + + return totalDisputeOrder; + } + + @JsonProperty("TotalDisputeOrder") + public void setTotalDisputeOrder(Integer totalDisputeOrder) { + + this.totalDisputeOrder = totalDisputeOrder; + } + + @JsonProperty("TotalDisputePower") + public Double getTotalDisputePower() { + + return totalDisputePower; + } + + @JsonProperty("TotalDisputePower") + public void setTotalDisputePower(Double totalDisputePower) { + + this.totalDisputePower = totalDisputePower; + } + + @JsonProperty("TotalDisputeMoney") + public Double getTotalDisputeMoney() { + + return totalDisputeMoney; + } + + @JsonProperty("TotalDisputeMoney") + public void setTotalDisputeMoney(Double totalDisputeMoney) { + + this.totalDisputeMoney = totalDisputeMoney; + } + + @JsonProperty("DisputeOrders") + public DisputeOrder[] getDisputeOrders() { + + return disputeOrders; + } + + @JsonProperty("DisputeOrders") + public void setDisputeOrders(DisputeOrder[] disputeOrders) { + + this.disputeOrders = disputeOrders; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("checkOrderSeq", checkOrderSeq).append("startTime", startTime).append( + "endTime", endTime).append("totalDisputeOrder", totalDisputeOrder).append("totalDisputePower", + totalDisputePower).append("totalDisputeMoney", totalDisputeMoney).append("disputeOrders", disputeOrders).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonRequest.java new file mode 100644 index 00000000..938743fb --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonRequest.java @@ -0,0 +1,60 @@ +package com.xhpc.evcs.dto; + + +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.Data; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class CommonRequest { + + @JsonProperty("OperatorID") + String operatorId; + @JsonProperty("Data") + String data; + @JsonProperty("TimeStamp") + String timeStamp; + @JsonProperty("Seq") + String seq; + @JsonProperty("Sig") + String sig; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + + public T anyDataType(Class clz, String key) throws IOException { + + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree(data); + jsonNode = jsonNode.path(key); + return JSONUtil.readParams(jsonNode.toString(), clz); + } + + public T anyDataType(Class clz) throws IOException { + + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree(data); + return JSONUtil.readParams(jsonNode.toString(), clz); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonResponse.java new file mode 100644 index 00000000..6f2cc899 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/CommonResponse.java @@ -0,0 +1,69 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRawValue; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.io.IOException; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class CommonResponse { + + public static final int SUCCESS = 0; + @Id + @GeneratedValue + @JsonIgnore() + @JsonProperty("Id") + Long id; + @JsonProperty("Ret") + String ret; + @JsonProperty("Data") + @JsonRawValue + Object data; + @JsonProperty("Msg") + String msg = ""; + @JsonProperty("Sig") + String sig; + + public Object anyDataTypeList(Class clz, String key) throws IOException { + + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree((String) data); + jsonNode = jsonNode.path(key); + return JSONUtil.readParamsList(jsonNode.toString(), clz); + } + + public Object anyDataTypeList(Class clz) throws IOException { + + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree((String) data); + return JSONUtil.readParamsList(jsonNode.toString(), clz); + } + + public Object anyDataType(Class clz, String key) throws IOException { + + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree((String) data); + jsonNode = jsonNode.path(key); + return JSONUtil.readParams(jsonNode.toString(), clz); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("Data", this.data).append("Msg", this.msg).append("Ret", this.ret).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorInfo.java new file mode 100644 index 00000000..bb63277a --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorInfo.java @@ -0,0 +1,63 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "NationalStandard", + "ConnectorID", + "ConnectorName", + "ConnectorType", + "VoltageUpperLimits", + "VoltageLowerLimits", + "Current", + "Power" +}) +@Setter +@Getter +public class ConnectorInfo { + + @JsonProperty("NationalStandard") + public Integer nationalStandard; + @JsonProperty("ConnectorID") + public String connectorID; + @JsonProperty("ConnectorName") + public String connectorName; + @JsonProperty("ConnectorType") + public Integer connectorType; + @JsonProperty("VoltageUpperLimits") + public Integer voltageUpperLimits; + @JsonProperty("VoltageLowerLimits") + public Integer voltageLowerLimits; + @JsonProperty("Current") + public Integer current; + @JsonProperty("Power") + public Double power; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("nationalStandard", nationalStandard).append("connectorID", connectorID).append("connectorName", connectorName).append("connectorType", connectorType).append("voltageUpperLimits", voltageUpperLimits).append("voltageLowerLimits", voltageLowerLimits).append("current", current).append("power", power).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorStatsInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorStatsInfo.java new file mode 100644 index 00000000..566704a0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ConnectorStatsInfo.java @@ -0,0 +1,58 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "ConnectorID", + "ConnectorElectricity" +}) +public class ConnectorStatsInfo { + + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("ConnectorElectricity") + private Double connectorElectricity; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("ConnectorID") + public String getConnectorID() { + + return connectorID; + } + + @JsonProperty("ConnectorID") + public void setConnectorID(String connectorID) { + + this.connectorID = connectorID; + } + + @JsonProperty("ConnectorElectricity") + public Double getConnectorElectricity() { + + return connectorElectricity; + } + + @JsonProperty("ConnectorElectricity") + public void setConnectorElectricity(Double connectorElectricity) { + + this.connectorElectricity = connectorElectricity; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DTOJsonHelper.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DTOJsonHelper.java new file mode 100644 index 00000000..075c4037 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DTOJsonHelper.java @@ -0,0 +1,104 @@ +package com.xhpc.evcs.dto; + +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.encryption.Aes128Cbc; +import com.xhpc.evcs.http.ServerInternalException; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +@Slf4j +public class DTOJsonHelper { + + public static T parseResponseData(String responseBody, Class clz, String jsonListKey) { + + if (responseBody != null) { + try { + CommonResponse commonResponse = JSONUtil.readParams(responseBody, CommonResponse.class); + return (T) commonResponse.anyDataType(clz, jsonListKey); + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + } + return null; + } + + public static T parseResponseData(String responseBody, Class clz, AuthSecretToken authSecretToken) { + + if (responseBody != null) { + try { + CommonResponse commonResponse = JSONUtil.readParams(responseBody, CommonResponse.class); + String data = (String) commonResponse.getData(); + if (authSecretToken != null) { + data = Aes128Cbc.decryptString(data, authSecretToken.getDataSecret(), authSecretToken.getDataSecretIV()); + } + if (!data.isEmpty()) { + return JSONUtil.readParams(data, clz); + } else { + log.error(commonResponse.getMsg()); + return null; + } + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + } + return null; + } + + public static T parseResponseData(String responseBody, Class clz) { + + if (responseBody != null) { + try { + CommonResponse commonResponse = JSONUtil.readParams(responseBody, CommonResponse.class); + String data = (String) commonResponse.getData(); + if (!data.isEmpty()) { + return JSONUtil.readParams(data, clz); + } else { + log.error(commonResponse.getMsg()); + return null; + } + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + } + return null; + } + + public static List parseResponseDataAsList(String responseBody, Class clz, String jsonListKey) { + + if (responseBody != null) { + try { + CommonResponse commonResponse = JSONUtil.readParams(responseBody, CommonResponse.class); + return (List) commonResponse.anyDataTypeList(clz, jsonListKey); + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + } + return null; + } + + public static List parseResponseDataAsList(String responseBody, Class clz) { + + if (responseBody != null) { + try { + CommonResponse commonResponse = JSONUtil.readParams(responseBody, CommonResponse.class); + return (List) commonResponse.anyDataTypeList(clz); + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + } + return null; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DisputeOrder.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DisputeOrder.java new file mode 100644 index 00000000..ab409272 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/DisputeOrder.java @@ -0,0 +1,97 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "TotalPower ", + "TotalMoney", + "DisputeReason" +}) +public class DisputeOrder { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("TotalPower ") + private Double totalPower; + @JsonProperty("TotalMoney") + private Double totalMoney; + @JsonProperty("DisputeReason") + private Integer disputeReason; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonProperty("TotalPower") + public Double getTotalPower() { + + return totalPower; + } + + @JsonProperty("TotalPower") + public void setTotalPower(Double totalPower) { + + this.totalPower = totalPower; + } + + @JsonProperty("TotalMoney") + public Double getTotalMoney() { + + return totalMoney; + } + + @JsonProperty("TotalMoney") + public void setTotalMoney(Double totalMoney) { + + this.totalMoney = totalMoney; + } + + @JsonProperty("DisputeReason") + public Integer getDisputeReason() { + + return disputeReason; + } + + @JsonProperty("DisputeReason") + public void setDisputeReason(Integer disputeReason) { + + this.disputeReason = disputeReason; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("totalPower", totalPower).append( + "totalMoney", totalMoney).append("disputeReason", disputeReason).append("additionalProperties", + additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipAuthRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipAuthRequest.java new file mode 100644 index 00000000..c9756eb0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipAuthRequest.java @@ -0,0 +1,19 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class EquipAuthRequest { + + @JsonProperty("EquipAuthSeq") + String equipAuthSeq; + @JsonProperty("ConnectorID") + String connectorId; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipBizRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipBizRequest.java new file mode 100644 index 00000000..9a458817 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipBizRequest.java @@ -0,0 +1,19 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class EquipBizRequest { + + @JsonProperty("EquipBizSeq") + String equipBizSeq; + @JsonProperty("ConnectorID") + String connectorId; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipChargeStatusResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipChargeStatusResponse.java new file mode 100644 index 00000000..e5dfe1fe --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipChargeStatusResponse.java @@ -0,0 +1,261 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeqStat", + "ConnectorStatus", + "CurrentA", + "CurrentB", + "CurrentC", + "VoltageA", + "VoltageB", + "VoltageC", + "Soc", + "TotalPower", + "ElecMoney", + "SeviceMoney", + "TotalMoney", + "SumPeriod", + "StartTime" +}) +public class EquipChargeStatusResponse { + + @JsonProperty("StartChargeSeqStat") + private Integer startChargeSeqStat; + @JsonProperty("ConnectorStatus") + private Integer connectorStatus; + @JsonProperty("CurrentA") + private Double currentA; + @JsonProperty("CurrentB") + private Double currentB; + @JsonProperty("CurrentC") + private Double currentC; + @JsonProperty("VoltageA") + private Double voltageA; + @JsonProperty("VoltageB") + private Double voltageB; + @JsonProperty("VoltageC") + private Double voltageC; + @JsonProperty("Soc") + private Double soc; + @JsonProperty("TotalPower") + private Double totalPower; + @JsonProperty("ElecMoney") + private Double elecMoney; + @JsonProperty("SeviceMoney") + private Double seviceMoney; + @JsonProperty("TotalMoney") + private Double totalMoney; + @JsonProperty("SumPeriod") + private Integer sumPeriod; + @JsonProperty("StartTime") + private String startTime; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("StartChargeSeqStat") + public Integer getStartChargeSeqStat() { + + return startChargeSeqStat; + } + + @JsonProperty("StartChargeSeqStat") + public void setStartChargeSeqStat(Integer startChargeSeqStat) { + + this.startChargeSeqStat = startChargeSeqStat; + } + + @JsonProperty("ConnectorStatus") + public Integer getConnectorStatus() { + + return connectorStatus; + } + + @JsonProperty("ConnectorStatus") + public void setConnectorStatus(Integer connectorStatus) { + + this.connectorStatus = connectorStatus; + } + + @JsonProperty("CurrentA") + public Double getCurrentA() { + + return currentA; + } + + @JsonProperty("CurrentA") + public void setCurrentA(Double currentA) { + + this.currentA = currentA; + } + + @JsonProperty("CurrentB") + public Double getCurrentB() { + + return currentB; + } + + @JsonProperty("CurrentB") + public void setCurrentB(Double currentB) { + + this.currentB = currentB; + } + + @JsonProperty("CurrentC") + public Double getCurrentC() { + + return currentC; + } + + @JsonProperty("CurrentC") + public void setCurrentC(Double currentC) { + + this.currentC = currentC; + } + + @JsonProperty("VoltageA") + public Double getVoltageA() { + + return voltageA; + } + + @JsonProperty("VoltageA") + public void setVoltageA(Double voltageA) { + + this.voltageA = voltageA; + } + + @JsonProperty("VoltageB") + public Double getVoltageB() { + + return voltageB; + } + + @JsonProperty("VoltageB") + public void setVoltageB(Double voltageB) { + + this.voltageB = voltageB; + } + + @JsonProperty("VoltageC") + public Double getVoltageC() { + + return voltageC; + } + + @JsonProperty("VoltageC") + public void setVoltageC(Double voltageC) { + + this.voltageC = voltageC; + } + + @JsonProperty("Soc") + public Double getSoc() { + + return soc; + } + + @JsonProperty("Soc") + public void setSoc(Double soc) { + + this.soc = soc; + } + + @JsonProperty("TotalPower") + public Double getTotalPower() { + + return totalPower; + } + + @JsonProperty("TotalPower") + public void setTotalPower(Double totalPower) { + + this.totalPower = totalPower; + } + + @JsonProperty("ElecMoney") + public Double getElecMoney() { + + return elecMoney; + } + + @JsonProperty("ElecMoney") + public void setElecMoney(Double elecMoney) { + + this.elecMoney = elecMoney; + } + + @JsonProperty("SeviceMoney") + public Double getSeviceMoney() { + + return seviceMoney; + } + + @JsonProperty("SeviceMoney") + public void setSeviceMoney(Double seviceMoney) { + + this.seviceMoney = seviceMoney; + } + + @JsonProperty("TotalMoney") + public Double getTotalMoney() { + + return totalMoney; + } + + @JsonProperty("TotalMoney") + public void setTotalMoney(Double totalMoney) { + + this.totalMoney = totalMoney; + } + + @JsonProperty("SumPeriod") + public Integer getSumPeriod() { + + return sumPeriod; + } + + @JsonProperty("SumPeriod") + public void setSumPeriod(Integer sumPeriod) { + + this.sumPeriod = sumPeriod; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeqStat", startChargeSeqStat).append("connectorStatus", + connectorStatus).append("currentA", currentA).append("currentB", currentB).append("currentC", currentC).append("voltageA", voltageA).append("voltageB", voltageB).append("voltageC", voltageC).append("soc", soc).append("totalPower", totalPower).append("elecMoney", elecMoney).append("seviceMoney", seviceMoney).append("totalMoney", totalMoney).append("sumPeriod", sumPeriod).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentInfo.java new file mode 100644 index 00000000..af7c88d0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentInfo.java @@ -0,0 +1,64 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "EquipmentID", + "ManufacturerID", + "EquipmentType", + "Power", + "ConnectorInfos", + "EquipmentLng", + "EquipmentLat" +}) +@Getter +@Setter +public class EquipmentInfo { + + @JsonProperty("EquipmentID") + public String equipmentID; + @JsonProperty("ManufacturerID") + public String manufacturerID; + @JsonProperty("EquipmentType") + public Integer equipmentType; + @JsonProperty("Power") + public Double power; + @JsonProperty("ConnectorInfos") + public List connectorInfos = null; + @JsonProperty("EquipmentLng") + public Double equipmentLng; + @JsonProperty("EquipmentLat") + public Double equipmentLat; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("equipmentID", equipmentID).append("manufacturerID", manufacturerID).append( + "equipmentType", equipmentType).append("power", power).append("connectorInfos", connectorInfos).append( + "equipmentLng", equipmentLng).append("equipmentLat", equipmentLat).append("additionalProperties", + additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentStatsInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentStatsInfo.java new file mode 100644 index 00000000..0cb66d06 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EquipmentStatsInfo.java @@ -0,0 +1,74 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "EquipmentID", + "EquipmentElectricity", + "ConnectorStatsInfos" +}) +public class EquipmentStatsInfo { + + @JsonProperty("EquipmentID") + private String equipmentID; + @JsonProperty("EquipmentElectricity") + private Double equipmentElectricity; + @JsonProperty("ConnectorStatsInfos") + private List connectorStatsInfos = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("EquipmentID") + public String getEquipmentID() { + + return equipmentID; + } + + @JsonProperty("EquipmentID") + public void setEquipmentID(String equipmentID) { + + this.equipmentID = equipmentID; + } + + @JsonProperty("EquipmentElectricity") + public Double getEquipmentElectricity() { + + return equipmentElectricity; + } + + @JsonProperty("EquipmentElectricity") + public void setEquipmentElectricity(Double equipmentElectricity) { + + this.equipmentElectricity = equipmentElectricity; + } + + @JsonProperty("ConnectorStatsInfos") + public List getConnectorStatsInfos() { + + return connectorStatsInfos; + } + + @JsonProperty("ConnectorStatsInfos") + public void setConnectorStatsInfos(List connectorStatsInfos) { + + this.connectorStatsInfos = connectorStatsInfos; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosPagingRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosPagingRequest.java new file mode 100644 index 00000000..14a4a0ae --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosPagingRequest.java @@ -0,0 +1,32 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class EvShareQueryChargeInfosPagingRequest { + + @JsonProperty("BillerOperatorId") + String billerOperatorId; + + //当该属性 为 0 时表示查询所有订单信息 当该属性为 1 时表示根据billerOperatorId查询(四九订单) + //当该属性为 2 时表示查询四九订单信息 这时数据库字段billerOperatorId值为null + @JsonProperty("QueryType") + Integer queryType = 0; + + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + + @JsonProperty("Page") + private Integer page; + @JsonProperty("PageSize") + private Integer pageSize; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosRequest.java new file mode 100644 index 00000000..8dc25010 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/EvShareQueryChargeInfosRequest.java @@ -0,0 +1,27 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class EvShareQueryChargeInfosRequest { + + @JsonProperty("BillerOperatorId") + String billerOperatorId; + + //当该属性 为 0 时表示查询所有订单信息 当该属性为 1 时表示根据billerOperatorId查询(四九订单) + //当该属性为 2 时表示查询四九订单信息 这时数据库字段billerOperatorId值为null + @JsonProperty("QueryType") + Integer queryType = 0; + + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationEquipChargeStatusData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationEquipChargeStatusData.java new file mode 100644 index 00000000..fba730e3 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationEquipChargeStatusData.java @@ -0,0 +1,20 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class NotificationEquipChargeStatusData { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + + @JsonProperty("SuccStat") + Integer succStat; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartChargeResultRequestData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartChargeResultRequestData.java new file mode 100644 index 00000000..81d5499e --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartChargeResultRequestData.java @@ -0,0 +1,97 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang3.builder.ToStringBuilder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "StartChargeSeqStat", + "ConnectorID", + "StartTime", + "IdentCode" +}) +public class NotificationStartChargeResultRequestData { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("StartChargeSeqStat") + private Integer startChargeSeqStat; + @JsonProperty("ConnectorID") + private String connectorId; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("IdentCode") + private String identCode; + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public Integer getStartChargeSeqStat() { + + return startChargeSeqStat; + } + + @JsonProperty("EndTime") + public void setStartChargeSeqStat(Integer startChargeSeqStat) { + + this.startChargeSeqStat = startChargeSeqStat; + } + + @JsonProperty("ConnectorID") + public String getConnectorId() { + + return connectorId; + } + + @JsonProperty("ConnectorID") + public void setConnectorId(String connectorId) { + + this.connectorId = connectorId; + } + + @JsonProperty("IdentCode") + public String getIdentCode() { + + return identCode; + } + + @JsonProperty("IdentCode") + public void setIdentCode(String identCode) { + + this.identCode = identCode; + } + + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("startTime", startTime).append( + "startChargeSeqStat", startChargeSeqStat).append("connectorId", connectorId).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartStopChargeResultResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartStopChargeResultResponse.java new file mode 100644 index 00000000..07ab3a2b --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStartStopChargeResultResponse.java @@ -0,0 +1,81 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "SuccStat", + "FailReason", + "StartChargeSeq" +}) +public class NotificationStartStopChargeResultResponse { + + @JsonProperty("SuccStat") + private Integer succStat; + @JsonProperty("FailReason") + private Integer failReason; + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("SuccStat") + public Integer getSuccStat() { + + return succStat; + } + + @JsonProperty("SuccStat") + public void setSuccStat(Integer succStat) { + + this.succStat = succStat; + } + + @JsonProperty("FailReason") + public Integer getFailReason() { + + return failReason; + } + + @JsonProperty("FailReason") + public void setFailReason(Integer failReason) { + + this.failReason = failReason; + } + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("succStat", succStat).append("failReason", failReason).append("startChargeSeq" + , startChargeSeq).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStopChargeResultRequestData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStopChargeResultRequestData.java new file mode 100644 index 00000000..79f067ec --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/NotificationStopChargeResultRequestData.java @@ -0,0 +1,113 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartChargeSeq", + "StartChargeSeqStat", + "ConnectorID", + "SuccStat", + "FailReason" +}) +public class NotificationStopChargeResultRequestData { + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonProperty("StartChargeSeqStat") + private Integer startChargeSeqStat; + @JsonProperty("ConnectorID") + private String connectorId; + @JsonProperty("SuccStat") + private Integer succStat; + @JsonProperty("FailReason") + private Integer failReason; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + @JsonProperty("SuccStat") + public Integer getSuccStat() { + + return succStat; + } + + @JsonProperty("SuccStat") + public void setSuccStat(Integer succStat) { + + this.succStat = succStat; + } + + @JsonProperty("StartChargeSeqStat") + public Integer getStartChargeSeqStat() { + + return startChargeSeqStat; + } + + @JsonProperty("StartChargeSeqStat") + public void setStartChargeSeqStat(Integer startChargeSeqStat) { + + this.startChargeSeqStat = startChargeSeqStat; + } + + @JsonProperty("ConnectorID") + public String getConnectorId() { + + return connectorId; + } + + @JsonProperty("ConnectorID") + public void setConnectorId(String connectorId) { + + this.connectorId = connectorId; + } + + @JsonProperty("FailReason") + public Integer getFailReason() { + + return failReason; + } + + @JsonProperty("FailReason") + public void setFailReason(Integer failReason) { + + this.failReason = failReason; + } + + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startChargeSeq", startChargeSeq).append("succStat", succStat).append( + "startChargeSeqStat", startChargeSeqStat).append("connectorId", connectorId).append("additionalProperties", + additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderInfoPageResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderInfoPageResponse.java new file mode 100644 index 00000000..3835eab8 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderInfoPageResponse.java @@ -0,0 +1,26 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class OrderInfoPageResponse { + + @JsonProperty("PageCount") + Integer PageCount; + @JsonProperty("ItemSize") + Integer ItemSize; + @JsonProperty(value = "PageNo", defaultValue = "1") //CAUTION: PageNo must not wrote as PageNon or anything else + Integer PageNo = 1; + @JsonProperty(value = "PageSize", defaultValue = "10") + Integer PageSize = 10; + + @JsonProperty("Data") + String data; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderSumInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderSumInfo.java new file mode 100644 index 00000000..ed6d9c2b --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OrderSumInfo.java @@ -0,0 +1,40 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class OrderSumInfo { + + @JsonProperty("AllElectric") + BigDecimal allElectric; + + @JsonProperty("AllElectricMoney") + BigDecimal allElectricMoney; + + @JsonProperty("AllServiceMoney") + BigDecimal allServiceMoney; + + @JsonProperty("AllMoney") + BigDecimal allMoney; + + public OrderSumInfo(BigDecimal allElectric, BigDecimal allElectricMoney, BigDecimal allServiceMoney, BigDecimal allMoney) { + + this.allElectric = allElectric; + this.allElectricMoney = allElectricMoney; + this.allServiceMoney = allServiceMoney; + this.allMoney = allMoney; + } + + public OrderSumInfo() { + + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageRequest.java new file mode 100644 index 00000000..6b9f3eec --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageRequest.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class PageRequest { + + @JsonProperty("LastQueryTime") + String lastQueryTime; + @JsonProperty(value = "PageNo", defaultValue = "1") //CAUTION: PageNo must not wrote as PageNon or anything else + Integer pageNo = 1; + @JsonProperty(value = "PageSize", defaultValue = "10") + Integer pageSize = 10; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageResponse.java new file mode 100644 index 00000000..10677b40 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageResponse.java @@ -0,0 +1,23 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class PageResponse { + + @JsonProperty("PageCount") + Integer PageCount; + @JsonProperty("ItemSize") + Integer ItemSize; + @JsonProperty(value = "PageNo", defaultValue = "1") //CAUTION: PageNo must not wrote as PageNon or anything else + Integer PageNo = 1; + @JsonProperty(value = "PageSize", defaultValue = "10") + Integer PageSize = 10; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageStationsInfoResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageStationsInfoResponse.java new file mode 100644 index 00000000..a01a042c --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PageStationsInfoResponse.java @@ -0,0 +1,27 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.xhpc.evcs.domain.StationInfo; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class PageStationsInfoResponse { + + @JsonProperty("PageCount") + Integer PageCount; + @JsonProperty("ItemSize") + Integer ItemSize; + @JsonProperty(value = "PageNo", defaultValue = "1") //CAUTION: PageNo must not wrote as PageNon or anything else + Integer PageNo = 1; + @JsonProperty("StationInfos") + List stationInfos = new ArrayList<>(); + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PoleStatusInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PoleStatusInfo.java new file mode 100644 index 00000000..4abb8351 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PoleStatusInfo.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class PoleStatusInfo { + + @JsonProperty("PoleNo") + private String poleNo; + //0正常 1故障 2占用 + @JsonProperty("Status") + private Integer status; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryOrderInfoRequestData.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryOrderInfoRequestData.java new file mode 100644 index 00000000..69a21eae --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryOrderInfoRequestData.java @@ -0,0 +1,66 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StartTime", + "EndTime" +}) +public class QueryOrderInfoRequestData { + + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("startTime", startTime).append("endTime", endTime).append( + "additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryTokenResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryTokenResponse.java new file mode 100644 index 00000000..db6d8a56 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryTokenResponse.java @@ -0,0 +1,25 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class QueryTokenResponse { + + @JsonProperty("OperatorID") + String operatorId; + @JsonProperty("SuccStat") + Integer succStat; + @JsonProperty("AccessToken") + String accessToken; + @JsonProperty("TokenAvailableTime") + Integer tokenAvailableTime; + @JsonProperty("FailReason") + Integer failReason; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsInfo.java new file mode 100644 index 00000000..3e83fae6 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsInfo.java @@ -0,0 +1,104 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StationID", + "StartTime", + "EndTime", + "StationElectricity", + "EquipmentStatsInfos" +}) +public class StationStatsInfo { + + @JsonProperty("StationID") + private String stationID; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("StationElectricity") + private Double stationElectricity; + @JsonProperty("EquipmentStatsInfos") + private List equipmentStatsInfos = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StationID") + public String getStationID() { + + return stationID; + } + + @JsonProperty("StationID") + public void setStationID(String stationID) { + + this.stationID = stationID; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonProperty("StationElectricity") + public Double getStationElectricity() { + + return stationElectricity; + } + + @JsonProperty("StationElectricity") + public void setStationElectricity(Double stationElectricity) { + + this.stationElectricity = stationElectricity; + } + + @JsonProperty("EquipmentStatsInfos") + public List getEquipmentStatsInfos() { + + return equipmentStatsInfos; + } + + @JsonProperty("EquipmentStatsInfos") + public void setEquipmentStatsInfos(List equipmentStatsInfos) { + + this.equipmentStatsInfos = equipmentStatsInfos; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsRequest.java new file mode 100644 index 00000000..8abb4246 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsRequest.java @@ -0,0 +1,37 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StationID", + "StartTime", + "EndTime" +}) +public class StationStatsRequest { + + @JsonProperty("StationID") + private Integer stationID; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("EndTime") + private String endTime; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsWrapper.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsWrapper.java new file mode 100644 index 00000000..8ac8e44c --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatsWrapper.java @@ -0,0 +1,43 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StationStatsInfo" +}) +public class StationStatsWrapper { + + @JsonProperty("StationStats") + private StationStatsInfo stationStatsInfo; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StationStats") + public StationStatsInfo getStationStatsInfo() { + + return stationStatsInfo; + } + + @JsonProperty("StationStats") + public void setStationStatsInfo(StationStatsInfo stationStatsInfo) { + + this.stationStatsInfo = stationStatsInfo; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfo.java new file mode 100644 index 00000000..622907e9 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfo.java @@ -0,0 +1,67 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "StationID", + "ConnectorStatusInfos" +}) +public class StationStatusInfo { + + @JsonProperty("StationID") + private String stationID; + @JsonProperty("ConnectorStatusInfos") + private List connectorStatusInfos = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("StationID") + public String getStationID() { + + return stationID; + } + + @JsonProperty("StationID") + public void setStationID(String stationID) { + + this.stationID = stationID; + } + + @JsonProperty("ConnectorStatusInfos") + public List getConnectorStatusInfos() { + + return connectorStatusInfos; + } + + @JsonProperty("ConnectorStatusInfos") + public void setConnectorStatusInfos(List connectorStatusInfos) { + + this.connectorStatusInfos = connectorStatusInfos; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("stationID", stationID).append("connectorStatusInfos", connectorStatusInfos).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfoWrapper.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfoWrapper.java new file mode 100644 index 00000000..fb8e3800 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusInfoWrapper.java @@ -0,0 +1,67 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "Total", + "StationStatusInfos" +}) +public class StationStatusInfoWrapper { + + @JsonProperty("Total") + private Integer total; + @JsonProperty("StationStatusInfos") + private List stationStatusInfos = null; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("Total") + public Integer getTotal() { + + return total; + } + + @JsonProperty("Total") + public void setTotal(Integer total) { + + this.total = total; + } + + @JsonProperty("StationStatusInfos") + public List getStationStatusInfos() { + + return stationStatusInfos; + } + + @JsonProperty("StationStatusInfos") + public void setStationStatusInfos(List stationStatusInfos) { + + this.stationStatusInfos = stationStatusInfos; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("total", total).append("stationStatusInfos", stationStatusInfos).append( + "additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusRequest.java new file mode 100644 index 00000000..fbc37f72 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StationStatusRequest.java @@ -0,0 +1,17 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class StationStatusRequest { + + @JsonProperty("StationIDs") + String[] stationIds; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/Status.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/Status.java new file mode 100644 index 00000000..57509c8e --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/Status.java @@ -0,0 +1,59 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "Status" +}) +public class Status { + + @JsonProperty("Status") + private Integer status; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + public Status() { + + } + + public Status(Integer status) { + + this.status = status; + } + + @JsonProperty("Status") + public Integer getStatus() { + + return status; + } + + @JsonProperty("Status") + public void setStatus(Integer status) { + + this.status = status; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("status", status).append("additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java new file mode 100644 index 00000000..07b5ae8c --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java @@ -0,0 +1,66 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.*; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.HashMap; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "OperatorID", + "OperatorSecret" +}) +public class TokenRequest { + + @JsonProperty("OperatorID") + private String operatorID; + @JsonProperty("OperatorSecret") + private String operatorSecret; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("OperatorID") + public String getOperatorId() { + + return operatorID; + } + + @JsonProperty("OperatorID") + public void setOperatorId(String operatorID) { + + this.operatorID = operatorID; + } + + @JsonProperty("OperatorSecret") + public String getOperatorSecret() { + + return operatorSecret; + } + + @JsonProperty("OperatorSecret") + public void setOperatorSecret(String operatorSecret) { + + this.operatorSecret = operatorSecret; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + @Override + public String toString() { + + return new ToStringBuilder(this).append("operatorID", operatorID).append("operatorSecret", operatorSecret).append( + "additionalProperties", additionalProperties).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenResponse.java new file mode 100644 index 00000000..2c07439b --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenResponse.java @@ -0,0 +1,41 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +@JsonPropertyOrder({ + "FailReason", + "OperatorID", + "SuccStat", + "AccessToken", + "TokenAvailableTime" +}) +public class TokenResponse { + + @JsonProperty("FailReason") + Integer failReason; + @JsonProperty("OperatorID") + String operatorId; + @JsonProperty("SuccStat") + Integer succStat; + @JsonProperty("AccessToken") + String accessToken; + @JsonProperty("TokenAvailableTime") + Integer tokenAvailableTime; + + @Override + public String toString() { + + return new ToStringBuilder(this).append("failReason", failReason).append("operatorID", operatorId).append("succStat", + succStat).append("accessToken", accessToken).append("tokenAvailableTime", tokenAvailableTime).toString(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java new file mode 100644 index 00000000..5212d00b --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java @@ -0,0 +1,89 @@ +package com.xhpc.evcs.encryption; + +import javax.crypto.*; +import javax.crypto.spec.SecretKeySpec; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.Base64; + +public class Aes128Cbc { + + private static int AES_128 = 128; + + public static String encrypt(String msg, String dataSecret, String dataSecretIV) throws NoSuchAlgorithmException, + IllegalBlockSizeException, InvalidKeyException, BadPaddingException, + InvalidAlgorithmParameterException, NoSuchPaddingException { + + KeyGenerator keyGenerator = KeyGenerator.getInstance(CryptoMngr.ALGORITHM); + keyGenerator.init(AES_128); + byte[] ds = (dataSecret).getBytes(StandardCharsets.UTF_8); + ds = Arrays.copyOf(ds, 16); + SecretKey key = new SecretKeySpec(ds, "AES"); + byte[] dsiv = (dataSecretIV).getBytes(StandardCharsets.UTF_8); + dsiv = Arrays.copyOf(dsiv, 16); + SecretKey IV = new SecretKeySpec(dsiv, "AES"); + byte[] cipherText = CryptoMngr.encrypt(key.getEncoded(), IV.getEncoded(), msg.getBytes()); + return Base64.getEncoder().encodeToString(cipherText); + } + + public static byte[] decryptBytes(String encryptedMsg, String dataSecret, String dataSecretIV) throws NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException { + + if (encryptedMsg.startsWith("{") || encryptedMsg.startsWith("[")) { + throw new IllegalArgumentException("不是合法的加密字符串"); + } + KeyGenerator keyGenerator = KeyGenerator.getInstance(CryptoMngr.ALGORITHM); + keyGenerator.init(AES_128); + byte[] ds = (dataSecret).getBytes(StandardCharsets.UTF_8); + ds = Arrays.copyOf(ds, 16); + SecretKey key = new SecretKeySpec(ds, "AES"); + byte[] dsiv = (dataSecretIV).getBytes(StandardCharsets.UTF_8); + dsiv = Arrays.copyOf(dsiv, 16); + SecretKey IV = new SecretKeySpec(dsiv, "AES"); + byte[] cipherText = Base64.getDecoder().decode(encryptedMsg.getBytes()); + byte[] decryptedBytes = CryptoMngr.decrypt(key.getEncoded(), IV.getEncoded(), cipherText); + return decryptedBytes; + } + + public static String decryptString(String encryptedMsg, String dataSecret, String dataSecretIV) throws NoSuchAlgorithmException, + IllegalBlockSizeException, InvalidKeyException, BadPaddingException, + InvalidAlgorithmParameterException, NoSuchPaddingException { + + if (encryptedMsg == null || encryptedMsg.length() == 0) return ""; + byte[] decryptedBytes = decryptBytes(encryptedMsg, dataSecret, dataSecretIV); + return new String(decryptedBytes); + } + + public static void main(String[] args) throws BadPaddingException, InvalidAlgorithmParameterException, + NoSuchAlgorithmException, IllegalBlockSizeException, UnsupportedEncodingException, NoSuchPaddingException, + InvalidKeyException { + + System.out.println(encrypt("{\"PageNo\": \"1\", \"PageSize\": 49}", "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6")); + System.out.println(decryptString("ywyEEd5aKPJOTraAY/gXB/bA+UNprpYnSaOhfF5lKc/Zcv" + + "/BRasig4KSPJD7UmrH2vjLVIWXPw42EbLgV9bXr5SzUSVAT28ief2nk6hpWnT8Dcvhn3W4bj7UdEY" + + "/AdONVXWuq2MZQocGYEVNvWcSD0OVCJ04fNTwPR4hs1xI/QDg9/hqYdQbvWt3go/y" + + "+M9wxd4vq8m44RPQ5zjW3vxFxc4oMg2t0oTdk6W5AzJzAGWhU/4xIv+8gLeh6/blpW/VBUK82+4tcdG2JSJv/DcaDM0" + + "/7C1LsCYY17o6gGd1mFVDSZhYcaOmOska+h+eyTKL4i8oHpT6uf+hFDRVBUC1OTjDeiL9NyIxcwd" + + "/MMfAaF04wHOHrYMavL5wcBUZWwtU1QSLWXkUy7muJNYvVg4dmw92nNKaJtxgFycXVGkSP3Nc6y" + + "/sAzYkTz9Wfn4RLVOkpyYJMOo1Tz93/OFEKQFPnjzSRQAVYiuPzuySKjXdcDY8AfqmDqYuVZ2FhH0iVU6FiSsK4" + + "+al0hnLOcnftqYtYSd7ir2coP6XtNejOByqFPrShMp4rPQLvDpFibV87clFMwWOGBiB0eFRvRbOSntDYN7PBpFHHJXRkNi3VCMiJ" + + "+Y=", + "8LpncubmWiPCzY3V" + , "av6A8QdnRaVRMXu6")); + System.out.println(decryptString("ywyEEd5aKPJOTraAY" + + "/gXB5Sz0CiZyWlVKyOoQDHvSZBdtC1aYGzpgAmLAQ7P2f0ArSSVx6xoF8sz2JyXKD00XiHuA4oc1hJnT1mRRetryz8bxmj6m" + + "/ClMebuBmtotiKxJqIZr5tayh/hizhcX2L8UUUDmKfp4Q1de1P/swB2VPC8suvrw2Y04r2I2MtF+7mHj1DdDn" + + "/DIStLJMLV9tx7xTu2K5fWS1E2ZUv33dVKRcA9qQGFmrI1IFLZyhIFcomv78nzXDg9U6/HRK3/JvtWxm9b6eDO" + + "/a5rUwpe1gKPFsVK/MvAXAxU8dmyIzxzC3fLQB1KFcG8XUWrejpakVwh5tKxKhmofWFXlja7FSC" + + "/vVdHjL5pOiBAOoxtmBDVPVrua2+/Nz5q9neXdA3olEamKYVCtFSWgSptFjhQb8pGAzSTxwuA+e4fJ5RqeAc+Ka0aHycpvtG" + + "/oZZN8+9xhWcnGWj0R8/xsXzFdXOnJ6/DI9SgKOUAzb/AGfHPeJJMibEru+nKrjuo3cNfyue6n6V2hu0Juxr" + + "/iLg2zRLVB54wL4Lvy3pi+9ULHzI7SBgKyF6bxxoeuS4YfmaVK+fhseqWNtxk" + + "/d8XJu93CqDUoxH5c1IEw16gQ1h9DMhVug2Cg8JbSkIGeFHhCvicOxIuUS2Uc2YgoUTbY0podXkJToBKByGJq7BjNdk49uhFlnHNMO4UZ5LzinsJZxxxdWtUIpqUvTf8a1x210u/IT3BYHQj+K+NeDfbzb2ga6Qdj3+CLL21", + "8LpncubmWiPCzY3V" + , "av6A8QdnRaVRMXu6")); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/CryptoMngr.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/CryptoMngr.java new file mode 100644 index 00000000..08d9eef5 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/CryptoMngr.java @@ -0,0 +1,41 @@ +package com.xhpc.evcs.encryption; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +public class CryptoMngr { + + public static String ALGORITHM = "AES"; + private static String AES_CBS_PADDING = "AES/CBC/PKCS5Padding"; + + public static byte[] encrypt(final byte[] key, final byte[] IV, final byte[] message) throws NoSuchPaddingException, + InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, + InvalidAlgorithmParameterException { + + return CryptoMngr.encryptDecrypt(Cipher.ENCRYPT_MODE, key, IV, message); + } + + public static byte[] decrypt(final byte[] key, final byte[] IV, final byte[] message) throws NoSuchPaddingException, + InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, + InvalidAlgorithmParameterException { + + return CryptoMngr.encryptDecrypt(Cipher.DECRYPT_MODE, key, IV, message); + } + + private static byte[] encryptDecrypt(final int mode, final byte[] key, final byte[] IV, final byte[] message) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + + final Cipher cipher = Cipher.getInstance(AES_CBS_PADDING); + final SecretKeySpec keySpec = new SecretKeySpec(key, ALGORITHM); + final IvParameterSpec ivSpec = new IvParameterSpec(IV); + cipher.init(mode, keySpec, ivSpec); + return cipher.doFinal(message); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/EvcsConst.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/EvcsConst.java new file mode 100644 index 00000000..aef7ddc0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/EvcsConst.java @@ -0,0 +1,8 @@ +package com.xhpc.evcs.encryption; + +public class EvcsConst { + + public static final String RET_SUCC = "0";//请求成功 + public static final String RET_FAIl = "1";//请求成功 + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/HMAC.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/HMAC.java new file mode 100644 index 00000000..808920ae --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/HMAC.java @@ -0,0 +1,57 @@ +package com.xhpc.evcs.encryption; + +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Slf4j +public class HMAC { + + public static void main(String[] args) throws Exception { + + System.out.println(hmacDigest("7pogCkwDx5hTmTIimBzlVfl9Qg7RJql+/wqhg2ZvjH2h+ZIGE5wePtN" + + "+8TIWseHCPwFZIuw02rY3cV8Q9vgbZMCIdH0CD8SOEdFG7N/2+nfF5liwqUwfM/qKICuiKUQJ9coaOt0lAP85jnQqBITCUDywEau1pO" + + "/viFHACpx2OnzyVolyrHc8KjrHSe3VdrHh6lsvDaCamzb79dN96WHTSxuXSuFmDNbJqUvPE0pUicRyc7YYj77OjAaxqeqEO9Sq2Nkf5cG6vfl+UZyKXM5r0YdLrDq8VBLfZn88tJf7D7HQtbtff3XDSrjrK5FSGAp56mlYkQ60+Ia2X0CvJeKa9XyJ14GM/9qaOslOC64F2p4=", "wAeYIVQUwd0iGZsV", "HmacMD5"/*"HmacSHA1"*/)); + } + + public static String hmacDigest(String operatorID, String data, String timestamp, String seq, String keyString) { + + return hmacDigest(operatorID + data + timestamp + seq, keyString, "HmacMD5"); + } + + public static String hmacDigest(String msg, String keyString) { + + return hmacDigest(msg, keyString, "HmacMD5"); + } + + public static String hmacDigest(String msg, String keyString, String algo) { + + String digest = null; + try { + SecretKeySpec key = new SecretKeySpec(keyString.getBytes(StandardCharsets.UTF_8), algo); + Mac mac = Mac.getInstance(algo); + mac.init(key); + + byte[] bytes = mac.doFinal(msg.getBytes(StandardCharsets.US_ASCII)); + + StringBuffer hash = new StringBuffer(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + hash.append('0'); + } + hash.append(hex); + } + digest = hash.toString().toUpperCase(); + } catch (InvalidKeyException | NoSuchAlgorithmException e) { + e.printStackTrace();//todo remove pod + log.error(e.getMessage()); + } + return digest; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Seq.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Seq.java new file mode 100644 index 00000000..b1b2ab26 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Seq.java @@ -0,0 +1,30 @@ +package com.xhpc.evcs.encryption; + +import org.joda.time.DateTime; + +import java.util.Calendar; + +public class Seq { + + private static Integer seq = null; + + public synchronized static String getNextNIncrease() { + + Calendar calendar = Calendar.getInstance(); + DateTime dateTime = new DateTime(calendar); + int millisOfSecond = dateTime.getMillisOfSecond(); + String seqStr; + if (seq == null || millisOfSecond == 0) {//第一次获取和新秒重记 + seq = millisOfSecond; + seqStr = String.format("%04d", seq); + } else { + seq++; + seqStr = String.format("%04d", seq); + if (seq == 9999) { + seq = null; //满9999重记 + } + } + return seqStr; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/AesCBC.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/AesCBC.java new file mode 100644 index 00000000..78a121e8 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/AesCBC.java @@ -0,0 +1,102 @@ +package com.xhpc.evcs.encryption.cdgov; + +import org.springframework.util.Base64Utils; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; + +/** + * AES 是一种可逆加密算法,对用户的敏感信息加密处理 + * 对原始数据进行AES加密后,在进行Base64编码转化; + * 正确 + * AES128 位加密,加密模式采用 CBC + */ +public class AesCBC { + /*已确认 + * 加密用的Key 可以用26个字母和数字组成 + * 此处使用AES-128-CBC加密模式,key需要为16位。 + */ + + private static AesCBC instance = null; + + //private static + private AesCBC() { + + } + + public static AesCBC getInstance() { + + if (instance == null) + instance = new AesCBC(); + return instance; + } + + // 加密 + public String encrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception { + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + byte[] raw = sKey.getBytes(); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度 + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat)); + return new String(Base64Utils.encode(encrypted), StandardCharsets.UTF_8); +// return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。 + } + + // 解密 + public String decrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception { + + try { + byte[] raw = sKey.getBytes("ASCII"); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + byte[] encrypted1 = Base64Utils.decodeFromString(sSrc);//new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密 + byte[] original = cipher.doFinal(encrypted1); + String originalString = new String(original, encodingFormat); + return originalString; + } catch (Exception ex) { + return null; + } + } + + public static String decrypt(String cSrc) { + + String decrypt = null; + try { + decrypt = getInstance().decrypt(cSrc, "utf-8", PlatformConfig.sKey, PlatformConfig.ivParameter); + } catch (Exception e) { + e.printStackTrace(); + } + return decrypt; + } + + public static String encrypt(String cSrc) throws Exception { + + String encrypt = getInstance().encrypt(cSrc, "utf-8", PlatformConfig.sKey, PlatformConfig.ivParameter); + return encrypt.replaceAll("\r", "").replaceAll("\n", ""); + } + + public static void main(String[] args) throws Exception { + // 需要加密的字串 + String cSrc = "{\"total\":1,\"stationStatusInfo\":{\"operationID\":\"123456789\",\"stationID\":\"111111111111111\"," + + "\"con\n" + + "nectorStatusInfos\":{\"connectorID\":1,\"equipmentID\":\"10000000000000000000001\",\"status\":4, " + + "\"currentA\":0,\"currentB\":0,\"currentC\":0,\"voltageA\":0,\"voltageB\":0,\"voltageC\":0,\"soc\":10,}}}"; + System.out.println("加密前的字串是:" + cSrc); + // 加密 + String enString = AesCBC.getInstance().encrypt(cSrc, "utf-8", PlatformConfig.sKey, PlatformConfig.ivParameter); + System.out.println("加密后的字串是:" + enString); + + System.out.println("1jdzWuniG6UMtoa3T6uNLA==".equals(enString)); + + // 解密 + String DeString = AesCBC.getInstance().decrypt(enString, "utf-8", PlatformConfig.sKey, PlatformConfig.ivParameter); + System.out.println("解密后的字串是:" + DeString); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/HMacMD5.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/HMacMD5.java new file mode 100644 index 00000000..e860b824 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/HMacMD5.java @@ -0,0 +1,169 @@ +package com.xhpc.evcs.encryption.cdgov; + +//import com.company.project.platform.config.PlatformConfig; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class HMacMD5 { + + public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException { + + String key = "v3i46R8Rsh1CEstf"; + String OperatorID = "123456789"; + String Time = "20160729142400"; + String seq = "0001"; + String data = "123456789il7B0BSEjFdzpyKzfOFpvg/Se1CP802RItKYFPfSLRxJ3jf0bVl9hvYOEktPAYW2nd7S8MBcyHYy\n" + + "acHKbISq5iTmDzG+ivnR+SZJv3USNTYVMz9rCQVSxd0cLlqsJauko79NnwQJbzDTyLooYoIwz7\n" + + "5qBOH2/xOMirpeEqRJrF/EQjWekJmGk9RtboXePu2rka+Xm51syBPhiXJAq0GfbfaFu9tNqs/e2Vjj\n" + + "a/ltE1M0lqvxfXQ6da6HrThsm5id4ClZFIi0acRfrsPLRixS/IQYtksxghvJwbqOsbIsITail9Ayy4tKcoge\n" + + "EZiOO+4Ed264NSKmk7l3wKwJLAFjCFogBx8GE3OBz4pqcAn/ydA=201607291424000001\n" + + "9CF107B283E6C9DB44D1CC810476B498"; + System.out.println(data); + String hmacMd5Str = HMacMD5.getHmacMd5Str(key, data); + System.out.println(new String(hmacMd5Str)); + + } + + /** + * 计算参数的md5信息 + * + * @param str 待处理的字节数组 + * @return md5摘要信息 + * @throws NoSuchAlgorithmException + */ + private static byte[] md5(byte[] str) + throws NoSuchAlgorithmException { + + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(str); + return md.digest(); + } + + /** + * 将待加密数据data,通过密钥key,使用hmac-md5算法进行加密,然后返回加密结果。 + * 参照rfc2104 HMAC算法介绍实现。 + * + * @param key 密钥 + * @param data 待加密数据 + * @return 加密结果 + * @throws NoSuchAlgorithmException + * @author 尹星 + */ + public static byte[] getHmacMd5Bytes(byte[] key, byte[] data) throws NoSuchAlgorithmException { + /* HmacMd5 calculation formula: H(K XOR opad, H(K XOR ipad, text)) + * HmacMd5 计算公式:H(K XOR opad, H(K XOR ipad, text)) + * H代表hash算法,本类中使用MD5算法,K代表密钥,text代表要加密的数据 + * ipad为0x36,opad为0x5C。 + */ + int length = 64; + byte[] ipad = new byte[length]; + byte[] opad = new byte[length]; + for (int i = 0; i < 64; i++) { + ipad[i] = 0x36; + opad[i] = 0x5C; + } + byte[] actualKey = key; //Actual key. + byte[] keyArr = new byte[length]; //Key bytes of 64 bytes length + /*If key's length is longer than 64,then use hash to digest it and use the result as actual key. + * 如果密钥长度,大于64字节,就使用哈希算法,计算其摘要,作为真正的密钥。 + */ + if (key.length > length) { + actualKey = md5(key); + } + for (int i = 0; i < actualKey.length; i++) { + keyArr[i] = actualKey[i]; + } + + /*append zeros to K + * 如果密钥长度不足64字节,就使用0x00补齐到64字节。 + */ + if (actualKey.length < length) { + for (int i = actualKey.length; i < keyArr.length; i++) + keyArr[i] = 0x00; + } + + /*calc K XOR ipad + * 使用密钥和ipad进行异或运算。 + */ + byte[] kIpadXorResult = new byte[length]; + for (int i = 0; i < length; i++) { + kIpadXorResult[i] = (byte) (keyArr[i] ^ ipad[i]); + } + + /*append "text" to the end of "K XOR ipad" + * 将待加密数据追加到K XOR ipad计算结果后面。 + */ + byte[] firstAppendResult = new byte[kIpadXorResult.length + data.length]; + for (int i = 0; i < kIpadXorResult.length; i++) { + firstAppendResult[i] = kIpadXorResult[i]; + } + for (int i = 0; i < data.length; i++) { + firstAppendResult[i + keyArr.length] = data[i]; + } + + /*calc H(K XOR ipad, text) + * 使用哈希算法计算上面结果的摘要。 + */ + byte[] firstHashResult = md5(firstAppendResult); + + /*calc K XOR opad + * 使用密钥和opad进行异或运算。 + */ + byte[] kOpadXorResult = new byte[length]; + for (int i = 0; i < length; i++) { + kOpadXorResult[i] = (byte) (keyArr[i] ^ opad[i]); + } + + /*append "H(K XOR ipad, text)" to the end of "K XOR opad" + * 将H(K XOR ipad, text)结果追加到K XOR opad结果后面 + */ + byte[] secondAppendResult = new byte[kOpadXorResult.length + firstHashResult.length]; + for (int i = 0; i < kOpadXorResult.length; i++) { + secondAppendResult[i] = kOpadXorResult[i]; + } + for (int i = 0; i < firstHashResult.length; i++) { + secondAppendResult[i + keyArr.length] = firstHashResult[i]; + } + + /*H(K XOR opad, H(K XOR ipad, text)) + * 对上面的数据进行哈希运算。 + */ + byte[] hmacMd5Bytes = md5(secondAppendResult); + + return hmacMd5Bytes; + + } + + // public static String getHmacMd5Str(String data){ +// String hmacMd5Str = getHmacMd5Str(PlatformConfig.SigSecret, data); +// return hmacMd5Str; +// } + public static String getHmacMd5Str(String key, String data) { + + data = data.replaceAll("\n", "").replaceAll("\r", ""); + String result = ""; + try { + byte[] keyByte = key.getBytes("UTF-8"); + byte[] dataByte = data.getBytes("UTF-8"); + byte[] hmacMd5Byte = getHmacMd5Bytes(keyByte, dataByte); + StringBuffer md5StrBuff = new StringBuffer(); + for (int i = 0; i < hmacMd5Byte.length; i++) { + if (Integer.toHexString(0xFF & hmacMd5Byte[i]).length() == 1) { + + md5StrBuff.append("0").append(Integer.toHexString(0xFF & hmacMd5Byte[i])); + } else { + md5StrBuff.append(Integer.toHexString(0xFF & hmacMd5Byte[i])); + } + } + result = md5StrBuff.toString().toUpperCase(); + + } catch (Exception e) { + + } + return result; + + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/PlatformConfig.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/PlatformConfig.java new file mode 100644 index 00000000..87f33ba1 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/cdgov/PlatformConfig.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs.encryption.cdgov; + +/** + * @Author lides + * @Description + * @Date 18-9-15 17:10 + **/ +public class PlatformConfig { + + public static final String OperatorID = "734810352"; + //签名秘钥 + public static final String SigSecret = "v3i46R8Rsh1CEstf"; + //秘钥:申请认证使用 + public static final String OperatorSecret = "Rf5xaS6j7Or2hSBe"; + //消息秘钥,对数据加秘用 + public static String sKey = "cPgZQTrkglOuYh2J"; + //初始化向量 + public static String ivParameter = "cPgZQTrkglOuYh2J"; + public static final String notificationUrl = "http://cdhlht.evxian.com:9000/evcs/20160701/"; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/DelegatingServletInputStream.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/DelegatingServletInputStream.java new file mode 100644 index 00000000..a61ef295 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/DelegatingServletInputStream.java @@ -0,0 +1,75 @@ +package com.xhpc.evcs.http; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class DelegatingServletInputStream extends ServletInputStream { + + private final InputStream sourceStream; + + private boolean finished = false; + + + /** + * Create a DelegatingServletInputStream for the given source stream. + * + * @param sourceStream the source stream (never {@code null}) + */ + public DelegatingServletInputStream(InputStream sourceStream) { + + this.sourceStream = sourceStream; + } + + /** + * Return the underlying source stream (never {@code null}). + */ + public final InputStream getSourceStream() { + + return this.sourceStream; + } + + + @Override + public int read() throws IOException { + + int data = this.sourceStream.read(); + if (data == -1) { + this.finished = true; + } + return data; + } + + @Override + public int available() throws IOException { + + return this.sourceStream.available(); + } + + @Override + public void close() throws IOException { + + super.close(); + this.sourceStream.close(); + } + + @Override + public boolean isFinished() { + + return this.finished; + } + + @Override + public boolean isReady() { + + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + + throw new UnsupportedOperationException(); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ForbiddenException.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ForbiddenException.java new file mode 100644 index 00000000..3a3ab9f5 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ForbiddenException.java @@ -0,0 +1,14 @@ +package com.xhpc.evcs.http; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "Credential is vacant or invalid.") +public class ForbiddenException extends RuntimeException { + + public ForbiddenException(String message) { + + super(message); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/GlobalExceptionController.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/GlobalExceptionController.java new file mode 100644 index 00000000..c5a2d7f3 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/GlobalExceptionController.java @@ -0,0 +1,41 @@ +package com.xhpc.evcs.http; + +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.encryption.EvcsConst; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +@Slf4j +public class GlobalExceptionController extends ResponseEntityExceptionHandler { + + @ExceptionHandler(Throwable.class) + public @ResponseBody + CommonResponse handleAllException(Throwable e) { + + CommonResponse commonResponse = new CommonResponse(); + commonResponse.setRet(EvcsConst.RET_FAIl); + commonResponse.setMsg(e.getMessage()); + logger.error(e.getMessage()); + return commonResponse; + } + + @Override + protected ResponseEntity handleMissingServletRequestParameter(MissingServletRequestParameterException e, + HttpHeaders headers, HttpStatus status, + WebRequest request) { + + String name = e.getParameterName(); + logger.error(name + " parameter is missing"); + return super.handleMissingServletRequestParameter(e, headers, status, request); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestRepeatReadWrapper.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestRepeatReadWrapper.java new file mode 100644 index 00000000..2d2097d8 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestRepeatReadWrapper.java @@ -0,0 +1,42 @@ +package com.xhpc.evcs.http; + +import org.springframework.util.StreamUtils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.ByteArrayInputStream; +import java.io.IOException; + +public class HttpServletRequestRepeatReadWrapper extends HttpServletRequestWrapper { + + private byte[] body; + + public HttpServletRequestRepeatReadWrapper(HttpServletRequest request) { + + super(request); + try { + body = StreamUtils.copyToByteArray(request.getInputStream()); + } catch (IOException ex) { + body = new byte[0]; + } + } + + public byte[] getBody() { + + return body; + } + + public void setBody(byte[] body) { + + this.body = body; + } + + @Override + public ServletInputStream getInputStream() throws IOException { + + return new DelegatingServletInputStream(new ByteArrayInputStream(body)); + + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestWritableWrapper.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestWritableWrapper.java new file mode 100644 index 00000000..2065f81e --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/HttpServletRequestWritableWrapper.java @@ -0,0 +1,87 @@ +package com.xhpc.evcs.http; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; +import java.util.Enumeration; + +public class HttpServletRequestWritableWrapper extends HttpServletRequestWrapper implements HttpServletRequest { + + private final ByteArrayInputStream decryptedDataBAIS; + + public HttpServletRequestWritableWrapper(HttpServletRequest request, byte[] decryptedData) { + + super(request); + decryptedDataBAIS = new ByteArrayInputStream(decryptedData); + } + + @Override + public String getHeader(String headerName) { + + String headerValue = super.getHeader(headerName); + if (headerValue != null) { + if ("Accept".equalsIgnoreCase(headerName)) { + return headerValue.replaceAll( + MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_JSON_VALUE); + } else if ("Content-Type".equalsIgnoreCase(headerName)) { + return headerValue.replaceAll( + MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_JSON_VALUE); + } + } + return headerValue; + } + + @Override + public Enumeration getHeaders(final String headerName) { + + return super.getHeaders(headerName); + } + + @Override + public String getContentType() { + + String contentTypeValue = super.getContentType(); + if (MediaType.TEXT_PLAIN_VALUE.equalsIgnoreCase(contentTypeValue)) { + return MediaType.APPLICATION_JSON_VALUE; + } + return contentTypeValue; + } + + @Override + public BufferedReader getReader() throws UnsupportedEncodingException { + + return new BufferedReader(new InputStreamReader(decryptedDataBAIS, "UTF-8")); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + + return new ServletInputStream() { + @Override + public boolean isFinished() { + + return false; + } + + @Override + public boolean isReady() { + + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + + @Override + public int read() { + + return decryptedDataBAIS.read(); + } + }; + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/MediaType.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/MediaType.java new file mode 100644 index 00000000..8938315d --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/MediaType.java @@ -0,0 +1,8 @@ +package com.xhpc.evcs.http; + +public class MediaType { + + public static final String TEXT_PLAIN_VALUE = "text/plain"; + public static final String APPLICATION_JSON_VALUE = "application/json"; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ServerInternalException.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ServerInternalException.java new file mode 100644 index 00000000..fd27246a --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/http/ServerInternalException.java @@ -0,0 +1,14 @@ +package com.xhpc.evcs.http; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) +public class ServerInternalException extends RuntimeException { + + public ServerInternalException(String message) { + + super(message); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/DateUtil.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/DateUtil.java new file mode 100644 index 00000000..6325539d --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/DateUtil.java @@ -0,0 +1,485 @@ +package com.xhpc.evcs.utils; + +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class DateUtil { + + public static final String DEFAULT_DATE_FORMAT = "yyyyMMddHHmmss"; + + public static final String DATE_FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss"; + + public static final String DATE_FORMAT_MONTH_TIME = "MM-dd HH:mm"; + + public static final String YEAR_MONTH_DAY = "yyyy-MM-dd"; + + /** + * convert string(such as: 2003-11-26) to Date + * + * @param dateStr string format of date + * @return + */ + public static final Date string2Date(String dateStr) { + + return string2Date(dateStr + " 00:00:00", DATE_FORMAT_DATE_TIME); + } + + /** + * string to date, the format is same to SimpleDateFormat for example + * "yyyyMMdd" "yyyy-MM-dd HH:mm:ss" etc please see + * java.text.SimpleDateFormat + * + * @param dateStr + * @param format + * @return + */ + public static final Date string2Date(String dateStr, String format) { + + if (dateStr == null || dateStr.length() == 0) + return null; + DateFormat df = new SimpleDateFormat(format); + try { + return df.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将long型字符串转换成时间格式 + * + * @param dateTime + * @return + */ + public static final String longStr2Date(String dateTime) { + + if (dateTime == null || dateTime.length() == 0) + return null; + Date date = new Date(Long.parseLong(dateTime)); + + return date2String(date, DATE_FORMAT_DATE_TIME); + } + + /** + * convert date to string according to default format + * + * @param date + * @return + */ + public static final String date2String(Date date) { + + return date2String(date, DEFAULT_DATE_FORMAT); + } + + /** + * convert date to string, and the format is same to SimpleDateFormat for + * example "yyyyMMdd" "yyyy-MM-dd HH:mm" etc please see + * java.text.SimpleDateFormat + * + * @param date + * @param format + * @return + */ + public static final String date2String(Date date, String format) { + + if (date == null) { + return ""; + } + DateFormat df = new SimpleDateFormat(format); + return df.format(date); + } + + + /** + * date 2006-04-10 author :zhaopeng + */ + private static SimpleDateFormat sf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + public static Date getWeek(Date date) { + + Calendar c = getCalendar(date); + +// int m = c.get(Calendar.DAY_OF_WEEK); +// if (m - 1 == 0) { +// c.add(Calendar.DAY_OF_WEEK, -6); +// } else { +// c.add(Calendar.DAY_OF_WEEK, -(m - 2)); +// } + c.add(Calendar.DAY_OF_WEEK, -Calendar.DAY_OF_WEEK); + sf.format(c.getTime()); + return c.getTime(); + + } + + public static Date getMonth(Date date) { + + Calendar c = getCalendar(date); + int m = c.get(Calendar.DAY_OF_MONTH); + + c.add(Calendar.DAY_OF_MONTH, -(m - 1)); + return c.getTime(); + } + + public static void getMailConsole() { + + } + + public static Date getMonth(Date date, int num) { + + Calendar c = getCalendar(date); + c.add(Calendar.MONTH, -num); + return c.getTime(); + } + + public static Date getYear(Date date) { + + Calendar c = getCalendar(date); + c.add(Calendar.YEAR, -1); + return c.getTime(); + } + + /** + * add by cjh convert date to string, and the format is same to + * SimpleDateFormat for example "yyyyMMdd" "yyyy-MM-dd HH:mm" etc please see + * java.text.SimpleDateFormat + * + * @param date + * @param format + * @return + */ + public static final String date2ChineseString(Date date) { + + if (date == null) { + return ""; + } + DateFormat df = new SimpleDateFormat("yyyy年M月d日"); + String str = df.format(date); + int yearBorder = str.indexOf("年"); + int monthBorder = str.indexOf("月"); + int dayBorder = str.indexOf("日"); + return getChineseDate(str.substring(0, 1)) + + getChineseDate(str.substring(1, 2)) + + getChineseDate(str.substring(2, 3)) + + getChineseDate(str.substring(3, 4)) + '年' + + getChineseDate(str.substring(yearBorder + 1, monthBorder)) + + '月' + + getChineseDate(str.substring(monthBorder + 1, dayBorder)) + + '日'; + } + + /** + * add by cjh �������� + * + * @param date + * @return + */ + public static String getChineseDate(String date) { + + StringBuffer sb = new StringBuffer(); + if (date.length() == 2) { + String ten = date.substring(0, 1); // ʮλ + String entries = date.substring(1, 2); // ��λ + if (ten.substring(0).equals("1")) { + sb.append("ʮ"); + } + if (ten.substring(0).equals("2")) { + sb.append("��ʮ"); + } + if (ten.substring(0).equals("3")) { + sb.append("��ʮ"); + } + if (!entries.equals("0")) { + sb.append(number2Chinese(entries)); + } + } else { + String entries = date.substring(0); + sb.append(number2Chinese(entries)); + } + return sb.toString(); + } + + /** + * add by cjh ����ת���� + * + * @param number + * @return + */ + public static String number2Chinese(String number) { + + char[] numberChars = number.toCharArray(); + switch (numberChars[0]) { + case '0': + return "零"; + case '1': + return "一"; + case '2': + return "二"; + case '3': + return "三"; + case '4': + return "四"; + case '5': + return "五"; + case '6': + return "六"; + case '7': + return "七"; + case '8': + return "八"; + case '9': + return "九"; + default: + return ""; + } + } + + /** + * Returns natural days between beginDate and endDate. Positive number if + * beginDate before c2, negative if beginDate after endDate, 0 if beginDate + * and endDate represent the same day. + * + * @param beginDate the begin date + * @param endDate the end date + * @return natural days between begin date and end date + */ + + public static BigDecimal dateToExcel(Date date) { + + Date endDate = DateUtil.string2Date("1900-01-00 00:00", "yyyy-MM-dd HH:mm"); + int days = naturalDaysBetween(endDate, date); + + return new BigDecimal(days).add(timeToExcel(date)); + } + + public static BigDecimal timeToExcel(Date date) { + + Calendar c1 = getCalendar(date); + + int hour = c1.get(Calendar.HOUR_OF_DAY); + int min = c1.get(Calendar.MINUTE); + int sec = c1.get(Calendar.SECOND); + System.out.print(new BigDecimal(hour * 3600 + min * 60 + sec).divide(new BigDecimal(86400), 10, + BigDecimal.ROUND_HALF_UP).setScale(10, BigDecimal.ROUND_HALF_UP)); + return new BigDecimal(hour * 3600 + min * 60 + sec).divide(new BigDecimal(86400), 10, BigDecimal.ROUND_HALF_UP).setScale(10, BigDecimal.ROUND_HALF_UP); + } + + + public static int naturalDaysBetween(Date beginDate, Date endDate) { + + long msPerDay = 1000 * 60 * 60 * 24; + Calendar c1 = getCalendar(beginDate); + Calendar c2 = getCalendar(endDate); + long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis(); + int days = (int) (msDiff / msPerDay); + int msResidue = (int) (msDiff % msPerDay); + Calendar c3 = Calendar.getInstance(); + c3.setTimeInMillis(c2.getTimeInMillis() - msResidue); + Calendar c4 = (Calendar) c2.clone(); + c4.add(Calendar.DAY_OF_MONTH, -1); + if (c3.get(Calendar.DAY_OF_MONTH) == c4.get(Calendar.DAY_OF_MONTH)) + days++; + else { + c4.add(Calendar.DAY_OF_MONTH, 2); + if (c3.get(Calendar.DAY_OF_MONTH) == c4.get(Calendar.DAY_OF_MONTH)) + days--; + } + return days; + } + + /** + * Returns natural days,hours and minutes between beginDate and endDate. + * + * @param beginDate the begin date + * @param endDate the end date + * @return int[]:[0]:days;[1]:hours;[2]:minutes + * @author johnny 2007-1-31 + */ + + + public static int[] naturalDHMBetween(Date beginDate, Date endDate) { + + int[] dhm = new int[3]; + if (beginDate == null || endDate == null) + return dhm; + long intervalSecond, leftSecond; + intervalSecond = leftSecond = (endDate.getTime() - beginDate.getTime()) / 1000; + dhm[0] = (int) intervalSecond / (60 * 60 * 24); + leftSecond = leftSecond - dhm[0] * 60 * 60 * 24; + dhm[1] = (int) leftSecond / (60 * 60); + leftSecond = leftSecond - dhm[1] * 60 * 60; + dhm[2] = (int) leftSecond / 60; + return dhm; + } + + public static Calendar getCalendar(Date date) { + + Calendar c = Calendar.getInstance(); + c.setTime(date); + return c; + } + + public static Date earliestOfDate(Date date) { + + Calendar c = getCalendar(date); + c.set(Calendar.HOUR, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + return c.getTime(); + } + + public static Date latestOfDate(Date date) { + + Calendar c = getCalendar(date); + c.set(Calendar.HOUR, 23); + c.set(Calendar.MINUTE, 59); + c.set(Calendar.SECOND, 59); + c.set(Calendar.MILLISECOND, 999); + return c.getTime(); + } + + public static int getHourOfDate(Date date) { + + Calendar c = getCalendar(date); + return c.get(Calendar.HOUR); + } + + public static boolean isFirstDayOfMonth(Date date) { + + Calendar c = getCalendar(date); + return c.get(Calendar.DATE) == 1; + } + + /** + * Ϊָ���������ָ����ݡ��·ݺ�������µ����� + */ + public static Date addDate(Date date, int year, int month, int day) { + + Calendar c = getCalendar(date); + c.add(Calendar.YEAR, year); + c.add(Calendar.MONTH, month); + c.add(Calendar.DATE, day); + return c.getTime(); + } + + /** + * Ϊָ���������ָ��Сʱ�����ӡ���ͺ��룬�����µ����� + */ + public static Date addTime(Date date, int hour, int minute, int second, + int millisecond) { + + Calendar c = getCalendar(date); + c.add(Calendar.HOUR_OF_DAY, hour); + c.add(Calendar.MINUTE, minute); + c.add(Calendar.SECOND, second); + c.add(Calendar.MILLISECOND, millisecond); + return c.getTime(); + } + + public static Date addDay(Date date, int days) { + + Calendar c = getCalendar(date); + c.add(Calendar.DATE, days); + return c.getTime(); + } + + public static Date getPreviousDate(Date date) { + + return addDay(date, -1); + } + + public static boolean isTheSameDay(Date date1, Date date2) { + + String value1 = date2String(date1, DEFAULT_DATE_FORMAT); + String value2 = date2String(date2, DEFAULT_DATE_FORMAT); + return value1 != null && value1.equals(value2); + } + + /** + * 判断是否为周末 + * + * @param date + * @return + */ + public static boolean isWeekend(Date date) { + + Calendar c = getCalendar(date); + int day = c.get(Calendar.DAY_OF_WEEK); + + return day == 1 || day == 7; + } + + public static String week(Date date) { + + Calendar c = getCalendar(date); + int day = c.get(Calendar.DAY_OF_WEEK); + + String week = ""; + switch (day) { + case 1: + week = "周日"; + break; + + case 2: + week = "周一"; + break; + + case 3: + week = "周二"; + break; + + case 4: + week = "周三"; + break; + + case 5: + week = "周四"; + break; + + case 6: + week = "周五"; + break; + + case 7: + week = "周六"; + break; + } + + return week; + } + + public static String getNowDateStr() { + + Calendar now = Calendar.getInstance(); + int year = now.get(Calendar.YEAR); + int month = now.get(Calendar.MONTH) + 1; + int day = now.get(Calendar.DAY_OF_MONTH); + String dayNames[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + int dayOfWeek = now.get(Calendar.DAY_OF_WEEK) - 1; + if (dayOfWeek < 0) dayOfWeek = 0; + String week = dayNames[dayOfWeek]; + String nowDateStr = year + "年" + month + "月" + day + "日 " + week; + + return nowDateStr; + + } + + public static void main(String[] args) { + + DateUtil.isWeekend(new Date()); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-08", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-09", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-10", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-11", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-12", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-13", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-14", "yyyy-MM-dd")); + } + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/JSONUtil.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/JSONUtil.java new file mode 100644 index 00000000..e1f46901 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/utils/JSONUtil.java @@ -0,0 +1,75 @@ +package com.xhpc.evcs.utils; + +import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.CollectionType; + +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +public class JSONUtil { + + private static ObjectMapper mapper = new ObjectMapper(); + + /** + * 将一个对象转换成目标对象 + * + * @param src + * @param dest + * @return + */ + public static T copyProperties(Object src, Class dest) throws Exception { + + return JSON.parseObject(JSON.toJSONString(src), dest); + } + + public static T copyProperties(Object src, JavaType type) throws Exception { + + return JSON.parseObject(JSON.toJSONString(src), type); + } + + // 适用于简单对象,复杂对象参考下面的main方法 + public static T readParams(String params, Class clz) throws IOException { + + return mapper.readValue(params, clz); + } + + public static List readParamsList(String data, Class clzo) throws IOException { + + CollectionType javaType = mapper.getTypeFactory() + .constructCollectionType(List.class, clzo); + return mapper.readValue(data, javaType); + } + + public static String toJSONString(Object o) throws JsonProcessingException { + + return mapper.writeValueAsString(o); + } + + // 适用于复杂对象的例子 + public static void main(String[] args) throws IOException { + + String json = "[\n" + "{\n" + " \"id\": \"123\",\n" + " \"phoneNumbers\": [1,2],\n \"gf\": {\"id\":\"1\"," + + "\"name\":\"nana\"}\n" + "}\n" + "\n]"; + byte[] jsonData = json.getBytes(); + ObjectMapper objectMapper = new ObjectMapper(); + //read JSON like DOM Parser + JsonNode rootNode = objectMapper.readTree(jsonData); + JsonNode idNode = rootNode.path("id"); + System.out.println("id = " + idNode.asInt()); + + JsonNode phoneNosNode = rootNode.path("phoneNumbers"); + Iterator elements = phoneNosNode.elements(); + while (elements.hasNext()) { + JsonNode phone = elements.next(); + System.out.println("Phone No = " + phone.asLong()); + } + JsonNode gfid = rootNode.path("gf").path("id"); + System.out.println("gf id: " + gfid.asInt()); + } + +} diff --git a/evcs-modules/evcs-core/pom.xml b/evcs-modules/evcs-core/pom.xml new file mode 100644 index 00000000..79d5e009 --- /dev/null +++ b/evcs-modules/evcs-core/pom.xml @@ -0,0 +1,154 @@ + + + com.xhpc + evcs-modules + 1.0 + + 4.0.0 + evcs-core + + + + com.xhpc + evcs-common + 1.0 + + + mysql + mysql-connector-java + 8.0.25 + + + cn.hutool + hutool-all + 5.7.9 + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + com.squareup.okhttp3 + okhttp + 3.14.9 + + + + com.squareup.okhttp3 + logging-interceptor + 3.14.9 + + + + org.projectlombok + lombok + + + + org.apache.commons + commons-lang3 + + + + org.springframework.data + spring-data-commons + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + com.jayway.jsonpath + json-path + + + + org.springframework.boot + spring-boot-devtools + true + + + commons-io + commons-io + 2.5 + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + 2.4.0 + + + + repackage + + + + + + + + src/main/resources + + **/*.yml + **/*.xml + **/*.properties + + true + + + + + diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/EvcsApplication.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/EvcsApplication.java new file mode 100644 index 00000000..13379211 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/EvcsApplication.java @@ -0,0 +1,39 @@ +package com.xhpc; + +import com.xhpc.evcs.config.EvcsFilter; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.scheduling.annotation.EnableScheduling; + +import javax.annotation.PostConstruct; +import javax.servlet.Filter; + +@EntityScan("com.xhpc") +@EnableJpaRepositories("com.xhpc") +@EnableFeignClients +@SpringBootApplication +@EnableScheduling +public class EvcsApplication { + + public static void main(String[] args) { + + SpringApplication.run(EvcsApplication.class, args); + } + + @PostConstruct + public void init() { + + } + + @Bean //duplicated to @Component annotation, make doFilter invoke twice, nah... gone? + public Filter getEvcsFilter() { + + System.out.println(">>>> bean filter init <<<<"); + return new EvcsFilter(); + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/NotificationPoleStatus2Evshare.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/NotificationPoleStatus2Evshare.java new file mode 100644 index 00000000..84f3d257 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/NotificationPoleStatus2Evshare.java @@ -0,0 +1,71 @@ +package com.xhpc.evcs; + +import com.xhpc.evcs.api.CoreDispatcher; +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.PoleStatusInfo; +import com.xhpc.evcs.jpa.ConnectorStatusInfoRepository; +import com.xhpc.evcs.utils.ChangePoleStatus; +import com.xhpc.evcs.utils.JSONUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; + +import java.io.IOException; +import java.util.*; + +@Component +public class NotificationPoleStatus2Evshare extends CoreDispatcher { + + @Autowired + private ConnectorStatusInfoRepository connectorStatusInfoRepository; + + // @Scheduled(fixedRate = 1000 * 60) + private void notificationConnectorStatus() throws IOException { + + List connectorStatusInfos = connectorStatusInfoRepository.findAll(); + Set connectorStatusInfoSet = new HashSet<>(connectorStatusInfos.size()); + CollectionUtils.addAll(connectorStatusInfoSet, connectorStatusInfos); + Set changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfoSet); + List poleStatusInfos = new ArrayList<>(); + //用于过滤掉集合里重复的充电桩编号 + Map infosMap = new HashMap<>(); + for (ConnectorStatusInfo statusInfo : changeStatus) { + String connectorNo = statusInfo.getConnectorID(); + String poleNo = connectorNo.substring(0, connectorNo.length() - 2); //截掉 + + if (statusInfo.getStatus() == 255 || statusInfo.getStatus() == 0) { + infosMap.put(poleNo, 2); + } else if (statusInfo.getStatus() == 1) { + infosMap.put(poleNo, 0); + } else { + infosMap.put(poleNo, 1); + + } + } + + Set keys = infosMap.keySet(); + for (String key : keys) { + PoleStatusInfo poleStatusInfo = new PoleStatusInfo(); + poleStatusInfo.setPoleNo(key); + poleStatusInfo.setStatus(infosMap.get(key)); + poleStatusInfos.add(poleStatusInfo); + } + + if (poleStatusInfos.size() > 0) { + notificationPoleStatus2Evshare(poleStatusInfos); + } + } + + public String notificationPoleStatus2Evshare(@RequestBody List poleStatusInfos) throws IOException { + + String data = JSONUtil.toJSONString(poleStatusInfos); + CommonRequest> commonRequest = new CommonRequest<>(); + commonRequest.setOperatorId("MA6DFCTD5"); + commonRequest.setData(data); + String responseBody = "";//todo ok(commonRequest, "pole/notification_pole_status"); + return responseBody; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/ChargeOrderInfoController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/ChargeOrderInfoController.java new file mode 100644 index 00000000..d14b818a --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/ChargeOrderInfoController.java @@ -0,0 +1,49 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.domain.CDChargeOrderInfo4Bonus; +import com.xhpc.evcs.domain.ChargeOrderInfo; +import com.xhpc.evcs.domain.StationInfo; +import com.xhpc.evcs.dto.ChargeOrderInfoResponse; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.ChargeOrderInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +@Slf4j +@RestController() +public class ChargeOrderInfoController extends CoreDispatcher { + + @Autowired + private ChargeOrderInfoRepository chargeOrderInfoRepository; + + @PostMapping("/v1/notification_charge_order_info") + public CommonResponse notificationChargeOrderInfo(@RequestBody CommonRequest commonRequest) throws IOException { + + String operatorID = commonRequest.getOperatorId(); + StationInfo stationInfo = new StationInfo(); + stationInfo.setOperatorId(operatorID); + String data = commonRequest.getData(); + ChargeOrderInfo chargeOrderInfo = JSONUtil.readParams(data, ChargeOrderInfo.class); + chargeOrderInfo.setInfraOperatorId("759588065"); //todo use common request operator id? + chargeOrderInfo.setBillerOperatorId("MA6DFCTD5"); + log.info(">>notify charge order OID: " + operatorID); +// chargeOrderInfoRepository.save(chargeOrderInfo); + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + ChargeOrderInfoResponse resp = new ChargeOrderInfoResponse(); + resp.setConfirmResult(0); + resp.setConnectorID(chargeOrderInfo.getConnectorID()); + resp.setStartChargeSeq(chargeOrderInfo.getStartChargeSeq()); + response.setData(JSONUtil.toJSONString(resp)); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java new file mode 100644 index 00000000..79aec70c --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java @@ -0,0 +1,38 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.domain.StationInfo; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +@RestController() +public class CheckChargeOrderController extends CoreDispatcher { + + @PostMapping("/v1/check_charge_orders") + public CommonResponse notificationChargeOrderInfo(@RequestBody CommonRequest commonRequest) throws IOException { + + String operatorID = commonRequest.getOperatorId(); + StationInfo stationInfo = new StationInfo(); + stationInfo.setOperatorId(operatorID); + String data = commonRequest.getData(); + CheckChargeOrderRequestData req = JSONUtil.readParams(data, CheckChargeOrderRequestData.class); + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + CheckChargeOrderResponseData resp = new CheckChargeOrderResponseData(); + resp.setCheckOrderSeq(req.getCheckOrderSeq()); + resp.setStartTime(req.getStartTime()); + resp.setEndTime(req.getEndTime()); + resp.setDisputeOrders(new DisputeOrder[]{}); + resp.setTotalDisputeMoney(0.0); + resp.setTotalDisputeOrder(0); + resp.setTotalDisputePower(0.0); + response.setData(JSONUtil.toJSONString(resp)); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CoreDispatcher.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CoreDispatcher.java new file mode 100644 index 00000000..06d0390b --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CoreDispatcher.java @@ -0,0 +1,158 @@ +package com.xhpc.evcs.api; + +import cn.hutool.core.date.DateUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.DTOJsonHelper; +import com.xhpc.evcs.dto.TokenRequest; +import com.xhpc.evcs.dto.TokenResponse; +import com.xhpc.evcs.http.ForbiddenException; +import com.xhpc.evcs.http.ServerInternalException; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.OperatorInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okhttp3.logging.HttpLoggingInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import static com.xhpc.evcs.config.EvcsFilter.encryptReqOut; + +@Slf4j +public class CoreDispatcher { + + @Resource + OperatorInfoRepository operatorInfoRepository; + + @Value("http://hlht.cd-test.zcsy-inc.cn/evcs/20160701") + private String evcsSrvUrl; + @Value("true") + private boolean oklog = false; + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + public static final okhttp3.MediaType JSON = okhttp3.MediaType.parse("application/json; charset=utf-8"); + + @Transactional + public String ok(Object object, String url, String operatorId3irdpty, String operatorID) { + + okhttp3.RequestBody body = null; + HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); + logging.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + if (oklog) { + builder.addInterceptor(logging); + } + builder.connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS); + Calendar cal = Calendar.getInstance(); + String bearer = null; + AuthSecretToken authSecretTokenOut; + try { + if (object.getClass().getSimpleName().equals("CommonRequest")) { + CommonRequest commonRequest = (CommonRequest) object; + if (operatorId3irdpty == null) + operatorId3irdpty = commonRequest.getOperatorId(); + authSecretTokenOut = getAuthSecretTokenOut(operatorId3irdpty, operatorID); + Date tokenExpiry = authSecretTokenOut.getTokenExpiry(); + String oData = commonRequest.getData(); + String tData; + if (tokenExpiry == null || tokenExpiry.before(cal.getTime())) { + TokenRequest tokenRequest = new TokenRequest(); + tokenRequest.setOperatorId(operatorID); + tokenRequest.setOperatorSecret(authSecretTokenOut.getOperatorSecret()); + commonRequest.setData(JSONUtil.toJSONString(tokenRequest)); + tData = JSONUtil.toJSONString(commonRequest); + log.debug(tData); + if (authSecretTokenOut.isEncrypt()) { + tData = encryptReqOut(authSecretTokenOut.getDataSecret(), authSecretTokenOut.getDataSecretIV(), + authSecretTokenOut.getSigSecret(), commonRequest); + } + Request request = new Request.Builder() + .url(evcsSrvUrl + "/query_token") + .post(okhttp3.RequestBody.create(JSON, tData)) + .build(); + OkHttpClient client = builder.build(); + String tokenResponse = fwdToInfra(request, client); + TokenResponse tr = DTOJsonHelper.parseResponseData(tokenResponse, TokenResponse.class, authSecretTokenOut); + if (tr != null) { + String token = tr.getAccessToken(); + Integer tokenAvailableTime = tr.getTokenAvailableTime(); + authSecretTokenOut.setToken(token); + authSecretTokenOut.setTokenExpiry(DateUtil.date(Calendar.getInstance().getTimeInMillis() + (tokenAvailableTime) * 1000L - 300)); + authSecretTokenRepository.save(authSecretTokenOut); + } + } + bearer = authSecretTokenOut.getToken(); + commonRequest.setData(oData); + tData = JSONUtil.toJSONString(commonRequest); + if (authSecretTokenOut.isEncrypt()) { + tData = encryptReqOut(authSecretTokenOut.getDataSecret(), authSecretTokenOut.getDataSecretIV(), + authSecretTokenOut.getSigSecret(), commonRequest); + } + body = okhttp3.RequestBody.create(JSON, tData); + } + } catch (JsonProcessingException | BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + final Request.Builder req = new Request.Builder() + .url(evcsSrvUrl + url) + .header("Authorization", "Bearer " + bearer); + Request request; + assert body != null; +// if (body==null) request = req.get().build(); +// else + request = req.post(body).build(); + OkHttpClient client = builder.build(); + return fwdToInfra(request, client); + } + + private String fwdToInfra(Request request, OkHttpClient client) { + + String responseBody = null; + try { + Response response = client.newCall(request).execute(); + if (response.isSuccessful()) { + ResponseBody body = response.body(); + responseBody = body == null ? null : body.string(); + } else { + int code = response.code(); + if (code == 401 || code == 403) { + throw new ForbiddenException("Remote system returned " + code); + } + } + } catch (IOException e) { + String msg = e.getMessage(); + log.error(msg); + throw new ServerInternalException(msg); + } + return responseBody; + } + + private AuthSecretToken getAuthSecretTokenOut(String operatorId3irdpty, String operatorID) { + + return authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType(operatorId3irdpty, operatorID, + AuthSecretToken.SECRET_TOKEN_TYPE_OUT).orElse(null); + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/EquipChargeStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/EquipChargeStatusController.java new file mode 100644 index 00000000..8e24aa7b --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/EquipChargeStatusController.java @@ -0,0 +1,86 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.domain.ChargeOrderInfo; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.http.ServerInternalException; +import com.xhpc.evcs.jpa.ChargeOrderInfoRepository; +import com.xhpc.evcs.utils.DateUtil; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcHistoryOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.Date; + +@RestController() +public class EquipChargeStatusController extends CoreDispatcher { + + @Autowired + ChargeOrderInfoRepository chargeOrderInfoRepository; + + @PostMapping("/v1/query_equip_charge_status") + public CommonResponse QueryEquipChargeStatus(@RequestBody CommonRequest commonRequest) throws IOException { + + CDEquipChargeStatusCDInfo cdResponse = new CDEquipChargeStatusCDInfo(); + String data = commonRequest.getData(); + ChargeInfoRequest chargeInfoRequest = JSONUtil.readParams(data, ChargeInfoRequest.class); + String responseBody = ""; + String startChargeSeq = chargeInfoRequest.getStartChargeSeq(); + //这里要做一下转换 给成都市那边的订单号是 运营商ID(9位) + 填0(4位) + 四九订单号 填充够27位 + if ("0000".equals(startChargeSeq.substring(9, 13))) { + startChargeSeq = startChargeSeq.substring(13); + chargeInfoRequest.setStartChargeSeq(startChargeSeq); + } + if (startChargeSeq.length() > 14) { + XhpcHistoryOrder xhpcHistoryOrder = chargeOrderInfoRepository.findById(startChargeSeq).orElse(null); + ChargeOrderInfo chargeOrderInfo = new ChargeOrderInfo(xhpcHistoryOrder); + if (chargeOrderInfo == null) { + throw new ServerInternalException("未查询到该订单编号数据"); + } + cdResponse.setStartChargeSeq(chargeOrderInfo.getStartChargeSeq()); + cdResponse.setStartChargeSeqStat(chargeOrderInfo.getStartChargeSeqStat()); + cdResponse.setConnectorID(chargeOrderInfo.getConnectorID()); + cdResponse.setStartTime(chargeOrderInfo.getStartTime()); + String endTime; + if (chargeOrderInfo.getEndTime() != null) { + endTime = chargeOrderInfo.getEndTime(); + } else { + endTime = DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"); + } + cdResponse.setEndTime(endTime); + cdResponse.setTotalPower(chargeOrderInfo.getTotalPower()); + cdResponse.setElecMoney(chargeOrderInfo.getTotalElecMoney()); + cdResponse.setSeviceMoney(chargeOrderInfo.getTotalSeviceMoney()); + cdResponse.setTotalMoney(chargeOrderInfo.getTotalMoney()); + + ChargeDetails detail = new ChargeDetails(); + detail.setDetailStartTime(cdResponse.getStartTime()); + detail.setDetailEndTime(endTime); + detail.setDetailSeviceMoney(cdResponse.getSeviceMoney()); + detail.setDetailElecMoney(cdResponse.getElecMoney()); + detail.setDetailPower(cdResponse.getTotalPower()); + ChargeDetails[] details = {detail}; + cdResponse.setChargeDetails(details); + + } else { + responseBody = "";//todo ok(chargeInfoRequest, "equip/query_equip_charge_status"); + cdResponse = JSONUtil.readParams(responseBody, CDEquipChargeStatusCDInfo.class); + if (cdResponse.getStartChargeSeq() == null || "".equals(cdResponse.getStartChargeSeq())) { + throw new ServerInternalException("未查询到该订单编号数据"); + } else { + String seq = cdResponse.getStartChargeSeq(); + cdResponse.setStartChargeSeq("MA6DFCTD50000" + seq); + } + } + + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + response.setData(JSONUtil.toJSONString(cdResponse)); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java new file mode 100644 index 00000000..642da793 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java @@ -0,0 +1,31 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class QueryStationStatusController extends CoreDispatcher { + + @PostMapping("/v1/query_station_status") + public CommonResponse queryStationsInfo(@RequestBody CommonRequest commonRequest) throws Exception { + + StationStatusRequest stationStatusRequest = JSONUtil.readParams(commonRequest.getData(), StationStatusRequest.class); + String stationIDs[] = stationStatusRequest.getStationIds(); + String data = "";// todo ok(stationIDs, "/weixin/queryStationStatus"); + List stationStatusInfo = JSONUtil.readParamsList(data, StationStatusInfo.class); + StationStatusInfoWrapper stationStatusInfoWrappers = new StationStatusInfoWrapper(); + stationStatusInfoWrappers.setTotal(stationStatusInfo.size()); + stationStatusInfoWrappers.setStationStatusInfos(stationStatusInfo); + CommonResponse resp = new CommonResponse(); + resp.setRet("0"); + resp.setMsg(""); + resp.setData(JSONUtil.toJSONString(stationStatusInfoWrappers)); + return resp; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java new file mode 100644 index 00000000..8687f745 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java @@ -0,0 +1,98 @@ +package com.xhpc.evcs.api; + +import com.fasterxml.jackson.databind.JsonNode; +import com.xhpc.evcs.config.EvcsFilter; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.TokenRequest; +import com.xhpc.evcs.dto.TokenResponse; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Calendar; +import java.util.Date; +import java.util.UUID; + +@Slf4j +@RestController() +public class QueryTokenController extends CoreDispatcher { + + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + + @PostMapping("/v1/query_token") + public CommonResponse queryToken(@RequestBody TokenRequest tokenRequest) throws IOException { + + log.info("< commonRequest) throws IOException { + + String data = commonRequest.getData(); + NotificationStartChargeResultRequestData startChargeResultRequest = JSONUtil.readParams(data, + NotificationStartChargeResultRequestData.class); + String startChargeSeq = startChargeResultRequest.getStartChargeSeq(); +// ChargeOrderInfo chargeOrderInfo = chargeOrderInfoRepository.findById(startChargeSeq).orElse(new ChargeOrderInfo() +// .setStartChargeSeqAndReturn(startChargeSeq)); +// chargeOrderInfo.setStartChargeSeqStat(startChargeResultRequest.getStartChargeSeqStat()); +// chargeOrderInfo.setIdentCode(startChargeResultRequest.getIdentCode()); +// chargeOrderInfoRepository.save(chargeOrderInfo); todo + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + NotificationStartStopChargeResultResponse resp = new NotificationStartStopChargeResultResponse(); + resp.setSuccStat(0); + resp.setFailReason(0); + resp.setStartChargeSeq(startChargeResultRequest.getStartChargeSeq()); + response.setData(JSONUtil.toJSONString(resp)); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationStatusController.java new file mode 100644 index 00000000..a00ebbeb --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationStatusController.java @@ -0,0 +1,38 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import com.xhpc.evcs.domain.StationInfo; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.Status; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.ConnectorStatusInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.io.IOException; + +@RestController() +public class StationStatusController extends CoreDispatcher { + + @Resource + ConnectorStatusInfoRepository connectorStatusInfoRepository; + + @PostMapping("/v1/notification_stationStatus") + public CommonResponse notificationStationStatus(@RequestBody CommonRequest commonRequest) throws IOException { + + String operatorID = commonRequest.getOperatorId(); + StationInfo stationInfo = new StationInfo(); + stationInfo.setOperatorId(operatorID); + ConnectorStatusInfo connectorStatusInfo = commonRequest.anyDataType(ConnectorStatusInfo.class, "ConnectorStatusInfo"); + connectorStatusInfoRepository.save(connectorStatusInfo); + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + response.setData(JSONUtil.toJSONString(new Status(0))); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationsInfoController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationsInfoController.java new file mode 100644 index 00000000..8936efbc --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StationsInfoController.java @@ -0,0 +1,157 @@ +package com.xhpc.evcs.api; + +import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.evcs.domain.StationInfo; +import com.xhpc.evcs.domain.XhpcChargingPile; +import com.xhpc.evcs.domain.XhpcChargingStation; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.jpa.XhpcChargingPileRepository; +import com.xhpc.evcs.jpa.XhpcChargingStationRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; + +@Slf4j +@RestController +public class StationsInfoController extends CoreDispatcher { + + @Autowired + private XhpcChargingPileRepository xhpcChargingPileRepository; + @Autowired + private XhpcChargingStationRepository xhpcChargingStationRepository; + + @PostMapping("/v1/query_stations_info") + public CommonResponse queryStationsInfo(@RequestBody CommonRequest commonRequest) throws Exception { + + assert false; + String operatorId = commonRequest.getOperatorId(); + final PageRequest pageRequest = commonRequest.anyDataType(PageRequest.class); + List stations = new ArrayList<>(); + int pageCount = 1; + if (operatorId.equals("765367656")) { + List stationKeys = new ArrayList<>(REDIS.keys("station:*")); + final Integer pageSize = pageRequest.getPageSize(); + int fullpage = stationKeys.size() == 0 ? 0 : stationKeys.size() / pageSize; + final Integer pageNo = pageRequest.getPageNo(); + int plus = stationKeys.size() % pageSize; + assert (pageCount >= pageNo) : "too large pageNo"; + pageCount = fullpage + (plus == 0 ? 0 : 1); + if (pageCount >= pageNo) { + Integer lastOne = stationKeys.size() < pageNo * pageSize ? stationKeys.size() : pageNo * pageSize; + for (int i = ((pageNo - 1) * pageSize); i < lastOne; i++) { + final String stationKey = stationKeys.get(i); + ChargingStationDto chargingStationDto = REDIS.getCacheObject(stationKey); + if (chargingStationDto.getPiles() != null) { + StationInfo station = new StationInfo(); + station.setStationStatus(50L); + final String stationId = stationKey.replace("station:", ""); + station.setStationId(stationId); + Double lat = chargingStationDto.getLat(); + if (lat == null) { + XhpcChargingStation stationExample = new XhpcChargingStation(); + stationExample.setId(Long.parseLong(stationId)); + Example example = Example.of(stationExample); + XhpcChargingStation xhpcChargingStation = + xhpcChargingStationRepository.findOne(example).orElse(null); + if (null != xhpcChargingStation) { + chargingStationDto.setLat(Double.valueOf(xhpcChargingStation.getLatitude())); + chargingStationDto.setLng(Double.valueOf(xhpcChargingStation.getLongitude())); + chargingStationDto.setType(Long.valueOf(xhpcChargingStation.getType())); + chargingStationDto.setOperatorId(xhpcChargingStation.getOperatorIdEvcs() == null ? "MA6DFCTD5" + : xhpcChargingStation.getOperatorIdEvcs()); + chargingStationDto.setAreaCode(xhpcChargingStation.getAreaCode().toString()); + REDIS.setCacheObject(stationKey, chargingStationDto); + } + } + station.setStationLat(chargingStationDto.getLat()); + station.setStationLng(chargingStationDto.getLng()); + station.setStationType(chargingStationDto.getType()); + station.setOperatorId(chargingStationDto.getOperatorId()); + station.setEquipmentOwnerId(chargingStationDto.getOperatorId()); + station.setAreaCode(chargingStationDto.getAreaCode()); + station.setConstruction(chargingStationDto.getConstruction()); + List piles = getEquipmentInfos(chargingStationDto.getPiles()); + station.setEquipmentInfos(piles); + stations.add(station); + } + } + } + } + PageStationsInfoResponse response = new PageStationsInfoResponse(); + response.setItemSize(stations.size()); + response.setPageNo(pageRequest.getPageNo()); + response.setPageCount(pageCount); + response.setStationInfos(stations); + CommonResponse resp = new CommonResponse(); + resp.setRet("0"); + resp.setMsg("Query station info success"); + resp.setData(JSONUtil.toJSONString(response)); + return resp; + } + + private List getEquipmentInfos(Set pileNoSet) { + + List equipmentInfos = new ArrayList<>(); + for (String pileNo : pileNoSet) { + final Map cachePile = REDIS.getCacheMap("pile:".concat(pileNo)); + Integer connectorType = (Integer) cachePile.get("connectorType"); + if (connectorType == null) { + XhpcChargingPile pileExample = new XhpcChargingPile(); + pileExample.setSerialNumber(pileNo); + Example example = Example.of(pileExample); + XhpcChargingPile xhpcChargingPile = xhpcChargingPileRepository.findOne(example).orElse(null); + if (xhpcChargingPile != null) { + cachePile.put("connectorType", xhpcChargingPile.getType() == 1 ? Integer.valueOf(4) : Integer.valueOf(3)); + cachePile.put("voltageUpperLimits", xhpcChargingPile.getMaxVoltage().intValue()); + cachePile.put("voltageLowerLimits", xhpcChargingPile.getMinVoltage().intValue()); + cachePile.put("current", xhpcChargingPile.getCurrent()); + cachePile.put("power", xhpcChargingPile.getPower()); + cachePile.put("nationalStandard", xhpcChargingPile.getNationalStandard().equals("2011") ? + Integer.valueOf(1) : Integer.valueOf(2)); + cachePile.put("equipmentType", xhpcChargingPile.getType()); + REDIS.setCacheMap("pile:".concat(pileNo), cachePile); + } + } + EquipmentInfo equipmentInfo = new EquipmentInfo(); + equipmentInfo.setEquipmentID(pileNo); + equipmentInfo.setEquipmentType((Integer) cachePile.get("equipmentType")); + equipmentInfo.setPower((Double) cachePile.get("power")); + equipmentInfo.setConnectorInfos(getConnectorInfos(pileNo, cachePile)); + equipmentInfos.add(equipmentInfo); + } + return equipmentInfos; + } + + private List getConnectorInfos(String pileNo, Map cachePile) { + + List connectorInfos = new ArrayList<>(); + final Object gunNumCache = cachePile.get("gunNum"); + if (gunNumCache == null) return connectorInfos; + int gunNum = (int) gunNumCache; + for (int i = 1; i <= gunNum; i++) { + String gunId = pileNo.concat(String.format("%02d", i)); + ConnectorInfo connectorInfo = new ConnectorInfo(); + connectorInfo.setConnectorID(gunId); + connectorInfo.setConnectorType((Integer) cachePile.get("connectorType")); + connectorInfo.setVoltageUpperLimits((Integer) cachePile.get("voltageUpperLimits")); + connectorInfo.setVoltageLowerLimits((Integer) cachePile.get("voltageLowerLimits")); + connectorInfo.setCurrent((Integer) cachePile.get("current")); + connectorInfo.setPower((Double) cachePile.get("power")); + connectorInfo.setNationalStandard((Integer) cachePile.get("nationalStandard")); + connectorInfos.add(connectorInfo); + } + return connectorInfos; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StopChargeResultController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StopChargeResultController.java new file mode 100644 index 00000000..c36cac19 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/StopChargeResultController.java @@ -0,0 +1,47 @@ +package com.xhpc.evcs.api; + +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.NotificationStartStopChargeResultResponse; +import com.xhpc.evcs.dto.NotificationStopChargeResultRequestData; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.ChargeOrderInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +@Slf4j +@RestController() +public class StopChargeResultController extends CoreDispatcher { + + @Autowired + private ChargeOrderInfoRepository chargeOrderInfoRepository; + + @PostMapping("/v1/notification_stop_charge_result") + public CommonResponse notifyStartChargeResult(@RequestBody CommonRequest commonRequest) throws IOException { + + String data = commonRequest.getData(); + NotificationStopChargeResultRequestData stopChargeResultRequestData = JSONUtil.readParams(data, + NotificationStopChargeResultRequestData.class); + String startChargeSeq = stopChargeResultRequestData.getStartChargeSeq(); +// ChargeOrderInfo chargeOrderInfo = chargeOrderInfoRepository.findById(startChargeSeq).orElse(new ChargeOrderInfo() +// .setStartChargeSeqAndReturn(startChargeSeq)); +// chargeOrderInfo.setStartChargeSeqStat(stopChargeResultRequestData.getStartChargeSeqStat()); +// chargeOrderInfo.setFailReason(stopChargeResultRequestData.getFailReason()); +// chargeOrderInfoRepository.save(chargeOrderInfo); todo + CommonResponse response = new CommonResponse(); + response.setRet(EvcsConst.RET_SUCC); + NotificationStartStopChargeResultResponse resp = new NotificationStartStopChargeResultResponse(); + resp.setSuccStat(0); + resp.setFailReason(0); + resp.setStartChargeSeq(stopChargeResultRequestData.getStartChargeSeq()); + response.setData(JSONUtil.toJSONString(resp)); + return response; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/CDCoreDispatcher.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/CDCoreDispatcher.java new file mode 100644 index 00000000..f3c50071 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/CDCoreDispatcher.java @@ -0,0 +1,23 @@ +package com.xhpc.evcs.cd; + +import com.xhpc.evcs.api.CoreDispatcher; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; + +@Slf4j +public abstract class CDCoreDispatcher extends CoreDispatcher { + + @Value("${xhpc.evcs.cdevcs.srv.url}") + public String evcsSrvUrl; + + public String getEvcsSrvUrl() { + + return evcsSrvUrl; + } + + public void setEvcsSrvUrl(String evcsSrvUrl) { + + this.evcsSrvUrl = evcsSrvUrl; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationChargeOrderInfo4BonusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationChargeOrderInfo4BonusTask.java new file mode 100644 index 00000000..c507871d --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationChargeOrderInfo4BonusTask.java @@ -0,0 +1,100 @@ +package com.xhpc.evcs.cd; + +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.CDChargeOrderInfo4Bonus; +import com.xhpc.evcs.domain.EtOrderMapping; +import com.xhpc.evcs.domain.XhpcStatisticsTimeInterval; +import com.xhpc.evcs.dto.ChargeOrderInfoResponse; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.DTOJsonHelper; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.ChargeOrderInfoRepository; +import com.xhpc.evcs.jpa.EtOrderMappingRepository; +import com.xhpc.evcs.jpa.StatisticTimeIntervalRepository; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcHistoryOrder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.List; + +import static com.xhpc.evcs.cd.NotificationEquipChargeStatusTask.transferInternetOrderNo; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +@Component +public class NotificationChargeOrderInfo4BonusTask extends CDCoreDispatcher { + + @Autowired + private ChargeOrderInfoRepository chargeOrderInfoRepository; + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + @Autowired + private StatisticTimeIntervalRepository statisticTimeIntervalRepository; + @Autowired + private EtOrderMappingRepository etOrderMappingRepository; + private Logger logger = LoggerFactory.getLogger(NotificationChargeOrderInfo4BonusTask.class); + + @Scheduled(fixedRate = 1000 * 60) + public void run() throws IOException { + + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "765367656", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + // maybe对接第三方 + if (authSecretTokenOut != null) { + final List notYetPushOrder = + chargeOrderInfoRepository.findByHistoryOrderIdGreaterThanAndStateGreaterThanOrderByHistoryOrderIdAsc(authSecretTokenOut.getLastPushOrder(), 0); + for (XhpcHistoryOrder xhpcHistoryOrder : notYetPushOrder) { + List statisticTimeIntervalList = + statisticTimeIntervalRepository.findByHistoryOrderId(xhpcHistoryOrder.getHistoryOrderId()); + xhpcHistoryOrder.setXhpcStatisticsTimeIntervalList(statisticTimeIntervalList); + notify(xhpcHistoryOrder, authSecretTokenOut); + } + } + } + + public void notify(XhpcHistoryOrder xhpcHistoryOrder, AuthSecretToken authSecretTokenOut) throws IOException { + + String xhOrderNo = xhpcHistoryOrder.getSerialNumber(); + EtOrderMapping etOrderMapping = saveOrderMapping(xhOrderNo, etOrderMappingRepository); + CDChargeOrderInfo4Bonus cdChargeOrderInfo4Bonus = new CDChargeOrderInfo4Bonus(xhpcHistoryOrder, etOrderMapping); + String operatorIdEvcs = xhpcHistoryOrder.getOperatorIdEvcs(); + operatorIdEvcs = operatorIdEvcs == null ? "MA6DFCTD5" : operatorIdEvcs; + String data = JSONUtil.toJSONString(cdChargeOrderInfo4Bonus); + logger.debug(data); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setOperatorId(operatorIdEvcs); + commonRequest.setData(data); + String responseBody = ok(commonRequest, "/notification_charge_order_info_for_bonus", "765367656", operatorIdEvcs); + ChargeOrderInfoResponse chargeOrderInfoResponse = DTOJsonHelper.parseResponseData(responseBody, + ChargeOrderInfoResponse.class, authSecretTokenOut); + if (chargeOrderInfoResponse != null && chargeOrderInfoResponse.getConfirmResult() == 0) { + authSecretTokenOut.setLastPushOrder(xhpcHistoryOrder.getHistoryOrderId()); + authSecretTokenRepository.save(authSecretTokenOut); + } else { + throw new RuntimeException(String.format("push CD notification order[%s] failed: %s", + xhpcHistoryOrder.getSerialNumber(), responseBody)); + } + } + + static EtOrderMapping saveOrderMapping(String xhOrderNo, EtOrderMappingRepository etOrderMappingRepository) { + + EtOrderMapping om = new EtOrderMapping(); + om.setXhOrderNo(xhOrderNo); + Example example = Example.of(om); + EtOrderMapping etOrderMapping = etOrderMappingRepository.findOne(example).orElse(null); + if (etOrderMapping == null) { + etOrderMapping = new EtOrderMapping(); + etOrderMapping.setXhOrderNo(xhOrderNo); + etOrderMapping.setEvcsOrderNo(transferInternetOrderNo(xhOrderNo)); + etOrderMapping = etOrderMappingRepository.save(etOrderMapping); + } + return etOrderMapping; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationEquipChargeStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationEquipChargeStatusTask.java new file mode 100644 index 00000000..7b77f8eb --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationEquipChargeStatusTask.java @@ -0,0 +1,221 @@ +package com.xhpc.evcs.cd; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import com.xhpc.common.data.redis.CacheRateModel; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.CDChargeOrderInfo4Bonus; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.EtOrderMappingRepository; +import com.xhpc.evcs.jpa.StatisticTimeIntervalRepository; +import com.xhpc.evcs.utils.DateUtil; +import com.xhpc.evcs.utils.JSONUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; +import static com.xhpc.evcs.utils.DateUtil.DATE_FORMAT_DATE_TIME; + +@Component +public class NotificationEquipChargeStatusTask extends CDCoreDispatcher { + + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + @Autowired + private StatisticTimeIntervalRepository statisticTimeIntervalRepository; + @Autowired + private EtOrderMappingRepository etOrderMappingRepository; + + private Logger logger = LoggerFactory.getLogger(NotificationEquipChargeStatusTask.class); + + @Scheduled(fixedRate = 1000 * 50) + public void run() throws IOException { + + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "765367656", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + // maybe对接第三方 + if (authSecretTokenOut != null) { + final Collection gunkeys = REDIS.keys("gun:*"); + for (String gunkey : gunkeys) { + if (!gunkey.endsWith(".seqdec") && !gunkey.endsWith(".seqhex") && !gunkey.endsWith(".hori")) { + final Map cacheGun = REDIS.getCacheMap(gunkey); + final String status = cacheGun.get("status").toString(); + if (isInteger(status)) { + final String orderkey = cacheGun.get("orderkey").toString(); + CDEquipChargeStatusCDInfo equipChargeStatusCD = new CDEquipChargeStatusCDInfo(); + equipChargeStatusCD.setStartChargeSeq(transferInternetOrderNo(orderkey)); + equipChargeStatusCD.setStartChargeSeqStat(2); + equipChargeStatusCD.setConnectorID(orderkey.substring(6, 22)); + String current = REDIS.getCacheMapValue(gunkey, "current"); + equipChargeStatusCD.setCurrentA(Integer.parseInt(current == null ? "10" : current, 16) / 100.0); + String voltage = REDIS.getCacheMapValue(gunkey, "voltage"); + equipChargeStatusCD.setVoltageA(Integer.parseInt(voltage == null ? "300" : voltage, 16) / 100.0); + Double soc = REDIS.getCacheMapValue(gunkey, "endSoc"); + equipChargeStatusCD.setSoc(soc == null ? 0 : soc); + equipChargeStatusCD.setStartTime(cacheGun.get("orderstarttime").toString()); + equipChargeStatusCD.setEndTime(DateUtil.date2String(Calendar.getInstance().getTime(), + DATE_FORMAT_DATE_TIME)); + equipChargeStatusCD.setChargeModel(3); + equipChargeStatusCD.setTotalPower(REDIS.getCacheMapValue(orderkey, "totalPower")); + equipChargeStatusCD.setTotalMoney(REDIS.getCacheMapValue(orderkey, "totalMoney")); + final Long rateModelId = REDIS.getCacheMapValue(gunkey.replace("gun", "pile").substring(0, 19), + "rateModelId"); + final CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:" + rateModelId); + calculateEm(equipChargeStatusCD, cacheRateModel); + notify(equipChargeStatusCD, authSecretTokenOut); + String xhOrderNo = orderkey.substring(6); + NotificationChargeOrderInfo4BonusTask.saveOrderMapping(xhOrderNo, etOrderMappingRepository); + } + } + } + } + } + + public static String transferInternetOrderNo(String orderKeyOrNo) { + + return "MA6DFCTD5".concat(DateUtil.getYYYY()).concat(orderKeyOrNo.replace("order:", "").substring(18)); + } + + private void calculateEm(CDEquipChargeStatusCDInfo equipChargeStatusCD, CacheRateModel cacheRateModel) { + + final Date endTime = DateUtil.string2Date(equipChargeStatusCD.getEndTime()); + final Date startTime = DateUtil.string2Date(equipChargeStatusCD.getStartTime()); + long totalMilSec = endTime.getTime() - startTime.getTime(); + BigDecimal hours = new BigDecimal(totalMilSec).divide(new BigDecimal(3600000), 2, RoundingMode.HALF_UP); + BigDecimal minutes = new BigDecimal(totalMilSec).divide(new BigDecimal(60000), 2, RoundingMode.HALF_UP); + equipChargeStatusCD.setSumPeriod(hours.setScale(0, RoundingMode.CEILING).intValue()); + final Integer sumPeriod = equipChargeStatusCD.getSumPeriod(); + DateTime firstNDT = DateTime.of(startTime); + List chargeDetails = new ArrayList<>(); + Double firstNElecMoney = 0.0; + for (int i = 0; i < sumPeriod - 1; i++) { + ChargeDetails cd = new ChargeDetails(); + int firstSTHourOfDay = firstNDT.getField(DateField.HOUR_OF_DAY); + int tf = (firstSTHourOfDay + i) * 2; + final String rtf = cacheRateModel.getTfPricesSeq()[tf]; + BigDecimal timePeriodRatio = BigDecimal.valueOf(60).divide(minutes, 2, RoundingMode.HALF_UP); + BigDecimal tpPower = BigDecimal.valueOf(equipChargeStatusCD.getTotalPower()).multiply(timePeriodRatio); + calculateCD(equipChargeStatusCD, cacheRateModel, rtf, timePeriodRatio, tpPower, cd); + if (i == 0) { + cd.setDetailStartTime(equipChargeStatusCD.getStartTime()); + } else { + if (firstSTHourOfDay == 23) { + firstNDT.setField(DateField.DAY_OF_MONTH, firstNDT.getField(DateField.DAY_OF_MONTH) + 1); + firstNDT.setField(DateField.HOUR_OF_DAY, 0);//todo no, there are more to considered like day of month, + // month of year etc... + } else { + firstNDT.setField(DateField.HOUR_OF_DAY, firstSTHourOfDay + 1); + } + firstNDT.setField(DateField.MINUTE, 0); + firstNDT.setField(DateField.SECOND, 0); + cd.setDetailStartTime(firstNDT.toString(DATE_FORMAT_DATE_TIME)); + } + firstNElecMoney += cd.getDetailElecMoney(); + chargeDetails.add(cd); + } + DateTime lastDT = DateTime.of(endTime); + int tf = (lastDT.getField(DateField.HOUR_OF_DAY)) * 2; + final String rtf = cacheRateModel.getTfPricesSeq()[tf]; + BigDecimal timePeriodRatio = BigDecimal.valueOf(60).divide(minutes, 2, RoundingMode.HALF_UP); + BigDecimal tpPower = BigDecimal.valueOf(equipChargeStatusCD.getTotalPower()) + .multiply(timePeriodRatio).divide(BigDecimal.valueOf(100000), 2, RoundingMode.HALF_UP); + ChargeDetails cd = new ChargeDetails(); + calculateCD(equipChargeStatusCD, cacheRateModel, rtf, timePeriodRatio, tpPower, cd); + firstNElecMoney += cd.getDetailElecMoney(); + cd.setDetailStartTime(firstNDT.toString(DATE_FORMAT_DATE_TIME)); + chargeDetails.add(cd); + ChargeDetails[] cda = new ChargeDetails[chargeDetails.size()]; + equipChargeStatusCD.setChargeDetails(chargeDetails.toArray(cda)); + equipChargeStatusCD.setSumPeriod(sumPeriod); + equipChargeStatusCD.setElecMoney(firstNElecMoney); + equipChargeStatusCD.setSeviceMoney(equipChargeStatusCD.getTotalMoney() - firstNElecMoney); + } + + private void calculateCD(CDEquipChargeStatusCDInfo equipChargeStatusCD, CacheRateModel cacheRateModel, String rtf, + BigDecimal timePeriodRatio, BigDecimal tpPower, ChargeDetails cd) { + + cd.setDetailPower(tpPower.multiply(timePeriodRatio).doubleValue()); + Integer powerPrice; + Integer svcPrice; + if ("00".equals(rtf)) { + powerPrice = cacheRateModel.getT1Price(); + svcPrice = cacheRateModel.getT1SvcPrice(); + } else if ("01".equals(rtf)) { + powerPrice = cacheRateModel.getT2Price(); + svcPrice = cacheRateModel.getT2SvcPrice(); + } else if ("02".equals(rtf)) { + powerPrice = cacheRateModel.getT3Price(); + svcPrice = cacheRateModel.getT3SvcPrice(); + } else { + powerPrice = cacheRateModel.getT4Price(); + svcPrice = cacheRateModel.getT4SvcPrice(); + } + cd.setElecPrice((double) Math.round(powerPrice / 1000D) / 100D); + cd.setSevicePrice((double) Math.round(svcPrice / 1000D) / 100D); + cd.setDetailElecMoney(BigDecimal.valueOf(cd.getElecPrice()).multiply(BigDecimal.valueOf(cd.getDetailPower())).divide(BigDecimal.valueOf(10000), 2, + RoundingMode.HALF_UP).doubleValue()); + cd.setDetailSeviceMoney(BigDecimal.valueOf(cd.getSevicePrice()).multiply(BigDecimal.valueOf(cd.getDetailPower())).divide(BigDecimal.valueOf(10000), 2, + RoundingMode.HALF_UP).doubleValue()); + } + + public void notify(CDEquipChargeStatusCDInfo cdEquipChargeStatusCDInfo, AuthSecretToken authSecretTokenOut) throws IOException { + + String operatorIdEvcs = "MA6DFCTD5"; + String data = JSONUtil.toJSONString(cdEquipChargeStatusCDInfo); + logger.debug(data); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setOperatorId(operatorIdEvcs); + commonRequest.setData(data); + String responseBody = ok(commonRequest, "/notification_equip_charge_status", "765367656", operatorIdEvcs); + CDEquipmentChargeStatusResponse cdEquipmentChargeStatusResponse = DTOJsonHelper.parseResponseData(responseBody, + CDEquipmentChargeStatusResponse.class, authSecretTokenOut); + if (cdEquipmentChargeStatusResponse != null && cdEquipmentChargeStatusResponse.getSuccStat() != 0) { + throw new RuntimeException(String.format("push CD equipment order status [%s] failed: %s", + cdEquipChargeStatusCDInfo.getStartChargeSeq(), responseBody)); + } + } + + public static boolean isInteger(String str) { + + if (str == null) { + return false; + } + int length = str.length(); + if (length == 0) { + return false; + } + int i = 0; + if (str.charAt(0) == '-') { + if (length == 1) { + return false; + } + i = 1; + } + for (; i < length; i++) { + char c = str.charAt(i); + if (c < '0' || c > '9') { + return false; + } + } + return true; + } + + public static void main(String[] args) { + + DateTime dt = DateTime.now(); + System.out.println((double) Math.round(100111 / 100D) / 100D); + + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationStationStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationStationStatusTask.java new file mode 100644 index 00000000..524afc62 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cd/NotificationStationStatusTask.java @@ -0,0 +1,106 @@ +package com.xhpc.evcs.cd; + +import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import com.xhpc.evcs.dto.CDConnectorStatusInfo4BonusRequest; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.DTOJsonHelper; +import com.xhpc.evcs.dto.Status; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.utils.ChangePoleStatus; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.common.dto.ConnectorStatusInfo.*; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +@Component +public class NotificationStationStatusTask extends CDCoreDispatcher { + + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + + @Scheduled(fixedRate = 1000 * 15) + protected void run() throws IOException { + + Collection stationTerminalKeys = REDIS.keys("stationTerminalStatus:*"); + for (String stationTerminalKey : stationTerminalKeys) { + ChargingStationDto chargingStationDto = REDIS.getCacheObject(stationTerminalKey.replace("stationTerminalStatus", + "station")); //todo OperatorID + String operatorId = chargingStationDto.getOperatorId(); + operatorId = operatorId == null ? "MA6DFCTD5" : operatorId; + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "765367656", operatorId, SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + // maybe对接第三方 + if (authSecretTokenOut != null) { + Map terminalStatusMap = REDIS.getCacheMap(stationTerminalKey); + Set connectorStatusInfos = translateStatus(operatorId, terminalStatusMap); + if (!connectorStatusInfos.isEmpty()) { + Set changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos); + for (ConnectorStatusInfo statusInfo : changeStatus) { + notify(statusInfo, authSecretTokenOut); + } + } + } + } + } + + private Set translateStatus(String operatorId, Map terminalStatusMap) { + + Set connectorStatusInfoList = new HashSet<>(); + final Set connectorIds = terminalStatusMap.keySet(); + for (String gunId : connectorIds) { + ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); + connectorStatusInfo.setConnectorID(gunId); + connectorStatusInfo.setOperatorID(operatorId); + connectorStatusInfo.setStatus(translateStatus(terminalStatusMap.get(gunId))); + connectorStatusInfoList.add(connectorStatusInfo); + } + return connectorStatusInfoList; + } + + private Integer translateStatus(String statusStr) { + + switch (statusStr) { + case "空闲": + return FREE; + case "离线": + return OFF_LINE; + case "故障": + return ERROR; + default: + return CHARGING; + } + } + + public Status notify(ConnectorStatusInfo connectorStatusInfo, AuthSecretToken authSecretTokenOut) throws IOException { + + CDConnectorStatusInfo4BonusRequest statusInfo2CDRequest = new CDConnectorStatusInfo4BonusRequest(); + statusInfo2CDRequest.setConnectorStatusInfo(connectorStatusInfo); + String data = JSONUtil.toJSONString(statusInfo2CDRequest); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setOperatorId(connectorStatusInfo.getOperatorID()); + commonRequest.setData(data); + String responseBody = ok(commonRequest, "/notification_stationStatus", "765367656", + connectorStatusInfo.getOperatorID()); + Status status = DTOJsonHelper.parseResponseData(responseBody, Status.class, authSecretTokenOut); + if (status == null || status.getStatus() != 0) { + throw new RuntimeException(String.format("push CD notification connector[%s] failed: %s", + connectorStatusInfo.getConnectorID(), responseBody)); + } + //todo if token is invalid then retry? + return status; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java new file mode 100644 index 00000000..e3440c74 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java @@ -0,0 +1,313 @@ +package com.xhpc.evcs.config; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.encryption.Aes128Cbc; +import com.xhpc.evcs.encryption.HMAC; +import com.xhpc.evcs.http.HttpServletRequestRepeatReadWrapper; +import com.xhpc.evcs.http.HttpServletRequestWritableWrapper; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.OperatorInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ObjectUtils; +import org.springframework.web.filter.OncePerRequestFilter; +import org.springframework.web.util.ContentCachingResponseWrapper; + +import javax.annotation.Resource; +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Calendar; +import java.util.Date; +import java.util.Scanner; + +@SuppressWarnings({"Duplicates"}) //todo +@Slf4j +//@Component //spring boot way, see https://www.surasint.com/spring-boot-webfilter-instead-of-component/ +//@Order(1) not supported, see https://github.com/spring-projects/spring-boot/issues/8276 +@WebFilter(urlPatterns = {"/v1/*", "/v2/*"}, filterName = "v1n2filter") //multiple filters execute by filterName order +public class EvcsFilter extends OncePerRequestFilter { + + @Resource + private AuthSecretTokenRepository authSecretTokenRepository; + @Resource + private OperatorInfoRepository operatorInfoRepository; + @Value("${xhpc.evcs.encrypt:false}") + private boolean encrypt = false; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { + + if (!encrypt) { + chain.doFilter(request, response); + return; + } + + ServletRequest requestWrapper = new HttpServletRequestRepeatReadWrapper(request); + Scanner scanner = new Scanner(requestWrapper.getInputStream(), "UTF-8").useDelimiter("\\A"); + String bodyString = scanner.hasNext() ? scanner.next() : null; + log.debug("in.enc: {}", bodyString); + if (!ObjectUtils.isEmpty(bodyString)) { + String servletPath = request.getServletPath(); + log.debug("servletPath: " + servletPath); + CommonRequest commonRequest = JSONUtil.readParams(bodyString, CommonRequest.class); + String operatorId = commonRequest.getOperatorId(); + String authorization = request.getHeader("Authorization"); + AuthSecretToken authSecretTokenIn; + Date now = Calendar.getInstance().getTime(); + ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response); + if (authorization != null && authorization.startsWith("Bearer ")) { + String token = authorization.substring(7); + authSecretTokenIn = + authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenTypeAndTokenExpiryGreaterThan( + operatorId, AuthSecretToken.SECRET_TOKEN_TYPE_IN, now).orElse(null); + if (authSecretTokenIn == null || !token.equals(authSecretTokenIn.getToken())) { + CommonResponse resp = new CommonResponse(); + resp.setRet("4003"); + resp.setMsg("Invalid token"); + String data = JSONUtil.toJSONString(resp); + response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + responseWrapper = new ContentCachingResponseWrapper(response); + chain.doFilter(requestWrapper, responseWrapper); + return; + } + } else if (authorization == null) { //todo giv't better arrangement + final String encin = request.getHeader("enc.in"); + if (encin != null && encin.equals("false")) { + chain.doFilter(requestWrapper, response); + return; + } + if (servletPath.endsWith("/query_token")) { + authSecretTokenIn = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId, + AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null); + if (authSecretTokenIn == null) { + CommonResponse resp = new CommonResponse(); + resp.setRet("4003"); + resp.setMsg("Invalid OperatorID"); + String data = JSONUtil.toJSONString(resp); + response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + +// response.setStatus(403); + responseWrapper = new ContentCachingResponseWrapper(response); + chain.doFilter(requestWrapper, responseWrapper); + return; + } else { + final byte[] decrypt; + try { + decrypt = decrypt(request, authSecretTokenIn, commonRequest, bodyString); + } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) { + e.printStackTrace(); + CommonResponse resp = new CommonResponse(); + resp.setRet("4003"); + resp.setMsg("Invalid Encryption"); + String data = JSONUtil.toJSONString(resp); + response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + + chain.doFilter(requestWrapper, responseWrapper); + return; + } + ((HttpServletRequestRepeatReadWrapper) requestWrapper).setBody(decrypt); + chain.doFilter(requestWrapper, response); + return; + } + } + } + //decrypt request + byte[] decryptedData = null; + String erroMsg = "Decryption error"; + CommonResponse resp = new CommonResponse(); + authSecretTokenIn = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId, + AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null); + if (authSecretTokenIn != null + && now.before(authSecretTokenIn.getTokenExpiry()) + && authorization != null && authorization.substring(7).equals(authSecretTokenIn.getToken())) { + try { + decryptedData = decrypt(request, authSecretTokenIn, commonRequest, bodyString); + log.debug("in.dec: {}", new String(decryptedData)); + } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) { + erroMsg = e.getMessage(); + } + } else { + erroMsg = "Authorization error, check OperatorID or token expiry"; + } + if (decryptedData != null && decryptedData.length > 0) { + requestWrapper = new HttpServletRequestWritableWrapper(request, decryptedData); + } else { + resp.setRet("4004"); + resp.setMsg(erroMsg); + String data = JSONUtil.toJSONString(resp); + response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + chain.doFilter(requestWrapper, responseWrapper); + return; + } + + //encrypt response + final String encout = request.getHeader("enc.out"); +// if (requestWrapper == null) { +// chain.doFilter(request, responseWrapper); +// } else { + chain.doFilter(requestWrapper, responseWrapper); +// } + byte[] buf = responseWrapper.getContentAsByteArray(); + log.debug("out.plain: {}", new String(buf, StandardCharsets.UTF_8)); + String encryptedData; + AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId, + AuthSecretToken.SECRET_TOKEN_TYPE_OUT).orElse(null); + if (encout == null && authSecretTokenOut != null) { + encryptedData = encryptRespOut(authSecretTokenOut.getDataSecret(), authSecretTokenOut.getDataSecretIV(), + authSecretTokenOut.getSigSecret(), buf).toString(); + log.debug("out.enc: {}", encryptedData); + response.getOutputStream().write(encryptedData == null ? internalError() : + encryptedData.getBytes(StandardCharsets.UTF_8)); + } else if ("false".equals(encout)) { + response.getOutputStream().write(buf); + } else { + resp.setRet("4004"); + resp.setMsg("Encryption error"); + String data = JSONUtil.toJSONString(resp); + response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8)); + chain.doFilter(requestWrapper, responseWrapper); + } + } + } + + private byte[] internalError() { + + CommonResponse resp = new CommonResponse(); + resp.setData(""); + resp.setRet("1"); + resp.setMsg("Internal error."); + return resp.toString().getBytes(); + } + + public static String encryptReqOut(String dataSecret, String dataSecretIV, String sigSecret, CommonRequest commonRequest) + throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, + IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, JsonProcessingException { + + String data = Aes128Cbc.encrypt(commonRequest.getData(), dataSecret, dataSecretIV); + commonRequest.setData(data); + Calendar cal = Calendar.getInstance(); + DateTime dt = new DateTime(cal); + commonRequest.setTimeStamp(dt.toString(DatePattern.PURE_DATETIME_PATTERN)); + commonRequest.setSeq(String.valueOf(DateUtil.millisecond(dt))); + String sig = + HMAC.hmacDigest(commonRequest.getOperatorId() + data + commonRequest.getTimeStamp() + commonRequest.getSeq(), + sigSecret); + commonRequest.setSig(sig); + final String jsonString = JSONUtil.toJSONString(commonRequest); + log.debug("enc to out:{} ", jsonString); + return jsonString; + } + + public static JsonNode encryptRespOut(String dataSecret, String dataSecretIV, String sigSecret, byte[] buf) { + + JsonNode rootNode; + String data = null; + if (buf.length > 0) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + rootNode = objectMapper.readTree(buf); + JsonNode msg = rootNode.path("Msg"); + JsonNode ret = rootNode.path("Ret"); + if (msg.toString().equals("")) { + String retstring = ret.toString(); + if ("0".equals(retstring)) { + ((ObjectNode) rootNode).put("Msg", "Success"); + } else { + ((ObjectNode) rootNode).put("Msg", "Failure"); + } + } + JsonNode dataNode = rootNode.path("Data"); + String rawData = dataNode.toString(); + log.debug("out data: " + rawData); + data = Aes128Cbc.encrypt(rawData, dataSecret, dataSecretIV); + ((ObjectNode) rootNode).put("Data", data); + } catch (Exception e) { + rootNode = new ObjectNode(JsonNodeFactory.instance); + ((ObjectNode) rootNode).put("Msg", e.getMessage()); + } + } else { + rootNode = new ObjectNode(JsonNodeFactory.instance); + } + String sig = HMAC.hmacDigest(rootNode.path("Ret").asText() + rootNode.path("Msg").asText() + data, sigSecret); + ((ObjectNode) rootNode).put("Sig", sig); + log.debug("enc to out: " + rootNode); + return rootNode; + } + + private byte[] decrypt(HttpServletRequest request, AuthSecretToken authSecretToken, + CommonRequest commonRequest, String bodyString) throws IOException, BadPaddingException, + InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, + InvalidKeyException { + + byte[] buf = new byte[]{}; + if ("POST".equalsIgnoreCase(request.getMethod())) { + if (request.getServletPath().endsWith("/query_token")) { + String encryptedMsg = commonRequest.getData(); + String data = Aes128Cbc.decryptString(encryptedMsg, authSecretToken.getDataSecret(), authSecretToken + .getDataSecretIV()); + commonRequest.setData(data); + buf = data.getBytes(StandardCharsets.UTF_8); + } else { + String authorization = request.getHeader("Authorization"); + if (authorization != null && authorization.startsWith("Bearer ")) { + //decrypt Data field + buf = bodyString.getBytes(StandardCharsets.UTF_8); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode rootNode = objectMapper.readTree(buf); + JsonNode sigNode = rootNode.path("Sig"); + JsonNode operatorIDNode = rootNode.path("OperatorID"); + JsonNode dataNode = rootNode.path("Data"); + JsonNode timestampNode = rootNode.path("TimeStamp"); + JsonNode seqNode = rootNode.path("Seq"); + String computedSig = HMAC.hmacDigest( + operatorIDNode.asText().concat(dataNode.asText()).concat(timestampNode.asText()).concat(seqNode.asText()), + authSecretToken.getSigSecret()); + if (!computedSig.equals(sigNode.asText())) { + throw new InvalidAlgorithmParameterException("Illegal Sig, computed: ".concat(computedSig)); + } + if (!dataNode.isNull()) { + String rawData = dataNode.asText(); + if (rawData.startsWith("{")) { + ((ObjectNode) rootNode).put("Data", rawData); + } else { + String decryptedData = Aes128Cbc.decryptString(rawData, authSecretToken.getDataSecret(), + authSecretToken.getDataSecretIV()); + ((ObjectNode) rootNode).put("Data", decryptedData); + } + buf = rootNode.toString().getBytes(); + } + } + } + } + return buf; + } + + @Override + public void destroy() { + + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsInterceptor.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsInterceptor.java new file mode 100644 index 00000000..769225c5 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsInterceptor.java @@ -0,0 +1,54 @@ +package com.xhpc.evcs.config; + +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.http.HttpServletRequestRepeatReadWrapper; +import com.xhpc.evcs.jpa.OperatorInfoRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.ObjectUtils; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import javax.persistence.EntityNotFoundException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Scanner; + +@SuppressWarnings({"Duplicates"}) +@Slf4j +public class EvcsInterceptor implements HandlerInterceptor { + + @Resource + OperatorInfoRepository operatorInfoRepository; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { + + HttpServletRequest requestWrapper = new HttpServletRequestRepeatReadWrapper(request); + Scanner scanner = new Scanner(requestWrapper.getInputStream(), "UTF-8").useDelimiter("\\A"); + String bodyString = scanner.hasNext() ? scanner.next() : null; + if (!ObjectUtils.isEmpty(bodyString)) { + CommonRequest commonRequest = JSONUtil.readParams(bodyString, CommonRequest.class); + if (commonRequest != null) { + String operatorID = commonRequest.getOperatorId(); + operatorInfoRepository.findById(operatorID).orElseThrow(() -> new EntityNotFoundException("OperatorInfo" + + "::OperatorID[" + operatorID + "] not found.")); + } + } + return true; + } + + @Override + public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, + ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, + Exception e) throws Exception { + + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/InterceptorConfig.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/InterceptorConfig.java new file mode 100644 index 00000000..0ce14f49 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/InterceptorConfig.java @@ -0,0 +1,23 @@ +package com.xhpc.evcs.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +//@Configuration //using filter instead todo +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + + registry.addInterceptor(getEvcsInterceptor()).addPathPatterns("/v1/**"); + } + + @Bean + public HandlerInterceptor getEvcsInterceptor() { + + return new EvcsInterceptor(); + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/AuthSecretTokenRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/AuthSecretTokenRepository.java new file mode 100644 index 00000000..d092442b --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/AuthSecretTokenRepository.java @@ -0,0 +1,33 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.AuthSecretToken; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.Optional; + +@Repository +public interface AuthSecretTokenRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + + + Optional findByOperatorIdAndSecretTokenType(String operatorId, String secretTokenType); + + Optional findByOperatorId3irdptyAndSecretTokenTypeAndTokenExpiryGreaterThan(String operatorId, + String secretTokenType, + Date time); + + Optional findByOperatorId3irdptyAndOperatorIdAndSecretTokenType(String operatorId3irdpty, + String operatorID, + String secretTokenTypeIn); + + Optional findByOperatorId3irdptyAndSecretTokenTypeAndOperatorSecret(String operatorID3irdpty, + String secretTokenType, + String operatorSecret); + + Optional findByOperatorId3irdptyAndSecretTokenType(String operatorId, String secretTokenType); + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ChargeOrderInfoRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ChargeOrderInfoRepository.java new file mode 100644 index 00000000..b35edf20 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ChargeOrderInfoRepository.java @@ -0,0 +1,17 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.order.domain.XhpcHistoryOrder; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ChargeOrderInfoRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + + List findByHistoryOrderIdGreaterThanAndStateGreaterThanOrderByHistoryOrderIdAsc(Long hisOrderId, int i); + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ConnectorStatusInfoRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ConnectorStatusInfoRepository.java new file mode 100644 index 00000000..489acdfe --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/ConnectorStatusInfoRepository.java @@ -0,0 +1,12 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.ConnectorStatusInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface ConnectorStatusInfoRepository extends JpaRepository, + QueryByExampleExecutor { + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/EtOrderMappingRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/EtOrderMappingRepository.java new file mode 100644 index 00000000..5b836b25 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/EtOrderMappingRepository.java @@ -0,0 +1,14 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.EtOrderMapping; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface EtOrderMappingRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/OperatorInfoRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/OperatorInfoRepository.java new file mode 100644 index 00000000..57944410 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/OperatorInfoRepository.java @@ -0,0 +1,19 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.OperatorInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface OperatorInfoRepository extends JpaRepository, QueryByExampleExecutor, + JpaSpecificationExecutor { + + List findByOperatorRegAddressLike(String host); + + List findByOperatorId(String operatorId); + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/StatisticTimeIntervalRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/StatisticTimeIntervalRepository.java new file mode 100644 index 00000000..a23ab615 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/StatisticTimeIntervalRepository.java @@ -0,0 +1,17 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.XhpcStatisticsTimeInterval; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface StatisticTimeIntervalRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + + List findByHistoryOrderId(Long historyOrderId); + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingPileRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingPileRepository.java new file mode 100644 index 00000000..40abb93f --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingPileRepository.java @@ -0,0 +1,13 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.XhpcChargingPile; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface XhpcChargingPileRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingStationRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingStationRepository.java new file mode 100644 index 00000000..df5ea062 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcChargingStationRepository.java @@ -0,0 +1,13 @@ +package com.xhpc.evcs.jpa; + +import com.xhpc.evcs.domain.XhpcChargingStation; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface XhpcChargingStationRepository extends JpaRepository, + QueryByExampleExecutor, JpaSpecificationExecutor { + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java new file mode 100644 index 00000000..d2f739ab --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java @@ -0,0 +1,47 @@ +package com.xhpc.evcs.utils; + +import com.xhpc.evcs.domain.ConnectorStatusInfo; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 该全局类用于缓存上一次定时的数据 + */ +public class ChangePoleStatus { + + public static Map temp = new HashMap<>(); + + public static Set getChangeStatus(Set freshInfoList) { + + if (temp.isEmpty()) { + temp = transfer(freshInfoList); + return freshInfoList; + } else { + Set changeStatus = new HashSet<>(); + for (ConnectorStatusInfo newInfo : freshInfoList) { + if (temp.get(newInfo.getConnectorID()) == null || !temp.get(newInfo.getConnectorID()).equals(newInfo.getStatus())) { + ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); + connectorStatusInfo.setConnectorID(newInfo.getConnectorID()); + connectorStatusInfo.setStatus(newInfo.getStatus()); + connectorStatusInfo.setOperatorID(newInfo.getOperatorID()); + changeStatus.add(connectorStatusInfo); + } + } + temp.putAll(transfer(freshInfoList)); + return changeStatus; + } + } + + private static Map transfer(Set connectorStatusInfoSet) { + + Map tMap = new HashMap<>(); + for (ConnectorStatusInfo info : connectorStatusInfoSet) { + tMap.put(info.getConnectorID(), info.getStatus()); + } + return tMap; + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/DateUtil.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/DateUtil.java new file mode 100644 index 00000000..63ac4610 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/DateUtil.java @@ -0,0 +1,496 @@ +package com.xhpc.evcs.utils; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; + +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +import static com.xhpc.evcs.cd.NotificationEquipChargeStatusTask.transferInternetOrderNo; + +public class DateUtil { + + public static final String DEFAULT_DATE_FORMAT = "yyyyMMddHHmmss"; + + public static final String DATE_FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss"; + + public static final String DATE_FORMAT_MONTH_TIME = "MM-dd HH:mm"; + + public static final String YEAR_MONTH_DAY = "yyyy-MM-dd"; + + /** + * convert string(such as: 2003-11-26) to Date + * + * @param dateStr string format of date + * @return + */ + public static final Date string2Date(String dateStr) { + + return string2Date(dateStr + " 00:00:00", DATE_FORMAT_DATE_TIME); + } + + /** + * string to date, the format is same to SimpleDateFormat for example + * "yyyyMMdd" "yyyy-MM-dd HH:mm:ss" etc please see + * java.text.SimpleDateFormat + * + * @param dateStr + * @param format + * @return + */ + public static final Date string2Date(String dateStr, String format) { + + if (dateStr == null || dateStr.length() == 0) + return null; + DateFormat df = new SimpleDateFormat(format); + try { + return df.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将long型字符串转换成时间格式 + * + * @param dateTime + * @return + */ + public static final String longStr2Date(String dateTime) { + + if (dateTime == null || dateTime.length() == 0) + return null; + Date date = new Date(Long.parseLong(dateTime)); + + return date2String(date, DATE_FORMAT_DATE_TIME); + } + + /** + * convert date to string according to default format + * + * @param date + * @return + */ + public static final String date2String(Date date) { + + return date2String(date, DEFAULT_DATE_FORMAT); + } + + /** + * convert date to string, and the format is same to SimpleDateFormat for + * example "yyyyMMdd" "yyyy-MM-dd HH:mm" etc please see + * java.text.SimpleDateFormat + * + * @param date + * @param format + * @return + */ + public static final String date2String(Date date, String format) { + + if (date == null) { + return ""; + } + DateFormat df = new SimpleDateFormat(format); + return df.format(date); + } + + + /** + * date 2006-04-10 author :zhaopeng + */ + private static SimpleDateFormat sf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + public static Date getWeek(Date date) { + + Calendar c = getCalendar(date); + +// int m = c.get(Calendar.DAY_OF_WEEK); +// if (m - 1 == 0) { +// c.add(Calendar.DAY_OF_WEEK, -6); +// } else { +// c.add(Calendar.DAY_OF_WEEK, -(m - 2)); +// } + c.add(Calendar.DAY_OF_WEEK, -Calendar.DAY_OF_WEEK); + sf.format(c.getTime()); + return c.getTime(); + + } + + public static Date getMonth(Date date) { + + Calendar c = getCalendar(date); + int m = c.get(Calendar.DAY_OF_MONTH); + + c.add(Calendar.DAY_OF_MONTH, -(m - 1)); + return c.getTime(); + } + + public static void getMailConsole() { + + } + + public static Date getMonth(Date date, int num) { + + Calendar c = getCalendar(date); + c.add(Calendar.MONTH, -num); + return c.getTime(); + } + + public static Date getYear(Date date) { + + Calendar c = getCalendar(date); + c.add(Calendar.YEAR, -1); + return c.getTime(); + } + + /** + * add by cjh convert date to string, and the format is same to + * SimpleDateFormat for example "yyyyMMdd" "yyyy-MM-dd HH:mm" etc please see + * java.text.SimpleDateFormat + * + * @param date + * @param format + * @return + */ + public static final String date2ChineseString(Date date) { + + if (date == null) { + return ""; + } + DateFormat df = new SimpleDateFormat("yyyy年M月d日"); + String str = df.format(date); + int yearBorder = str.indexOf("年"); + int monthBorder = str.indexOf("月"); + int dayBorder = str.indexOf("日"); + return getChineseDate(str.substring(0, 1)) + + getChineseDate(str.substring(1, 2)) + + getChineseDate(str.substring(2, 3)) + + getChineseDate(str.substring(3, 4)) + '年' + + getChineseDate(str.substring(yearBorder + 1, monthBorder)) + + '月' + + getChineseDate(str.substring(monthBorder + 1, dayBorder)) + + '日'; + } + + /** + * add by cjh �������� + * + * @param date + * @return + */ + public static String getChineseDate(String date) { + + StringBuffer sb = new StringBuffer(); + if (date.length() == 2) { + String ten = date.substring(0, 1); // ʮλ + String entries = date.substring(1, 2); // ��λ + if (ten.substring(0).equals("1")) { + sb.append("ʮ"); + } + if (ten.substring(0).equals("2")) { + sb.append("��ʮ"); + } + if (ten.substring(0).equals("3")) { + sb.append("��ʮ"); + } + if (!entries.equals("0")) { + sb.append(number2Chinese(entries)); + } + } else { + String entries = date.substring(0); + sb.append(number2Chinese(entries)); + } + return sb.toString(); + } + + /** + * add by cjh ����ת���� + * + * @param number + * @return + */ + public static String number2Chinese(String number) { + + char[] numberChars = number.toCharArray(); + switch (numberChars[0]) { + case '0': + return "零"; + case '1': + return "一"; + case '2': + return "二"; + case '3': + return "三"; + case '4': + return "四"; + case '5': + return "五"; + case '6': + return "六"; + case '7': + return "七"; + case '8': + return "八"; + case '9': + return "九"; + default: + return ""; + } + } + + /** + * Returns natural days between beginDate and endDate. Positive number if + * beginDate before c2, negative if beginDate after endDate, 0 if beginDate + * and endDate represent the same day. + * + * @param beginDate the begin date + * @param endDate the end date + * @return natural days between begin date and end date + */ + + public static BigDecimal dateToExcel(Date date) { + + Date endDate = DateUtil.string2Date("1900-01-00 00:00", "yyyy-MM-dd HH:mm"); + int days = naturalDaysBetween(endDate, date); + + return new BigDecimal(days).add(timeToExcel(date)); + } + + public static BigDecimal timeToExcel(Date date) { + + Calendar c1 = getCalendar(date); + + int hour = c1.get(Calendar.HOUR_OF_DAY); + int min = c1.get(Calendar.MINUTE); + int sec = c1.get(Calendar.SECOND); + System.out.print(new BigDecimal(hour * 3600 + min * 60 + sec).divide(new BigDecimal(86400), 10, + BigDecimal.ROUND_HALF_UP).setScale(10, BigDecimal.ROUND_HALF_UP)); + return new BigDecimal(hour * 3600 + min * 60 + sec).divide(new BigDecimal(86400), 10, BigDecimal.ROUND_HALF_UP).setScale(10, BigDecimal.ROUND_HALF_UP); + } + + + public static int naturalDaysBetween(Date beginDate, Date endDate) { + + long msPerDay = 1000 * 60 * 60 * 24; + Calendar c1 = getCalendar(beginDate); + Calendar c2 = getCalendar(endDate); + long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis(); + int days = (int) (msDiff / msPerDay); + int msResidue = (int) (msDiff % msPerDay); + Calendar c3 = Calendar.getInstance(); + c3.setTimeInMillis(c2.getTimeInMillis() - msResidue); + Calendar c4 = (Calendar) c2.clone(); + c4.add(Calendar.DAY_OF_MONTH, -1); + if (c3.get(Calendar.DAY_OF_MONTH) == c4.get(Calendar.DAY_OF_MONTH)) + days++; + else { + c4.add(Calendar.DAY_OF_MONTH, 2); + if (c3.get(Calendar.DAY_OF_MONTH) == c4.get(Calendar.DAY_OF_MONTH)) + days--; + } + return days; + } + + /** + * Returns natural days,hours and minutes between beginDate and endDate. + * + * @param beginDate the begin date + * @param endDate the end date + * @return int[]:[0]:days;[1]:hours;[2]:minutes + * @author johnny 2007-1-31 + */ + + + public static int[] naturalDHMBetween(Date beginDate, Date endDate) { + + int[] dhm = new int[3]; + if (beginDate == null || endDate == null) + return dhm; + long intervalSecond, leftSecond; + intervalSecond = leftSecond = (endDate.getTime() - beginDate.getTime()) / 1000; + dhm[0] = (int) intervalSecond / (60 * 60 * 24); + leftSecond = leftSecond - dhm[0] * 60 * 60 * 24; + dhm[1] = (int) leftSecond / (60 * 60); + leftSecond = leftSecond - dhm[1] * 60 * 60; + dhm[2] = (int) leftSecond / 60; + return dhm; + } + + public static Calendar getCalendar(Date date) { + + Calendar c = Calendar.getInstance(); + c.setTime(date); + return c; + } + + public static Date earliestOfDate(Date date) { + + Calendar c = getCalendar(date); + c.set(Calendar.HOUR, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + return c.getTime(); + } + + public static Date latestOfDate(Date date) { + + Calendar c = getCalendar(date); + c.set(Calendar.HOUR, 23); + c.set(Calendar.MINUTE, 59); + c.set(Calendar.SECOND, 59); + c.set(Calendar.MILLISECOND, 999); + return c.getTime(); + } + + public static int getHourOfDate(Date date) { + + Calendar c = getCalendar(date); + return c.get(Calendar.HOUR); + } + + public static boolean isFirstDayOfMonth(Date date) { + + Calendar c = getCalendar(date); + return c.get(Calendar.DATE) == 1; + } + + /** + * Ϊָ���������ָ����ݡ��·ݺ�������µ����� + */ + public static Date addDate(Date date, int year, int month, int day) { + + Calendar c = getCalendar(date); + c.add(Calendar.YEAR, year); + c.add(Calendar.MONTH, month); + c.add(Calendar.DATE, day); + return c.getTime(); + } + + /** + * Ϊָ���������ָ��Сʱ�����ӡ���ͺ��룬�����µ����� + */ + public static Date addTime(Date date, int hour, int minute, int second, + int millisecond) { + + Calendar c = getCalendar(date); + c.add(Calendar.HOUR_OF_DAY, hour); + c.add(Calendar.MINUTE, minute); + c.add(Calendar.SECOND, second); + c.add(Calendar.MILLISECOND, millisecond); + return c.getTime(); + } + + public static Date addDay(Date date, int days) { + + Calendar c = getCalendar(date); + c.add(Calendar.DATE, days); + return c.getTime(); + } + + public static Date getPreviousDate(Date date) { + + return addDay(date, -1); + } + + public static boolean isTheSameDay(Date date1, Date date2) { + + String value1 = date2String(date1, DEFAULT_DATE_FORMAT); + String value2 = date2String(date2, DEFAULT_DATE_FORMAT); + return value1 != null && value1.equals(value2); + } + + /** + * 判断是否为周末 + * + * @param date + * @return + */ + public static boolean isWeekend(Date date) { + + Calendar c = getCalendar(date); + int day = c.get(Calendar.DAY_OF_WEEK); + + return day == 1 || day == 7; + } + + public static String week(Date date) { + + Calendar c = getCalendar(date); + int day = c.get(Calendar.DAY_OF_WEEK); + + String week = ""; + switch (day) { + case 1: + week = "周日"; + break; + + case 2: + week = "周一"; + break; + + case 3: + week = "周二"; + break; + + case 4: + week = "周三"; + break; + + case 5: + week = "周四"; + break; + + case 6: + week = "周五"; + break; + + case 7: + week = "周六"; + break; + } + + return week; + } + + public static String getNowDateStr() { + + Calendar now = Calendar.getInstance(); + int year = now.get(Calendar.YEAR); + int month = now.get(Calendar.MONTH) + 1; + int day = now.get(Calendar.DAY_OF_MONTH); + String dayNames[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + int dayOfWeek = now.get(Calendar.DAY_OF_WEEK) - 1; + if (dayOfWeek < 0) dayOfWeek = 0; + String week = dayNames[dayOfWeek]; + String nowDateStr = year + "年" + month + "月" + day + "日 " + week; + + return nowDateStr; + + } + + public static String getYYYY() { + + return String.valueOf(DateTime.now().getField(DateField.YEAR)); + } + + public static void main(String[] args) { + + System.out.println(transferInternetOrderNo("order:69852145896548012109281708240063")); + DateUtil.isWeekend(new Date()); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-08", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-09", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-10", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-11", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-12", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-13", "yyyy-MM-dd")); + DateUtil.isWeekend(DateUtil.string2Date("2016-06-14", "yyyy-MM-dd")); + } + +} diff --git a/evcs-modules/evcs-core/src/main/resources/bootstrap.yml b/evcs-modules/evcs-core/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..1cd5322f --- /dev/null +++ b/evcs-modules/evcs-core/src/main/resources/bootstrap.yml @@ -0,0 +1,25 @@ +# Tomcat +server: + port: 9009 + +# Spring +spring: + application: + # 应用名称 + name: evcs + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 127.0.0.1:8848 + config: + # 配置中心地址 + server-addr: 127.0.0.1:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/evcs-modules/evcs-core/src/main/resources/logback.xml b/evcs-modules/evcs-core/src/main/resources/logback.xml new file mode 100644 index 00000000..6bce5447 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/resources/logback.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + + + diff --git a/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/AuthSecretTokenSecretTest.java b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/AuthSecretTokenSecretTest.java new file mode 100644 index 00000000..f043e77c --- /dev/null +++ b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/AuthSecretTokenSecretTest.java @@ -0,0 +1,25 @@ +package com.xhpc.evcs; + +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; + +import javax.annotation.Resource; + +@SpringBootTest +public class AuthSecretTokenSecretTest { + + @Resource + private AuthSecretTokenRepository authSecretTokenRepository; + + @Test + @Rollback(false) + public void save() { + + AuthSecretToken authSecretToken = new AuthSecretToken(); + authSecretTokenRepository.save(authSecretToken); + } + +} diff --git a/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/MyTestConfiguration.java b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/MyTestConfiguration.java new file mode 100644 index 00000000..d754c6f1 --- /dev/null +++ b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/MyTestConfiguration.java @@ -0,0 +1,18 @@ +package com.xhpc.evcs; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +@TestConfiguration +public class MyTestConfiguration { + + //tests specific beans + @Bean + DataSource createDataSource() { + // + return null; + } + +} diff --git a/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/OrderMappingTest.java b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/OrderMappingTest.java new file mode 100644 index 00000000..b425a497 --- /dev/null +++ b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/OrderMappingTest.java @@ -0,0 +1,27 @@ +package com.xhpc.evcs; + +import com.xhpc.evcs.domain.EtOrderMapping; +import com.xhpc.evcs.jpa.EtOrderMappingRepository; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; + +import javax.annotation.Resource; + +@SpringBootTest +public class OrderMappingTest { + + @Resource + private EtOrderMappingRepository etOrderMappingRepository; + + @Test + @Rollback(false) + public void save() { + + EtOrderMapping o = new EtOrderMapping(); + o.setXhOrderNo("123"); + o.setEvcsOrderNo("123"); + etOrderMappingRepository.save(o); + } + +} diff --git a/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/SpringBootDemoApplicationTests.java b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/SpringBootDemoApplicationTests.java new file mode 100644 index 00000000..39d5c15b --- /dev/null +++ b/evcs-modules/evcs-core/src/test/java/com/xhpc/evcs/SpringBootDemoApplicationTests.java @@ -0,0 +1,21 @@ +package com.xhpc.evcs; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.context.annotation.Import; + +import javax.sql.DataSource; + +@Import(MyTestConfiguration.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class SpringBootDemoApplicationTests { + + @LocalServerPort + int randomServerPort; + + @Autowired + DataSource datasource; + + //tests +} diff --git a/evcs-modules/evcs-core/src/test/resources/application.properties b/evcs-modules/evcs-core/src/test/resources/application.properties new file mode 100644 index 00000000..c1dc5c93 --- /dev/null +++ b/evcs-modules/evcs-core/src/test/resources/application.properties @@ -0,0 +1,18 @@ +server.port=9009 +#xhpc.evcs.encrypt=false +xhpc.evcs.encrypt=true +spring.jpa.show-sql=true +#spring.jpa.hibernate.ddl-auto=update +spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect +spring.datasource.url=jdbc:mysql://118.24.137.203:3306/ry-cloud?useUnicode=true&characterEncoding=utf-8 +spring.datasource.username=ry-cloud +spring.datasource.password=Xiaohua123 +spring.datasource.driverClassName=com.mysql.jdbc.Driver +spring.jackson.serialization.indent_output=true +spring.flyway.check-location=false +spring.flyway.locations=filesystem:../../../../db/migration +spring.output.ansi.enabled=detect +##logging.level.root=debug +##logging.level.org.org.springframework.web=info +#logging.level.com.xhpc=info +logging.pattern.console=%magenta(%d{yyyy-MM-dd HH:mm:ss}) [%green(%thread)] %highlight(%-5level) - %msg %cyan(%class{36}.%M %L%n) diff --git a/evcs-modules/pom.xml b/evcs-modules/pom.xml new file mode 100644 index 00000000..76934297 --- /dev/null +++ b/evcs-modules/pom.xml @@ -0,0 +1,202 @@ + + + com.ruoyi + ruoyi + 3.0.0 + + + 4.0.0 + com.xhpc + evcs-modules + pom + + + evcs-core + evcs-common + + + + 行业交换信息(EVCS)业务模块 + + + + UTF-8 + UTF-8 + 1.8 + 2.5.1 + 2020.0.3 + 2021.1 + 2.0.2 + 2.4.1 + 3.0.0 + 1.6.2 + 1.26.5 + 2.3.2 + 1.3.1 + 1.2.6 + 3.4.0 + 2.10.0 + 1.4 + 1.7 + 1.2.76 + 8.2.1 + 4.1.2 + 2.6.2 + 3.2.2 + 4.15.14.ALL + 1.9.3 + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + com.alibaba.nacos + nacos-client + ${alibaba.nacos.version} + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + io.swagger + swagger-models + ${swagger.core.version} + + + io.swagger + swagger-annotations + ${swagger.core.version} + + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.velocity + velocity + ${velocity.version} + + + commons-collections + commons-collections + + + + + + + commons-collections + commons-collections + ${commons-collections.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + org.apache.commons + commons-pool2 + ${common-pool.version} + + + + commons-beanutils + commons-beanutils + ${commons-beanutils.sdk} + + + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/XhpcChargingPileMapper.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/XhpcChargingPileMapper.java index 9593ea0c..2774019c 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/XhpcChargingPileMapper.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/XhpcChargingPileMapper.java @@ -89,17 +89,11 @@ public interface XhpcChargingPileMapper { int updateXhpcTerminal(@Param("chargingPileId") Long chargingPileId); /** - * 统计场站的桩的数量 + * 统计改场站的终端 + * * @param chargingStationId * @return */ int countXhpcTerminal(@Param("chargingStationId") Long chargingStationId); - /** - * 对应场站的终端数量 - * @param chargingStationId - * @return - */ - int pileCount(@Param("chargingStationId") Long chargingStationId); - } diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingPileServiceImpl.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingPileServiceImpl.java index c457dec9..9150a16f 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingPileServiceImpl.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingPileServiceImpl.java @@ -198,7 +198,7 @@ public class XhpcChargingPileServiceImpl implements IXhpcChargingPileService { if (i > 0) { //删除桩 Set set = new HashSet<>(); - set.add(xhpc.getSerialNumber()); + set.add(chargingPileId + ""); powerPileService.deletePileWhitelist(xhpc.getChargingStationId(), set); return 1; } diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java index 19a1b7b8..aa04c77a 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java @@ -1,9 +1,7 @@ package com.xhpc.charging.station.service; -import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; -import com.xhpc.charging.station.mapper.XhpcChargingPileMapper; import com.xhpc.charging.station.mapper.XhpcChargingStationMapper; import com.xhpc.common.api.PowerPileService; import com.xhpc.common.api.dto.XhpcChargingStationDto; @@ -13,7 +11,10 @@ import com.xhpc.common.core.domain.R; import com.xhpc.common.core.utils.DateUtils; import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.common.data.redis.CacheRateModel; -import com.xhpc.common.domain.*; +import com.xhpc.common.domain.XhpcChargingStation; +import com.xhpc.common.domain.XhpcRate; +import com.xhpc.common.domain.XhpcRateModel; +import com.xhpc.common.domain.XhpcRateTime; import com.xhpc.common.redis.service.RedisService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,8 +47,6 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi private PowerPileService powerPileService; @Autowired private RedisService redisService; - @Autowired - private XhpcChargingPileMapper xhpcChargingPileMapper; private static final Logger logger = LoggerFactory.getLogger(XhpcChargingStationServiceImpl.class); /** @@ -139,18 +138,10 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi @Override public int updateXhpcChargingStationById(Long chargingStationId) { - int count = xhpcChargingPileMapper.pileCount(chargingStationId); - if (count>0){ - throw new RuntimeException("该场站下面还有桩,不能删除"); - } - int i = xhpcChargingStationMapper.updateXhpcChargingStationById(chargingStationId); if (i > 0) { extracted(1, chargingStationId); - //删除redis中的缓存数据 - redisService.deleteObject("station:"+chargingStationId); } - return i; } diff --git a/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingPileMapper.xml b/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingPileMapper.xml index 8a5dbb08..220cd49f 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingPileMapper.xml +++ b/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingPileMapper.xml @@ -397,8 +397,4 @@ - - diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java index 70eb9d1e..0de02dd4 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java @@ -261,18 +261,18 @@ public class XhpcPileOrderController extends BaseController { } if(!"0".equals(cacheOrderData.getT2PowerQuantity().toString())){ BigDecimal multiply = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2powerFee); - totalPower =totalPower+cacheOrderData.getT2PowerQuantity(); - powerPrice=powerPrice.add(multiply); + totalPower = totalPower + cacheOrderData.getT1PowerQuantity(); + powerPrice = powerPrice.add(multiply); } if(!"0".equals(cacheOrderData.getT3PowerQuantity().toString())){ BigDecimal multiply = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3powerFee); - totalPower =totalPower+cacheOrderData.getT3PowerQuantity(); - powerPrice=powerPrice.add(multiply); + totalPower = totalPower + cacheOrderData.getT1PowerQuantity(); + powerPrice = powerPrice.add(multiply); } if(!"0".equals(cacheOrderData.getT4PowerQuantity().toString())){ BigDecimal multiply = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4powerFee); - totalPower =totalPower+cacheOrderData.getT4PowerQuantity(); - powerPrice=powerPrice.add(multiply); + totalPower = totalPower + cacheOrderData.getT1PowerQuantity(); + powerPrice = powerPrice.add(multiply); } //总服务费 BigDecimal servicePrice = money.subtract(powerPrice); @@ -334,7 +334,7 @@ public class XhpcPileOrderController extends BaseController { xhpcHistoryOrder.setPowerPriceTotal(powerPrice); xhpcHistoryOrder.setServicePriceTotal(servicePrice); - xhpcHistoryOrder.setTotalPower(totalPower.doubleValue()/10000); + xhpcHistoryOrder.setTotalPower(totalPower.doubleValue() / 1000); xhpcHistoryOrder.setMeterValueStartEvcs(cacheOrderData.getElectricMeterStart().doubleValue()); xhpcHistoryOrder.setMeterValueEndEvcs(cacheOrderData.getElectricMeterEnd().doubleValue()); Map userMessage = xhpcChargeOrderService.getUserMessage(userId); @@ -347,7 +347,8 @@ public class XhpcPileOrderController extends BaseController { R.ok(); } //结算 - xhpcRealTimeOrderService.addSettlement(powerPrice,servicePrice,money,surplusPowerPrice,surplusServicePrice,xhpcChargeOrder,userId,userMessage,1,cacheOrderData.getVinNormal(),xhpcHistoryOrder); + xhpcRealTimeOrderService.addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, + xhpcChargeOrder, userId, userMessage, 1, cacheOrderData.getVinNormal()); Map map = new HashMap<>(); map.put("code", 500); map.put("userId", userId); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java index c47a9576..272fbc4e 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java @@ -10,12 +10,10 @@ import com.xhpc.order.domain.XhpcHistoryOrder; import com.xhpc.order.domain.XhpcStatisticsStation; import com.xhpc.order.domain.XhpcStatisticsTimeInterval; import com.xhpc.order.dto.XhpcChargeHistoryOrder; -import com.xhpc.order.service.IXhpcChargeOrderService; import com.xhpc.order.service.IXhpcHistoryOrderService; import com.xhpc.order.service.IXhpcStatisticsService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -76,30 +74,76 @@ public class XhpcHistoryOrderController extends BaseController { * 终端统计 */ @GetMapping("/test3") - @Scheduled(cron = "0 0 12 * * ?") - public void test3(){ - add(100,3); + public void test3() { + + add(500, 3); } + /** * 场站统计 */ @GetMapping("/test2") - @Scheduled(cron = "0 0 11 * * ?") - public void test2(){ - add(100,2); + public void test2() { + + add(500, 2); } + + public void add(int number, int type) { + //获取500条待统计历史订单 + List list = xhpcHistoryOrderService.getStatistisList(number, type); + //场站、运营商、流量方 + if (list != null && list.size() > 0) { + for (XhpcChargeHistoryOrder xhpc : list) { + XhpcStatisticsStation xhpcSt = new XhpcStatisticsStation(); + xhpcSt.setChargingDegree(xhpc.getChargingDegree()); + BigDecimal decimal = new BigDecimal(xhpc.getChargingTimeNumber() / 3600).setScale(2, RoundingMode.HALF_UP); + xhpcSt.setChargingTime(decimal); + xhpcSt.setChargingNumber(1); + xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); + xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); + xhpcSt.setTotalPrice(xhpc.getTotalPrice()); + xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount()); + xhpcSt.setActPrice(xhpc.getActPrice()); + xhpcSt.setInternetCommission(xhpc.getInternetCommission()); + xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission()); + xhpcSt.setPlatformCommission(xhpc.getPlatformCommission()); + xhpcSt.setPlatformSvcCommisssion(xhpc.getPlatformSvcCommisssion()); + xhpcSt.setOperationCommission(xhpc.getOperationCommission()); + xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission()); + xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); + xhpcSt.setActServicePrice(xhpc.getActServicePrice()); + if (xhpc.getSource() == 1) { + xhpcSt.setInternetUserId(xhpc.getUserId()); + } + xhpcSt.setOperatorId(xhpc.getOperatorId()); + xhpcSt.setChargingStationId(xhpc.getChargingStationId()); + xhpcSt.setCreateTime(Calendar.getInstance().getTime()); + xhpcSt.setTerminalId(xhpc.getTerminalId()); + xhpcSt.setHistoryOrderId(xhpc.getHistoryOrderId()); + xhpcSt.setChargingPileId(xhpc.getChargingPileId()); + xhpcSt.setType(type); + xhpcStatisticsService.addStatisticsStation(xhpcSt); + + + //修改历史订单表状态 + XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); + xhpcHistoryOrder.setHistoryOrderId(xhpc.getHistoryOrderId()); + xhpcHistoryOrder.setState(type + 1); + xhpcHistoryOrderService.update(xhpcHistoryOrder); + } + } + } /** * 日期统计 */ @GetMapping("/test1") - @Scheduled(cron = "0 0 00 * * ?") public void test1(){ //获取500条待统计历史订单 //跨时段,跨费率,计费模型 //日期统计 - int type =1; - List list = xhpcHistoryOrderService.getStatistisList(100,type); + int type = 1; + List list = xhpcHistoryOrderService.getStatistisList(500, type); //是否跨天 if(list !=null && list.size()>0){ for (XhpcChargeHistoryOrder xhpc:list) { @@ -158,25 +202,86 @@ public class XhpcHistoryOrderController extends BaseController { } //修改历史订单表状态 - XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder(); + XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); xhpcHistoryOrder.setHistoryOrderId(xhpc.getHistoryOrderId()); - xhpcHistoryOrder.setState(type+1); + xhpcHistoryOrder.setState(type + 1); xhpcHistoryOrderService.update(xhpcHistoryOrder); } } } + + private void addStation(XhpcChargeHistoryOrder xhpc, BigDecimal chargingTime, int type, String startTime, String endTime, + BigDecimal divide) { + + BigDecimal chargingDegree1 = new BigDecimal(0); + BigDecimal powerPrice1 = new BigDecimal(0); + BigDecimal servicePrice1 = new BigDecimal(0); + List> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime, endTime, + xhpc.getRateModelId()); + if (reatTimeList != null && reatTimeList.size() > 0) { + for (int i = 0; i < reatTimeList.size(); i++) { + Map objectMap = reatTimeList.get(i); + BigDecimal powerPrice = new BigDecimal(objectMap.get("powerFee").toString()); + BigDecimal servicePrice = new BigDecimal(objectMap.get("serviceFee").toString()); + String startTime1 = objectMap.get("startTime").toString(); + String endTime1 = objectMap.get("endTime").toString(); + //总度数 + BigDecimal chargingDegree2 = + new BigDecimal((DateUtil.parse(endTime1).getTime() - DateUtil.parse(startTime1).getTime()) / 60000).multiply(divide).setScale(2, RoundingMode.HALF_UP); + chargingDegree1 = chargingDegree1.add(chargingDegree2); + powerPrice1 = powerPrice1.add(powerPrice.multiply(chargingDegree2).setScale(2, RoundingMode.HALF_UP)); + servicePrice1 = servicePrice1.add(servicePrice.multiply(chargingDegree2).setScale(2, RoundingMode.HALF_UP)); + } + } + + XhpcStatisticsStation xhpcSt = new XhpcStatisticsStation(); + xhpcSt.setChargingDegree(chargingDegree1); + xhpcSt.setChargingTime(chargingTime); + xhpcSt.setChargingNumber(1); + xhpcSt.setPowerPrice(powerPrice1); + xhpcSt.setServicePrice(servicePrice1); + xhpcSt.setTotalPrice(powerPrice1.add(servicePrice1)); + BigDecimal promotion = new BigDecimal(2); + xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setActPrice(xhpcSt.getTotalPrice().subtract(xhpcSt.getPromotionDiscount())); + xhpcSt.setInternetCommission(xhpc.getInternetCommission().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setPlatformCommission(xhpc.getPlatformCommission().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setPlatformSvcCommisssion(xhpc.getPlatformSvcCommisssion().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setOperationCommission(xhpc.getOperationCommission().divide(promotion, 2, RoundingMode.HALF_UP)); + xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission().divide(promotion, 2, RoundingMode.HALF_UP)); + + //抽成费用 + BigDecimal money = xhpcSt.getPlatformCommission().add(xhpcSt.getPlatformSvcCommisssion()) + .add(xhpcSt.getInternetCommission()).add(xhpcSt.getInternetSvcCommission()) + .add(xhpcSt.getOperationCommission()).add(xhpcSt.getOperationSvcCommission()); + xhpcSt.setActPowerPrice(powerPrice1.subtract(money)); + xhpcSt.setActServicePrice(servicePrice1.subtract(money)); + if (xhpc.getSource() == 1) { + xhpcSt.setInternetUserId(xhpc.getUserId()); + } + xhpcSt.setOperatorId(xhpc.getOperatorId()); + xhpcSt.setChargingStationId(xhpc.getChargingStationId()); + xhpcSt.setCreateTime(Calendar.getInstance().getTime()); + xhpcSt.setTerminalId(xhpc.getTerminalId()); + xhpcSt.setHistoryOrderId(xhpc.getHistoryOrderId()); + xhpcSt.setChargingPileId(xhpc.getChargingPileId()); + xhpcSt.setType(type); + xhpcStatisticsService.addStatisticsStation(xhpcSt); + } + + /** * 小时统计 */ @GetMapping("/test") - @Scheduled(cron = "0 0 * * * ?") - public void test(){ + public void test() { //获取500条待统计历史订单 //跨时段,跨费率,计费模型 //小时统计 - List list = xhpcHistoryOrderService.getStatistisList(50,0); + List list = xhpcHistoryOrderService.getStatistisList(500, 0); if(list !=null && list.size()>0){ for (XhpcChargeHistoryOrder xhpc:list) { //开始时间、结束时间、模型id、状态、用户id、运营商、订单id、场站id、终端id、历史订单id、时间 @@ -268,109 +373,6 @@ public class XhpcHistoryOrderController extends BaseController { } } - public void add(int number,int type){ - //获取500条待统计历史订单 - List list = xhpcHistoryOrderService.getStatistisList(number,type); - //场站、运营商、流量方 - if(list !=null && list.size()>0){ - for (XhpcChargeHistoryOrder xhpc:list) { - XhpcStatisticsStation xhpcSt =new XhpcStatisticsStation(); - xhpcSt.setChargingDegree(xhpc.getChargingDegree()); - BigDecimal decimal = new BigDecimal(xhpc.getChargingTimeNumber() / 3600).setScale(2, RoundingMode.HALF_UP); - xhpcSt.setChargingTime(decimal); - xhpcSt.setChargingNumber(1); - xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); - xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); - xhpcSt.setTotalPrice(xhpc.getTotalPrice()); - xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount()); - xhpcSt.setActPrice(xhpc.getActPrice()); - xhpcSt.setInternetCommission(xhpc.getInternetCommission()); - xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission()); - xhpcSt.setPlatformCommission(xhpc.getPlatformCommission()); - xhpcSt.setPlatformSvcCommisssion(xhpc.getPlatformSvcCommisssion()); - xhpcSt.setOperationCommission(xhpc.getOperationCommission()); - xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission()); - xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); - xhpcSt.setActServicePrice(xhpc.getActServicePrice()); - if(xhpc.getSource()==1){ - xhpcSt.setInternetUserId(xhpc.getUserId()); - } - xhpcSt.setOperatorId(xhpc.getOperatorId()); - xhpcSt.setChargingStationId(xhpc.getChargingStationId()); - xhpcSt.setCreateTime(Calendar.getInstance().getTime()); - xhpcSt.setTerminalId(xhpc.getTerminalId()); - xhpcSt.setHistoryOrderId(xhpc.getHistoryOrderId()); - xhpcSt.setChargingPileId(xhpc.getChargingPileId()); - xhpcSt.setType(type); - xhpcStatisticsService.addStatisticsStation(xhpcSt); - - - //修改历史订单表状态 - XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder(); - xhpcHistoryOrder.setHistoryOrderId(xhpc.getHistoryOrderId()); - xhpcHistoryOrder.setState(type+1); - xhpcHistoryOrderService.update(xhpcHistoryOrder); - } - } - } - - private void addStation(XhpcChargeHistoryOrder xhpc,BigDecimal chargingTime,int type,String startTime,String endTime,BigDecimal divide) { - - BigDecimal chargingDegree1 =new BigDecimal(0); - BigDecimal powerPrice1 =new BigDecimal(0); - BigDecimal servicePrice1 =new BigDecimal(0); - List> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime, endTime, xhpc.getRateModelId()); - if(reatTimeList !=null && reatTimeList.size()>0){ - for (int i = 0; i objectMap = reatTimeList.get(i); - BigDecimal powerPrice =new BigDecimal(objectMap.get("powerFee").toString()); - BigDecimal servicePrice =new BigDecimal(objectMap.get("serviceFee").toString()); - String startTime1 = objectMap.get("startTime").toString(); - String endTime1 = objectMap.get("endTime").toString(); - //总度数 - BigDecimal chargingDegree2 = new BigDecimal((DateUtil.parse(endTime1).getTime() - DateUtil.parse(startTime1).getTime())/60000).multiply(divide).setScale(2, RoundingMode.HALF_UP); - chargingDegree1 =chargingDegree1.add(chargingDegree2); - powerPrice1 =powerPrice1.add(powerPrice.multiply(chargingDegree2).setScale(2, RoundingMode.HALF_UP)); - servicePrice1 =servicePrice1.add(servicePrice.multiply(chargingDegree2).setScale(2, RoundingMode.HALF_UP)); - } - } - - XhpcStatisticsStation xhpcSt =new XhpcStatisticsStation(); - xhpcSt.setChargingDegree(chargingDegree1); - xhpcSt.setChargingTime(chargingTime); - xhpcSt.setChargingNumber(1); - xhpcSt.setPowerPrice(powerPrice1); - xhpcSt.setServicePrice(servicePrice1); - xhpcSt.setTotalPrice(powerPrice1.add(servicePrice1)); - BigDecimal promotion =new BigDecimal(2); - xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setActPrice(xhpcSt.getTotalPrice().subtract(xhpcSt.getPromotionDiscount())); - xhpcSt.setInternetCommission(xhpc.getInternetCommission().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setPlatformCommission(xhpc.getPlatformCommission().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setPlatformSvcCommisssion(xhpc.getPlatformSvcCommisssion().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setOperationCommission(xhpc.getOperationCommission().divide(promotion,2, RoundingMode.HALF_UP)); - xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission().divide(promotion,2, RoundingMode.HALF_UP)); - - //抽成费用 - BigDecimal money = xhpcSt.getPlatformCommission().add(xhpcSt.getPlatformSvcCommisssion()) - .add(xhpcSt.getInternetCommission()).add(xhpcSt.getInternetSvcCommission()) - .add(xhpcSt.getOperationCommission()).add(xhpcSt.getOperationSvcCommission()); - xhpcSt.setActPowerPrice(powerPrice1.subtract(money)); - xhpcSt.setActServicePrice(servicePrice1.subtract(money)); - if(xhpc.getSource()==1){ - xhpcSt.setInternetUserId(xhpc.getUserId()); - } - xhpcSt.setOperatorId(xhpc.getOperatorId()); - xhpcSt.setChargingStationId(xhpc.getChargingStationId()); - xhpcSt.setCreateTime(Calendar.getInstance().getTime()); - xhpcSt.setTerminalId(xhpc.getTerminalId()); - xhpcSt.setHistoryOrderId(xhpc.getHistoryOrderId()); - xhpcSt.setChargingPileId(xhpc.getChargingPileId()); - xhpcSt.setType(type); - xhpcStatisticsService.addStatisticsStation(xhpcSt); - } - private void addStatisTime(XhpcChargeHistoryOrder xhpc, Date startTime, Date endTime, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int startHour, int endHour,String yyyyMMdd,BigDecimal multiply) { BigDecimal number = new BigDecimal(endHour + 1 - startHour); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcOrderRedisRecord.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcOrderRedisRecord.java index 81f6cdae..7038824f 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcOrderRedisRecord.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcOrderRedisRecord.java @@ -15,10 +15,6 @@ public class XhpcOrderRedisRecord extends BaseEntity { * 充电订单id */ private Long chargeOrderId; - /** - * 充电订单号 - */ - private String serialNumber; /** * 历史订单id */ @@ -224,14 +220,4 @@ public class XhpcOrderRedisRecord extends BaseEntity { this.orderData = orderData; } - public String getSerialNumber() { - - return serialNumber; - } - - public void setSerialNumber(String serialNumber) { - - this.serialNumber = serialNumber; - } - } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java index 8130bcfa..a4fa66ed 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java @@ -5,7 +5,6 @@ import com.xhpc.common.data.redis.CacheRealtimeData; import com.xhpc.order.domain.*; import java.math.BigDecimal; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -116,7 +115,9 @@ public interface IXhpcRealTimeOrderService { * @param type 0 不发短信 1发短信 * @param vinNormal VUN 码 */ - void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, Map userMessage,Integer type,String vinNormal,XhpcHistoryOrder xhpcHistoryOrder); + void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, + BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, + Map userMessage, Integer type, String vinNormal); /** * 添加redis到数据库 diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java index 9c3bab11..0b38a93a 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java @@ -22,8 +22,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * @author yuyang @@ -47,9 +45,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { @Autowired private SmsService smsService; - private ExecutorService executorService = Executors.newFixedThreadPool(20); - - private static final Logger logger = LoggerFactory.getLogger(XhpcRealTimeOrderServiceImpl.class); @Override @@ -185,8 +180,8 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { return AjaxResult.error("用户id:" + userId + "为空"); } //生成一条历史订单 - XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); - addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, xhpcChargeOrder, userId, userMessage,0,null,xhpcHistoryOrder); + addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, xhpcChargeOrder, userId, + userMessage, 0, null); return AjaxResult.success(); } @@ -204,7 +199,11 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { * @param type 0 不发短信 1发短信 */ @Override - public void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, Map userMessage,Integer type,String vinNormal,XhpcHistoryOrder xhpcHistoryOrder) { + public void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, + BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, Map userMessage, Integer type, String vinNormal) { + + XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); xhpcHistoryOrder.setPowerPriceTotal(powerPrice); xhpcHistoryOrder.setServicePriceTotal(servicePrice); xhpcHistoryOrder.setVinNormal(vinNormal); @@ -212,9 +211,9 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { //电站活动抵扣--抵扣的总金额 BigDecimal promotionDiscount = new BigDecimal(0); //实际价格-用户支付的钱 - BigDecimal actPrice =money; + BigDecimal actPrice = money; //流量方总金额抽成 - BigDecimal internetCommission =new BigDecimal(0); + BigDecimal internetCommission = new BigDecimal(0); //流量方服务费抽成 BigDecimal internetSvcCommission =new BigDecimal(0); //平台总金额抽成 @@ -368,7 +367,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { xhpcChargeOrder.setErroRemark("扣钱失败"); }else{ xhpcHistoryOrderService.insert(xhpcHistoryOrder); - + addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber(), 1); //添加流水 xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date); try{ @@ -388,13 +387,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { }catch (Exception e){ logger.info("<<<<<<<<<<<<<<<<发送短信失败>>>>>>>>>>>>>>>>>"); } - // 另起线程处理业务上传redis数据 - executorService.execute(new Runnable() { - @Override - public void run() { - addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber(),1); - } - }); } xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); } @@ -473,7 +465,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { //添加redis到数据库 XhpcOrderRedisRecord xhpcOrderRedisRecord =new XhpcOrderRedisRecord(); xhpcOrderRedisRecord.setChargeOrderId(chargeOrderId); - xhpcOrderRedisRecord.setSerialNumber(xhpcHistoryOrder.getSerialNumber()); xhpcOrderRedisRecord.setHistoryOrderOd(xhpcHistoryOrder.getHistoryOrderId()); if(cacheMap.get("endSoc") !=null){ xhpcOrderRedisRecord.setEndSoc(cacheMap.get("endSoc").toString()); @@ -511,9 +502,9 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { } xhpcOrderRedisRecord.setCreateTime(date); xhpcChargeOrderService.addXhpcOrderRedisRecord(xhpcOrderRedisRecord); + //删除redis - redisService.deleteObject("order:"+orderNo); - redisService.deleteObject("order:"+orderNo+".lord"); + //redisService.deleteObject("order:"+orderNo); logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>"); diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml index ddc45905..9ec23042 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml @@ -403,10 +403,7 @@ remark, - order_data, - - - serial_number + order_data @@ -462,10 +459,7 @@ #{remark}, - #{orderData}, - - - #{serialNumber} + #{orderData} diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml index 32c31b12..4504531a 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml @@ -200,144 +200,144 @@ user_name_evcs, - phone + phone, - #{chargingStationId}, + #{chargingStationId,jdbcType=BIGINT}, - #{chargeOrderId}, + #{chargeOrderId,jdbcType=BIGINT}, - #{userId}, + #{userId,jdbcType=BIGINT}, - #{terminalId}, + #{terminalId,jdbcType=BIGINT}, - #{serialNumber}, + #{serialNumber,jdbcType=VARCHAR}, - #{internetSerialNumber}, + #{internetSerialNumber,jdbcType=VARCHAR}, - #{powerPriceTotal}, + #{powerPriceTotal,jdbcType=DECIMAL}, - #{servicePriceTotal}, + #{servicePriceTotal,jdbcType=DECIMAL}, - #{totalPrice}, + #{totalPrice,jdbcType=DECIMAL}, - #{promotionDiscount}, + #{promotionDiscount,jdbcType=DECIMAL}, - #{actPrice}, + #{actPrice,jdbcType=DECIMAL}, - #{actPowerPrice}, + #{actPowerPrice,jdbcType=DECIMAL}, - #{actServicePrice}, + #{actServicePrice,jdbcType=DECIMAL}, - #{internetCommission}, + #{internetCommission,jdbcType=DECIMAL}, - #{internetSvcCommission}, + #{internetSvcCommission,jdbcType=DECIMAL}, - #{platformCommission}, + #{platformCommission,jdbcType=DECIMAL}, - #{platformSvcCommisssion}, + #{platformSvcCommisssion,jdbcType=DECIMAL}, - #{operationCommission}, + #{operationCommission,jdbcType=DECIMAL}, - #{operationSvcCommission}, + #{operationSvcCommission,jdbcType=DECIMAL}, - #{startSoc}, + #{startSoc,jdbcType=VARCHAR}, - #{endSoc}, + #{endSoc,jdbcType=VARCHAR}, - #{reconciliationStatus}, + #{reconciliationStatus,jdbcType=INTEGER}, - #{sortingStatus}, + #{sortingStatus,jdbcType=INTEGER}, - #{type}, + #{type,jdbcType=TINYINT}, - #{status}, + #{status,jdbcType=INTEGER}, - #{delFlag}, + #{delFlag,jdbcType=INTEGER}, - #{createTime}, + #{createTime,jdbcType=TIMESTAMP}, - #{createBy}, + #{createBy,jdbcType=VARCHAR}, - #{updateTime}, + #{updateTime,jdbcType=TIMESTAMP}, - #{updateBy}, + #{updateBy,jdbcType=VARCHAR}, - #{remark}, + #{remark,jdbcType=VARCHAR}, - #{state}, + #{state,jdbcType=INTEGER}, - #{vinNormal}, + #{vinNormal,jdbcType=VARCHAR}, - #{searchValue}, + #{searchValue,jdbcType=VARCHAR}, - #{operatorIdEvcs}, + #{operatorIdEvcs,jdbcType=VARCHAR}, - #{chargeModelEvcs}, + #{chargeModelEvcs,jdbcType=INTEGER}, - #{connectorPowerEvcs}, + #{connectorPowerEvcs,jdbcType=DOUBLE}, - #{meterValueEndEvcs}, + #{meterValueEndEvcs,jdbcType=DOUBLE}, - #{meterValueStartEvcs}, + #{meterValueStartEvcs,jdbcType=DOUBLE}, - #{operatorId3rdptyEvcs}, + #{operatorId3rdptyEvcs,jdbcType=VARCHAR}, - #{startTime}, + #{startTime,jdbcType=TIMESTAMP}, - #{stopReasonEvcs}, + #{stopReasonEvcs,jdbcType=INTEGER}, - #{totalPower}, + #{totalPower,jdbcType=DOUBLE}, - #{userNameEvcs}, + #{userNameEvcs,jdbcType=VARCHAR}, - #{phone} + #{phone,jdbcType=VARCHAR}, diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java index 07075add..91c6c304 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java @@ -50,8 +50,11 @@ public class PileController { @DeleteMapping("pile/whitelist/delete/{stationId}") public Object deleteWhitelist(@PathVariable("stationId") Long stationId, @RequestBody Set pileNoSet) { +// System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); +// System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); REDIS.deleteSetVal("PILE_WHITELIST", pileNoSet.toArray()); String stationKey = "station:".concat(stationId.toString()); +// System.out.println(">>>>>>>>>>>>>>>>>>pileNoSet.toArray()>>>>>>>>>>>>>>>>"+stationKey); ChargingStationDto cacheStation = REDIS.getCacheObject(stationKey); cacheStation.getPiles().removeAll(pileNoSet); REDIS.setCacheObject(stationKey, cacheStation); diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java index a4b81530..e5493f01 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java @@ -72,7 +72,12 @@ public class RealtimeDataLogic implements ServiceLogic { String hfsplain = ""; for (int i = hfcs.length - 1; i >= 0; i--) { if (hfcs[i] == 49) { - hfsplain = hfsplain.concat(hftable[hfcs.length - i - 1]).concat("!"); + int idx = hfcs.length - i - 1; + if (idx < hftable.length) { + hfsplain = hfsplain.concat(hftable[idx]).concat("!"); + } else { + hfsplain = hfsplain.concat("未知硬件故障码idx[" + idx + "]").concat(".."); + } } } cacheGun.put("hf", hfsplain);