merge master
This commit is contained in:
commit
a5e4b8b3a0
@ -1,14 +1,29 @@
|
|||||||
package com.xhpc.evcs.api;
|
package com.xhpc.evcs.api;
|
||||||
|
|
||||||
import com.xhpc.common.api.dto.ChargingStationDto;
|
import com.xhpc.common.api.dto.ChargingStationDto;
|
||||||
import com.xhpc.evcs.dto.*;
|
import com.xhpc.common.domain.XhpcTerminal;
|
||||||
|
import com.xhpc.evcs.dto.CommonRequest;
|
||||||
|
import com.xhpc.evcs.dto.CommonResponse;
|
||||||
|
import com.xhpc.evcs.dto.ConnectorStatusInfo;
|
||||||
|
import com.xhpc.evcs.dto.StationStatusInfo;
|
||||||
|
import com.xhpc.evcs.dto.StationStatusInfoWrapper;
|
||||||
|
import com.xhpc.evcs.dto.StationStatusRequest;
|
||||||
import com.xhpc.evcs.encryption.EvcsConst;
|
import com.xhpc.evcs.encryption.EvcsConst;
|
||||||
|
import com.xhpc.evcs.jpa.XhpcTerminalRepository;
|
||||||
import com.xhpc.evcs.utils.JSONUtil;
|
import com.xhpc.evcs.utils.JSONUtil;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.*;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.hutool.core.util.NumberUtil.isInteger;
|
import static cn.hutool.core.util.NumberUtil.isInteger;
|
||||||
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
||||||
@ -16,6 +31,8 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
|||||||
@RestController
|
@RestController
|
||||||
public class QueryStationStatusController {
|
public class QueryStationStatusController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
XhpcTerminalRepository terminalRepository;
|
||||||
|
|
||||||
@PostMapping("/v1/query_station_status")
|
@PostMapping("/v1/query_station_status")
|
||||||
public CommonResponse queryStationsInfo(@RequestBody CommonRequest<StationStatusRequest> commonRequest) throws Exception {
|
public CommonResponse queryStationsInfo(@RequestBody CommonRequest<StationStatusRequest> commonRequest) throws Exception {
|
||||||
@ -46,6 +63,10 @@ public class QueryStationStatusController {
|
|||||||
for (int i = 0; i < keys.length; i++) {
|
for (int i = 0; i < keys.length; i++) {
|
||||||
statusMap.put(keys[i], values[i]);
|
statusMap.put(keys[i], values[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<XhpcTerminal> terminalList = terminalRepository.selectStatusBySql();
|
||||||
|
Map<String,Integer> terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus));
|
||||||
|
|
||||||
for (String stationID : stationIDs) {
|
for (String stationID : stationIDs) {
|
||||||
ChargingStationDto chargingStationDto = REDIS.getCacheObject("station:" + stationID);
|
ChargingStationDto chargingStationDto = REDIS.getCacheObject("station:" + stationID);
|
||||||
Set<String> pileIds = new HashSet<>();
|
Set<String> pileIds = new HashSet<>();
|
||||||
@ -59,11 +80,20 @@ public class QueryStationStatusController {
|
|||||||
if (pileId.equals(value.substring(0, 14))) {
|
if (pileId.equals(value.substring(0, 14))) {
|
||||||
existsGun = true;
|
existsGun = true;
|
||||||
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
||||||
Object status = REDIS.getCacheMapValue("gun:" + value, "status");
|
Integer gunStatus = terminalDBMap.get(value);
|
||||||
if (isInteger(status.toString())) {
|
if (gunStatus == null){
|
||||||
connectorStatusInfo.setStatus(3);
|
existsGun = false;
|
||||||
} else {
|
} else {
|
||||||
connectorStatusInfo.setStatus(statusMap.get(status));
|
if (gunStatus == 0){
|
||||||
|
Object status = REDIS.getCacheMapValue("gun:" + value, "status");
|
||||||
|
if (isInteger(status.toString())) {
|
||||||
|
connectorStatusInfo.setStatus(3);
|
||||||
|
} else {
|
||||||
|
connectorStatusInfo.setStatus(statusMap.get(status));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
connectorStatusInfo.setStatus(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
connectorStatusInfo.setConnectorID(value);
|
connectorStatusInfo.setConnectorID(value);
|
||||||
connectorStatusInfos.add(connectorStatusInfo);
|
connectorStatusInfos.add(connectorStatusInfo);
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query;
|
|||||||
import org.springframework.data.repository.query.QueryByExampleExecutor;
|
import org.springframework.data.repository.query.QueryByExampleExecutor;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,4 +32,7 @@ public interface XhpcTerminalRepository extends JpaRepository<XhpcTerminal, Inte
|
|||||||
@Query("select t.pileSerialNumber from XhpcTerminal as t where t.delFlag = 0 and t.serialNumber = ?1")
|
@Query("select t.pileSerialNumber from XhpcTerminal as t where t.delFlag = 0 and t.serialNumber = ?1")
|
||||||
String selectBySql(String serialNumber);
|
String selectBySql(String serialNumber);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("select t.serialNumber, t.status from XhpcTerminal as t where t.delFlag = 0")
|
||||||
|
List<XhpcTerminal> selectStatusBySql();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,6 +76,11 @@ public class NotificationChargeOrderInfo4BonusTask extends CoreDispatcher {
|
|||||||
if (operatorIdEvcs == null) {
|
if (operatorIdEvcs == null) {
|
||||||
Long chargingStationId = xhpcHistoryOrder.getChargingStationId();
|
Long chargingStationId = xhpcHistoryOrder.getChargingStationId();
|
||||||
XhpcChargingStation station = chargingStationRepo.findById(chargingStationId).orElse(null);
|
XhpcChargingStation station = chargingStationRepo.findById(chargingStationId).orElse(null);
|
||||||
|
if(station == null){
|
||||||
|
logger.error("station[{}] is not exits", chargingStationId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
String stationOperatorIdEvcs = station.getOperatorIdEvcs();
|
String stationOperatorIdEvcs = station.getOperatorIdEvcs();
|
||||||
if (stationOperatorIdEvcs == null) {
|
if (stationOperatorIdEvcs == null) {
|
||||||
logger.error("station[{}] operator id evcs not set", chargingStationId);
|
logger.error("station[{}] operator id evcs not set", chargingStationId);
|
||||||
|
|||||||
@ -45,7 +45,13 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher {
|
|||||||
Collection<String> orderKeys = REDIS.keys("order:*");
|
Collection<String> orderKeys = REDIS.keys("order:*");
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
for (String okey : orderKeys) {
|
for (String okey : orderKeys) {
|
||||||
Date otime = DateUtil.orderNo2Date(okey.substring(6));
|
String orderNo = okey.substring(6);
|
||||||
|
if(orderNo.length() < 32){
|
||||||
|
logger.error("orderNo[{}] is error", orderNo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Date otime = DateUtil.orderNo2Date(orderNo);
|
||||||
if (Duration.between(otime.toInstant(), now).toHours() > 24 * 3) {
|
if (Duration.between(otime.toInstant(), now).toHours() > 24 * 3) {
|
||||||
REDIS.deleteObject(okey);
|
REDIS.deleteObject(okey);
|
||||||
REDIS.deleteObject(okey.replace("order", "pushOrder"));
|
REDIS.deleteObject(okey.replace("order", "pushOrder"));
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.xhpc.evcs.notification;
|
package com.xhpc.evcs.notification;
|
||||||
|
|
||||||
import com.xhpc.common.api.dto.ChargingStationDto;
|
import com.xhpc.common.api.dto.ChargingStationDto;
|
||||||
|
import com.xhpc.common.domain.XhpcTerminal;
|
||||||
import com.xhpc.evcs.domain.AuthSecretToken;
|
import com.xhpc.evcs.domain.AuthSecretToken;
|
||||||
import com.xhpc.evcs.domain.XhpcInternetUser;
|
import com.xhpc.evcs.domain.XhpcInternetUser;
|
||||||
import com.xhpc.evcs.domain.XhpcStationInternetBlacklist;
|
import com.xhpc.evcs.domain.XhpcStationInternetBlacklist;
|
||||||
@ -10,6 +11,7 @@ import com.xhpc.evcs.dto.ConnectorStatusInfoReq;
|
|||||||
import com.xhpc.evcs.jpa.AuthSecretTokenRepository;
|
import com.xhpc.evcs.jpa.AuthSecretTokenRepository;
|
||||||
import com.xhpc.evcs.jpa.XhpcInternetUserRepository;
|
import com.xhpc.evcs.jpa.XhpcInternetUserRepository;
|
||||||
import com.xhpc.evcs.jpa.XhpcStationInternetBlacklistRepository;
|
import com.xhpc.evcs.jpa.XhpcStationInternetBlacklistRepository;
|
||||||
|
import com.xhpc.evcs.jpa.XhpcTerminalRepository;
|
||||||
import com.xhpc.evcs.utils.ChangePoleStatus;
|
import com.xhpc.evcs.utils.ChangePoleStatus;
|
||||||
import com.xhpc.evcs.utils.JSONUtil;
|
import com.xhpc.evcs.utils.JSONUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -17,13 +19,22 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
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.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT;
|
||||||
import static com.xhpc.evcs.dto.ConnectorStatusInfo.*;
|
import static com.xhpc.evcs.dto.ConnectorStatusInfo.CHARGING;
|
||||||
|
import static com.xhpc.evcs.dto.ConnectorStatusInfo.ERROR;
|
||||||
|
import static com.xhpc.evcs.dto.ConnectorStatusInfo.FREE;
|
||||||
|
import static com.xhpc.evcs.dto.ConnectorStatusInfo.OFF_LINE;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -35,12 +46,17 @@ public class NotificationStationStatusTask extends CoreDispatcher {
|
|||||||
private XhpcInternetUserRepository xhpcInternetUserRepository;
|
private XhpcInternetUserRepository xhpcInternetUserRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo;
|
private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo;
|
||||||
|
@Resource
|
||||||
|
private XhpcTerminalRepository terminalRepository;
|
||||||
|
|
||||||
@Scheduled(fixedRate = 1000 * 45)
|
@Scheduled(fixedRate = 1000 * 45)
|
||||||
protected void run() throws IOException {
|
protected void run() throws IOException {
|
||||||
|
|
||||||
Collection<String> stationTerminalKeys = REDIS.keys("stationTerminalStatus:*");
|
Collection<String> stationTerminalKeys = REDIS.keys("stationTerminalStatus:*");
|
||||||
|
|
||||||
|
List<XhpcTerminal> terminalList = terminalRepository.selectStatusBySql();
|
||||||
|
Map<String,Integer> terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus));
|
||||||
|
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
List<XhpcInternetUser> xhpcInternetUserList =
|
List<XhpcInternetUser> xhpcInternetUserList =
|
||||||
xhpcInternetUserRepository.findByCooperationStartTimeBeforeAndCooperationEndTimeAfter(now, now);
|
xhpcInternetUserRepository.findByCooperationStartTimeBeforeAndCooperationEndTimeAfter(now, now);
|
||||||
@ -49,7 +65,7 @@ public class NotificationStationStatusTask extends CoreDispatcher {
|
|||||||
"station"));
|
"station"));
|
||||||
String operatorId = chargingStationDto.getOperatorId();
|
String operatorId = chargingStationDto.getOperatorId();
|
||||||
Map<String, String> terminalStatusMap = REDIS.getCacheMap(stationTerminalKey);
|
Map<String, String> terminalStatusMap = REDIS.getCacheMap(stationTerminalKey);
|
||||||
Set<ConnectorStatusInfo> connectorStatusInfos = translateStatus(operatorId, terminalStatusMap);
|
Set<ConnectorStatusInfo> connectorStatusInfos = translateStatus(operatorId, terminalStatusMap, terminalDBMap);
|
||||||
Set<ConnectorStatusInfo> changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos);
|
Set<ConnectorStatusInfo> changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos);
|
||||||
if (!changeStatus.isEmpty()) {
|
if (!changeStatus.isEmpty()) {
|
||||||
for (XhpcInternetUser xhpcInternetUser : xhpcInternetUserList) {
|
for (XhpcInternetUser xhpcInternetUser : xhpcInternetUserList) {
|
||||||
@ -70,7 +86,7 @@ public class NotificationStationStatusTask extends CoreDispatcher {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<ConnectorStatusInfo> translateStatus(String operatorId, Map<String, String> terminalStatusMap) {
|
private Set<ConnectorStatusInfo> translateStatus(String operatorId, Map<String, String> terminalStatusMap, Map<String, Integer> terminalDBMap) {
|
||||||
|
|
||||||
Set<ConnectorStatusInfo> connectorStatusInfoList = new HashSet<>();
|
Set<ConnectorStatusInfo> connectorStatusInfoList = new HashSet<>();
|
||||||
final Set<String> connectorIds = terminalStatusMap.keySet();
|
final Set<String> connectorIds = terminalStatusMap.keySet();
|
||||||
@ -78,7 +94,12 @@ public class NotificationStationStatusTask extends CoreDispatcher {
|
|||||||
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
||||||
connectorStatusInfo.setConnectorID(gunId);
|
connectorStatusInfo.setConnectorID(gunId);
|
||||||
connectorStatusInfo.setOperatorID(operatorId);
|
connectorStatusInfo.setOperatorID(operatorId);
|
||||||
connectorStatusInfo.setStatus(translateStatus(terminalStatusMap.get(gunId)));
|
Integer dbStatus = terminalDBMap.get(gunId);
|
||||||
|
if(dbStatus == 0){
|
||||||
|
connectorStatusInfo.setStatus(translateStatus(terminalStatusMap.get(gunId)));
|
||||||
|
} else {
|
||||||
|
connectorStatusInfo.setStatus(0);
|
||||||
|
}
|
||||||
connectorStatusInfoList.add(connectorStatusInfo);
|
connectorStatusInfoList.add(connectorStatusInfo);
|
||||||
}
|
}
|
||||||
return connectorStatusInfoList;
|
return connectorStatusInfoList;
|
||||||
|
|||||||
@ -90,7 +90,7 @@ public class Constants
|
|||||||
/**
|
/**
|
||||||
* 令牌有效期(分钟)
|
* 令牌有效期(分钟)
|
||||||
*/
|
*/
|
||||||
public final static long TOKEN_EXPIRE = 10;
|
public final static long TOKEN_EXPIRE = 60*24;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 参数管理 cache key
|
* 参数管理 cache key
|
||||||
|
|||||||
@ -566,6 +566,7 @@
|
|||||||
and find_in_set(tenant_id, #{tenantIdsStr})
|
and find_in_set(tenant_id, #{tenantIdsStr})
|
||||||
</if>
|
</if>
|
||||||
order by create_time desc
|
order by create_time desc
|
||||||
|
LIMIT 50
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@ -83,4 +83,12 @@ public interface PileOrderService {
|
|||||||
@GetMapping("/api/chargeOrder/pileVin")
|
@GetMapping("/api/chargeOrder/pileVin")
|
||||||
R pileVin(@RequestParam(value = "serialNumber") String serialNumber,@RequestParam(value = "vinNumber") String vinNumber);
|
R pileVin(@RequestParam(value = "serialNumber") String serialNumber,@RequestParam(value = "vinNumber") String vinNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 桩订单实时订单BMS回调接口
|
||||||
|
* @param orderNo 订单号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/chargeOrder/pileRimeOrderBms")
|
||||||
|
R pileRimeOrderBms(@RequestParam(value = "orderNo") String orderNo);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,17 @@ public class PileOrderFallbackFactory implements FallbackFactory<PileOrderServic
|
|||||||
public R pileVin(String serialNumber, String vinNumber) {
|
public R pileVin(String serialNumber, String vinNumber) {
|
||||||
return R.fail(3886,"VIN码启动失败:" + cause.getMessage());
|
return R.fail(3886,"VIN码启动失败:" + cause.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 桩订单实时订单BMS回调接口
|
||||||
|
*
|
||||||
|
* @param orderNo 订单号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public R pileRimeOrderBms(String orderNo) {
|
||||||
|
return R.fail("充电过程 BMS 需求与充电机输出失败:" + cause.getMessage());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,143 @@
|
|||||||
|
package com.xhpc.common.data.redis;
|
||||||
|
|
||||||
|
import com.xhpc.common.data.up.BaseData;
|
||||||
|
|
||||||
|
//充电桩与 BMS 充电过程 BMS 需求、充电机输出
|
||||||
|
public class CacheBmsReqChargerOutputData extends BaseData {
|
||||||
|
|
||||||
|
private String orderNo; //交易流水号
|
||||||
|
private String pileNo; //桩号
|
||||||
|
private String gunId; //枪号
|
||||||
|
private Double bmsVoltageRequest; //BMS 电压需求
|
||||||
|
private Double bmsCurrentRequest; //BMS 电流需求
|
||||||
|
private Integer bmsChargingMod; //BMS 充电模式
|
||||||
|
private Double bmsChargingVolt; //BMS 充电电压测量值
|
||||||
|
private Double bmsChargingCurrent; //BMS 充电电流测量值
|
||||||
|
private Double monoBatteryVolt; //BMS 最高单体动力蓄电池电压
|
||||||
|
private Integer soc; //BMS 当前荷电状态 SOC( %)
|
||||||
|
private Integer bmsEstRemainingTime; //BMS 估算剩余充电时间
|
||||||
|
private Double pileVoltageOutput; //电桩电压输出值
|
||||||
|
private Double pileCurrentOutput; //电桩电流输出值
|
||||||
|
private Integer chargingTimeSummary; //累计充电时间
|
||||||
|
private Integer monoBatteryVoltGroupId; // BMS 最高单体动力蓄电池电压所在组号ID
|
||||||
|
|
||||||
|
public String getOrderNo() {
|
||||||
|
return orderNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getMonoBatteryVolt() {
|
||||||
|
return monoBatteryVolt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonoBatteryVolt(Double monoBatteryVolt) {
|
||||||
|
this.monoBatteryVolt = monoBatteryVolt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderNo(String orderNo) {
|
||||||
|
this.orderNo = orderNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPileNo() {
|
||||||
|
return pileNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPileNo(String pileNo) {
|
||||||
|
this.pileNo = pileNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGunId() {
|
||||||
|
return gunId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGunId(String gunId) {
|
||||||
|
this.gunId = gunId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getBmsVoltageRequest() {
|
||||||
|
return bmsVoltageRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsVoltageRequest(Double bmsVoltageRequest) {
|
||||||
|
this.bmsVoltageRequest = bmsVoltageRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getBmsCurrentRequest() {
|
||||||
|
return bmsCurrentRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsCurrentRequest(Double bmsCurrentRequest) {
|
||||||
|
this.bmsCurrentRequest = bmsCurrentRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getBmsChargingMod() {
|
||||||
|
return bmsChargingMod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsChargingMod(Integer bmsChargingMod) {
|
||||||
|
this.bmsChargingMod = bmsChargingMod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getBmsChargingVolt() {
|
||||||
|
return bmsChargingVolt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsChargingVolt(Double bmsChargingVolt) {
|
||||||
|
this.bmsChargingVolt = bmsChargingVolt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getBmsChargingCurrent() {
|
||||||
|
return bmsChargingCurrent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsChargingCurrent(Double bmsChargingCurrent) {
|
||||||
|
this.bmsChargingCurrent = bmsChargingCurrent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getMonoBatteryVoltGroupId() {
|
||||||
|
return monoBatteryVoltGroupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonoBatteryVoltGroupId(Integer monoBatteryVoltGroupId) {
|
||||||
|
this.monoBatteryVoltGroupId = monoBatteryVoltGroupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getSoc() {
|
||||||
|
return soc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSoc(Integer soc) {
|
||||||
|
this.soc = soc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getBmsEstRemainingTime() {
|
||||||
|
return bmsEstRemainingTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBmsEstRemainingTime(Integer bmsEstRemainingTime) {
|
||||||
|
this.bmsEstRemainingTime = bmsEstRemainingTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getPileVoltageOutput() {
|
||||||
|
return pileVoltageOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPileVoltageOutput(Double pileVoltageOutput) {
|
||||||
|
this.pileVoltageOutput = pileVoltageOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getPileCurrentOutput() {
|
||||||
|
return pileCurrentOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPileCurrentOutput(Double pileCurrentOutput) {
|
||||||
|
this.pileCurrentOutput = pileCurrentOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getChargingTimeSummary() {
|
||||||
|
return chargingTimeSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChargingTimeSummary(Integer chargingTimeSummary) {
|
||||||
|
this.chargingTimeSummary = chargingTimeSummary;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,9 @@
|
|||||||
package com.xhpc.common.enums;
|
package com.xhpc.common.enums;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author yuyang
|
* @author yuyang
|
||||||
* @date 2022/8/5 16:44
|
* @date 2022/8/5 16:44
|
||||||
@ -79,6 +83,15 @@ public enum StopReasonEnum {
|
|||||||
private final String code;
|
private final String code;
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
|
|
||||||
|
public String getCode(){
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName(){
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
StopReasonEnum(String code, String name){
|
StopReasonEnum(String code, String name){
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@ -94,4 +107,9 @@ public enum StopReasonEnum {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Map<String, String> getMap(){
|
||||||
|
return Arrays.stream(StopReasonEnum.values()).collect(Collectors.toMap(StopReasonEnum::getCode, StopReasonEnum::getName));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import com.xhpc.common.api.WebSocketService;
|
|||||||
import com.xhpc.common.api.WorkOrderYuService;
|
import com.xhpc.common.api.WorkOrderYuService;
|
||||||
import com.xhpc.common.core.domain.R;
|
import com.xhpc.common.core.domain.R;
|
||||||
import com.xhpc.common.core.web.controller.BaseController;
|
import com.xhpc.common.core.web.controller.BaseController;
|
||||||
|
import com.xhpc.common.data.redis.CacheBmsReqChargerOutputData;
|
||||||
import com.xhpc.common.data.redis.CacheOrderData;
|
import com.xhpc.common.data.redis.CacheOrderData;
|
||||||
import com.xhpc.common.data.redis.CacheRealtimeData;
|
import com.xhpc.common.data.redis.CacheRealtimeData;
|
||||||
import com.xhpc.common.domain.XhpcRate;
|
import com.xhpc.common.domain.XhpcRate;
|
||||||
@ -802,4 +803,23 @@ public R pileStartUpBy3rd(@RequestParam(value = "internetSerialNumber") String i
|
|||||||
workOrderYuService.addNewOrder("28","有异常订单订单且该桩进行校时效价处理","定时任务自动扫描异常订单","","","","");
|
workOrderYuService.addNewOrder("28","有异常订单订单且该桩进行校时效价处理","定时任务自动扫描异常订单","","","","");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 桩实时数据BMS回调接口
|
||||||
|
* @param orderNo 订单号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@GetMapping("/chargeOrder/pileRimeOrderBms")
|
||||||
|
public R pileRimeOrderBms(@RequestParam(value = "orderNo")String orderNo) {
|
||||||
|
|
||||||
|
logger.info("桩实时数据BMS回调接口>>>>>orderNo:" + orderNo);
|
||||||
|
//获取实时订单
|
||||||
|
|
||||||
|
xhpcRealTimeOrderService.addRealTimeOrderBms(orderNo);
|
||||||
|
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -77,17 +77,57 @@ public class XhpcRealTimeOrderController extends BaseController {
|
|||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/timeBmsList")
|
||||||
|
public TableDataInfo timeBmsList(@RequestParam Long chargingOrderId)
|
||||||
|
{
|
||||||
|
startPage();
|
||||||
|
List<Map<String,Object>> list = xhpcRealTimeOrderService.timeBmsList(chargingOrderId);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 实时/异常订单详情数据图表(PC)
|
* 实时/异常订单详情数据图表(PC)
|
||||||
* @param chargingOrderId
|
* @param chargingOrderId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@GetMapping("/timeChartList")
|
// @GetMapping("/timeChartList")
|
||||||
public AjaxResult timeChartList(@RequestParam Long chargingOrderId)
|
// public AjaxResult timeChartList(@RequestParam Long chargingOrderId)
|
||||||
|
// {
|
||||||
|
// return xhpcRealTimeOrderService.timeChartList(chargingOrderId);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时/异常订单详情数据电压图表(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/timeChartListVoltage")
|
||||||
|
public AjaxResult timeChartListVoltage(@RequestParam Long chargingOrderId)
|
||||||
{
|
{
|
||||||
return xhpcRealTimeOrderService.timeChartList(chargingOrderId);
|
return xhpcRealTimeOrderService.timeChartListVoltage(chargingOrderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时/异常订单详情数据电流图表(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/timeChartListCurrent")
|
||||||
|
public AjaxResult timeChartListCurrent(@RequestParam Long chargingOrderId)
|
||||||
|
{
|
||||||
|
return xhpcRealTimeOrderService.timeChartListCurrent(chargingOrderId);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 实时/异常订单详情数据soc图表(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/timeChartListSoc")
|
||||||
|
public AjaxResult timeChartListSoc(@RequestParam Long chargingOrderId)
|
||||||
|
{
|
||||||
|
return xhpcRealTimeOrderService.timeChartListSoc(chargingOrderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*异常订单审核详情
|
*异常订单审核详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
package com.xhpc.order.domain;
|
||||||
|
|
||||||
|
import com.xhpc.common.core.web.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yuyang
|
||||||
|
* @date 2022/8/31 17:32
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class XhpcRealTimeOrderBms extends BaseEntity {
|
||||||
|
|
||||||
|
|
||||||
|
private Long realTimeOrderBmsId;
|
||||||
|
|
||||||
|
private String orderNo; //交易流水号
|
||||||
|
private String pileNo; //桩号
|
||||||
|
private String gunId; //枪号
|
||||||
|
private Double bmsVoltageRequest; //BMS 电压需求
|
||||||
|
private Double bmsCurrentRequest; //BMS 电流需求
|
||||||
|
private Integer bmsChargingMod; //BMS 充电模式
|
||||||
|
private Double bmsChargingVolt; //BMS 充电电压测量值
|
||||||
|
private Double bmsChargingCurrent; //BMS 充电电流测量值
|
||||||
|
private Double monoBatteryVolt; //BMS 最高单体动力蓄电池电压
|
||||||
|
private Integer soc; //BMS 当前荷电状态 SOC( %)
|
||||||
|
private String bmsEstRemainingTime; //BMS 估算剩余充电时间
|
||||||
|
private Double pileVoltageOutput; //电桩电压输出值
|
||||||
|
private Double pileCurrentOutput; //电桩电流输出值
|
||||||
|
private String chargingTimeSummary; //累计充电时间
|
||||||
|
private Integer monoBatteryVoltGroupId; // BMS 最高单体动力蓄电池电压所在组号ID
|
||||||
|
private Long chargingOrderId;
|
||||||
|
|
||||||
|
}
|
||||||
@ -142,7 +142,6 @@ public interface XhpcChargeOrderMapper {
|
|||||||
*/
|
*/
|
||||||
void addXhpcOrderRedisRecord(XhpcOrderRedisRecord xhpcOrderRedisRecord);
|
void addXhpcOrderRedisRecord(XhpcOrderRedisRecord xhpcOrderRedisRecord);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加流水
|
* 添加流水
|
||||||
* @param userId 用户id
|
* @param userId 用户id
|
||||||
|
|||||||
@ -134,4 +134,7 @@ public interface XhpcHistoryOrderMapper {
|
|||||||
* 查询启动订单表
|
* 查询启动订单表
|
||||||
*/
|
*/
|
||||||
Map<String, Object> getchargingOrderById(@Param("chargingOrderId")Long chargingOrderId,@Param("userId")Long userId,@Param("source")Integer source,@Param("tenantId")String tenantId);
|
Map<String, Object> getchargingOrderById(@Param("chargingOrderId")Long chargingOrderId,@Param("userId")Long userId,@Param("source")Integer source,@Param("tenantId")String tenantId);
|
||||||
|
|
||||||
|
//获取跨天最后一帧数据
|
||||||
|
Map<String, Object> getXhpcRealTimeOrderTwentyFour(@Param("chargingOrderId")Long chargingOrderId,@Param("time")String time);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,6 @@
|
|||||||
package com.xhpc.order.mapper;
|
package com.xhpc.order.mapper;
|
||||||
|
|
||||||
import com.xhpc.order.domain.XhpcChargeOrderCurrent;
|
import com.xhpc.order.domain.*;
|
||||||
import com.xhpc.order.domain.XhpcChargeOrderSoc;
|
|
||||||
import com.xhpc.order.domain.XhpcChargeOrderVoltage;
|
|
||||||
import com.xhpc.order.domain.XhpcRealTimeOrder;
|
|
||||||
import com.xhpc.order.dto.RateTime;
|
import com.xhpc.order.dto.RateTime;
|
||||||
import com.xhpc.order.dto.XhpcActivityDiscountDto;
|
import com.xhpc.order.dto.XhpcActivityDiscountDto;
|
||||||
import com.xhpc.order.dto.XhpcActivityFormulaDomainDto;
|
import com.xhpc.order.dto.XhpcActivityFormulaDomainDto;
|
||||||
@ -27,7 +24,12 @@ public interface XhpcRealTimeOrderMapper {
|
|||||||
*/
|
*/
|
||||||
int insertXhpcRealTimeOrder(XhpcRealTimeOrder xhpcRealTimeOrder);
|
int insertXhpcRealTimeOrder(XhpcRealTimeOrder xhpcRealTimeOrder);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加实时充电订单
|
||||||
|
* @param xhpcRealTimeOrderBms
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int insertRealTimeOrderBms(XhpcRealTimeOrderBms xhpcRealTimeOrderBms);
|
||||||
/**
|
/**
|
||||||
* 添加订单实时SOC
|
* 添加订单实时SOC
|
||||||
* @param xhpcChargeOrderSoc
|
* @param xhpcChargeOrderSoc
|
||||||
@ -73,6 +75,10 @@ public interface XhpcRealTimeOrderMapper {
|
|||||||
*/
|
*/
|
||||||
Map<String,Object> getMessage(@Param("realTimeOrderId")Long realTimeOrderId);
|
Map<String,Object> getMessage(@Param("realTimeOrderId")Long realTimeOrderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取场站信息
|
||||||
|
*/
|
||||||
|
Map<String,Object> getXhpcChargingStationById(Long chargingStationId);
|
||||||
/**
|
/**
|
||||||
* 异常订单详情接口(PC端)
|
* 异常订单详情接口(PC端)
|
||||||
* @param chargeOrderId
|
* @param chargeOrderId
|
||||||
@ -88,6 +94,13 @@ public interface XhpcRealTimeOrderMapper {
|
|||||||
*/
|
*/
|
||||||
List<Map<String,Object>> timeList(@Param("chargingOrderId")Long chargingOrderId);
|
List<Map<String,Object>> timeList(@Param("chargingOrderId")Long chargingOrderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时订单详情数据列表BMS(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> timeBmsList(@Param("chargingOrderId")Long chargingOrderId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 实时订单详情数据图表SOC(PC)
|
* 实时订单详情数据图表SOC(PC)
|
||||||
* @param chargingOrderId
|
* @param chargingOrderId
|
||||||
|
|||||||
@ -47,12 +47,30 @@ public interface IXhpcRealTimeOrderService {
|
|||||||
*/
|
*/
|
||||||
List<Map<String,Object>> timeList(Long chargingOrderId);
|
List<Map<String,Object>> timeList(Long chargingOrderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时订单详情数据列表(PC)
|
||||||
|
* @param chargingOrderId 充电订单id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> timeBmsList(Long chargingOrderId);
|
||||||
/**
|
/**
|
||||||
* 实时订单详情数据图表(PC)
|
* 实时订单详情数据图表(PC)
|
||||||
* @param chargingOrderId
|
* @param chargingOrderId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
AjaxResult timeChartList(Long chargingOrderId);
|
AjaxResult timeChartListVoltage(Long chargingOrderId);
|
||||||
|
/**
|
||||||
|
* 实时订单详情数据图表(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AjaxResult timeChartListCurrent(Long chargingOrderId);
|
||||||
|
/**
|
||||||
|
* 实时订单详情数据图表(PC)
|
||||||
|
* @param chargingOrderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AjaxResult timeChartListSoc(Long chargingOrderId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除之前的实时订单数据
|
* 删除之前的实时订单数据
|
||||||
@ -149,4 +167,11 @@ public interface IXhpcRealTimeOrderService {
|
|||||||
* 添加一条金额为0的数据
|
* 添加一条金额为0的数据
|
||||||
*/
|
*/
|
||||||
void addZeroHistoryOrder(XhpcChargeOrder xhpcChargeOrder);
|
void addZeroHistoryOrder(XhpcChargeOrder xhpcChargeOrder);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条实时订单的BMS
|
||||||
|
*/
|
||||||
|
void addRealTimeOrderBms(String orderNo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import com.xhpc.common.core.utils.StringUtils;
|
|||||||
import com.xhpc.common.core.web.domain.AjaxResult;
|
import com.xhpc.common.core.web.domain.AjaxResult;
|
||||||
import com.xhpc.common.core.web.service.BaseService;
|
import com.xhpc.common.core.web.service.BaseService;
|
||||||
import com.xhpc.common.data.down.StartChargingData;
|
import com.xhpc.common.data.down.StartChargingData;
|
||||||
|
import com.xhpc.common.data.redis.CacheBmsReqChargerOutputData;
|
||||||
import com.xhpc.common.data.redis.CacheRealtimeData;
|
import com.xhpc.common.data.redis.CacheRealtimeData;
|
||||||
import com.xhpc.common.data.redis.StaticBeanUtil;
|
import com.xhpc.common.data.redis.StaticBeanUtil;
|
||||||
import com.xhpc.common.domain.XhpcRate;
|
import com.xhpc.common.domain.XhpcRate;
|
||||||
@ -440,6 +441,7 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar
|
|||||||
xhpcChargeOrderMapper.addXhpcOrderRedisRecord(xhpcOrderRedisRecord);
|
xhpcChargeOrderMapper.addXhpcOrderRedisRecord(xhpcOrderRedisRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int addUserAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Long chargeOrderId,
|
public int addUserAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Long chargeOrderId,
|
||||||
Integer type, Date date,Integer source) {
|
Integer type, Date date,Integer source) {
|
||||||
@ -507,13 +509,14 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar
|
|||||||
//终端信息
|
//终端信息
|
||||||
XhpcTerminal xhpcTerminal = xhpcChargeOrderMapper.getXhpcTerminalSerialNumber(connectorId,null);
|
XhpcTerminal xhpcTerminal = xhpcChargeOrderMapper.getXhpcTerminalSerialNumber(connectorId,null);
|
||||||
if (xhpcTerminal == null || xhpcTerminal.getTerminalId() == null || xhpcTerminal.getChargingPileId() == null || xhpcTerminal.getPileSerialNumber() == null) {
|
if (xhpcTerminal == null || xhpcTerminal.getTerminalId() == null || xhpcTerminal.getChargingPileId() == null || xhpcTerminal.getPileSerialNumber() == null) {
|
||||||
r.setCode(1);
|
r.setCode(500);
|
||||||
String pilePrompt = redisService.getCacheObject("pilePrompt:000000");
|
// String pilePrompt = redisService.getCacheObject("pilePrompt:000000");
|
||||||
if(!"".equals(pilePrompt) && pilePrompt !=null){
|
// if(!"".equals(pilePrompt) && pilePrompt !=null){
|
||||||
r.setMsg(pilePrompt);
|
// r.setMsg(pilePrompt);
|
||||||
}else{
|
// }else{
|
||||||
r.setMsg("因限电该桩已停用,请选择其他桩进行充电");
|
// r.setMsg("因限电该桩已停用,请选择其他桩进行充电");
|
||||||
}
|
// }
|
||||||
|
r.setMsg("因限电该桩已停用请选择其他桩进行充电");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
//终端状态是否空闲
|
//终端状态是否空闲
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import com.xhpc.common.core.utils.SecurityUtils;
|
|||||||
import com.xhpc.common.core.web.domain.AjaxResult;
|
import com.xhpc.common.core.web.domain.AjaxResult;
|
||||||
import com.xhpc.common.core.web.service.BaseService;
|
import com.xhpc.common.core.web.service.BaseService;
|
||||||
import com.xhpc.common.data.redis.CacheRealtimeData;
|
import com.xhpc.common.data.redis.CacheRealtimeData;
|
||||||
|
import com.xhpc.common.enums.StopReasonEnum;
|
||||||
import com.xhpc.common.redis.service.RedisService;
|
import com.xhpc.common.redis.service.RedisService;
|
||||||
import com.xhpc.common.security.service.TokenService;
|
import com.xhpc.common.security.service.TokenService;
|
||||||
import com.xhpc.common.util.UserTypeUtil;
|
import com.xhpc.common.util.UserTypeUtil;
|
||||||
@ -363,6 +364,9 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1);
|
list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, String> reasonMap = StopReasonEnum.getMap();
|
||||||
|
list.stream().forEach(map->map.put("stopReasonEvcsStr", reasonMap.get(map.get("stopReasonEvcs"))));
|
||||||
|
|
||||||
// 通过工具类创建writer,默认创建xls格式
|
// 通过工具类创建writer,默认创建xls格式
|
||||||
BigExcelWriter writer = ExcelUtil.getBigWriter("HistoryOrder_" + System.currentTimeMillis() + ".xlsx");
|
BigExcelWriter writer = ExcelUtil.getBigWriter("HistoryOrder_" + System.currentTimeMillis() + ".xlsx");
|
||||||
writer.addHeaderAlias("historyOrderId", "历史订单ID");
|
writer.addHeaderAlias("historyOrderId", "历史订单ID");
|
||||||
@ -406,7 +410,8 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
writer.addHeaderAlias("endTime", "结束充电时间");
|
writer.addHeaderAlias("endTime", "结束充电时间");
|
||||||
writer.addHeaderAlias("updateTime", "结算时间");
|
writer.addHeaderAlias("updateTime", "结算时间");
|
||||||
writer.addHeaderAlias("chargingModeName", "订单来源");
|
writer.addHeaderAlias("chargingModeName", "订单来源");
|
||||||
writer.addHeaderAlias("stopReasonEvcs", "停止原因");
|
writer.addHeaderAlias("stopReasonEvcs", "停止原因代码");
|
||||||
|
writer.addHeaderAlias("stopReasonEvcsStr", "停止原因说明");
|
||||||
writer.addHeaderAlias("sourceName", "用户类型");
|
writer.addHeaderAlias("sourceName", "用户类型");
|
||||||
|
|
||||||
// writer.addHeaderAlias("plateNum", "电站名称");
|
// writer.addHeaderAlias("plateNum", "电站名称");
|
||||||
@ -514,7 +519,12 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
if(map !=null){
|
if(map !=null){
|
||||||
BigDecimal powerPriceTotal = new BigDecimal(map.get("powerPriceTotal").toString());
|
BigDecimal powerPriceTotal = new BigDecimal(map.get("powerPriceTotal").toString());
|
||||||
BigDecimal servicePriceTotal = new BigDecimal(map.get("servicePriceTotal").toString());
|
BigDecimal servicePriceTotal = new BigDecimal(map.get("servicePriceTotal").toString());
|
||||||
xhpcRealTimeOrderService.getExamine(chargeOrderId,powerPriceTotal,servicePriceTotal,null,null,null);
|
BigDecimal chargingDegree = new BigDecimal(map.get("chargingDegree").toString());
|
||||||
|
if(map.get("startTime")!=null && map.get("endTime")!=null){
|
||||||
|
xhpcRealTimeOrderService.getExamine(chargeOrderId,powerPriceTotal,servicePriceTotal,chargingDegree,map.get("startTime").toString(),map.get("endTime").toString());
|
||||||
|
}else{
|
||||||
|
xhpcRealTimeOrderService.getExamine(chargeOrderId,powerPriceTotal,servicePriceTotal,chargingDegree,null,null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -531,6 +541,7 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
|
|
||||||
BigDecimal powerPriceTotal = new BigDecimal(0);
|
BigDecimal powerPriceTotal = new BigDecimal(0);
|
||||||
BigDecimal servicePriceTotal = new BigDecimal(0);
|
BigDecimal servicePriceTotal = new BigDecimal(0);
|
||||||
|
BigDecimal divide = new BigDecimal(totalPower);
|
||||||
//累计充电时间、计费模型、开始时间、结束时间、已充金额
|
//累计充电时间、计费模型、开始时间、结束时间、已充金额
|
||||||
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getSerialNumberMessage(serialNumber);
|
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getSerialNumberMessage(serialNumber);
|
||||||
Long rateModelId = chargeOrder.getRateModelId();
|
Long rateModelId = chargeOrder.getRateModelId();
|
||||||
@ -540,24 +551,64 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
BigDecimal chargingDegree = new BigDecimal(totalPower);
|
BigDecimal chargingDegree = new BigDecimal(totalPower);
|
||||||
List<Map<String, Object>> list = new ArrayList<>();
|
List<Map<String, Object>> list = new ArrayList<>();
|
||||||
//1时间没有跨天
|
//1时间没有跨天
|
||||||
long betweenDay = DateUtil.between(startTime2, updateTime2, DateUnit.DAY);
|
DateTime parse = DateUtil.parse(DateUtil.format(startTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||||
|
DateTime parse1 = DateUtil.parse(DateUtil.format(updateTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||||
|
long betweenDay = DateUtil.between(parse, parse1, DateUnit.DAY);
|
||||||
if (betweenDay == 0) {
|
if (betweenDay == 0) {
|
||||||
return getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime2, chargingDegree, list);
|
return getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime2, chargingDegree, list);
|
||||||
} else {
|
} else {
|
||||||
//跨天
|
//当天晚上时间 23:59:59
|
||||||
|
Map<String, Object> map =new HashMap<>();
|
||||||
Date updateTime = DateUtil.endOfDay(startTime2);
|
Date updateTime = DateUtil.endOfDay(startTime2);
|
||||||
Map<String, Object> map1 = getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime, chargingDegree, list);
|
String format = DateUtil.format(updateTime, "yyyy-MM-dd HH:mm:ss");
|
||||||
//获取
|
|
||||||
// BigDecimal powerPriceTotal1 = new BigDecimal(map1.get("powerPriceTotal").toString());
|
|
||||||
// BigDecimal servicePriceTotal1 = new BigDecimal(map1.get("servicePriceTotal").toString());
|
|
||||||
//明天
|
|
||||||
DateTime tomorrow = DateUtil.offsetDay(startTime2, 1);
|
DateTime tomorrow = DateUtil.offsetDay(startTime2, 1);
|
||||||
Date startTime3 = DateUtil.beginOfDay(tomorrow);
|
Date startTime3 = DateUtil.beginOfDay(tomorrow);
|
||||||
Map<String, Object> map2 = getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime3, updateTime2, chargingDegree, list);
|
Map<String, Object> twentyFour = xhpcHistoryOrderMapper.getXhpcRealTimeOrderTwentyFour(chargeOrder.getChargeOrderId(), format);
|
||||||
return map2;
|
if(twentyFour !=null && twentyFour.get("chargingDegree")!=null){
|
||||||
|
BigDecimal chargingDegree1 = new BigDecimal(twentyFour.get("chargingDegree").toString());
|
||||||
|
BigDecimal decimal = divide.subtract(chargingDegree1);
|
||||||
|
if(chargingDegree1.compareTo(new BigDecimal(0))==0){
|
||||||
|
String start = DateUtil.formatTime(updateTime);
|
||||||
|
Map<String, Object> map1 = new HashMap<>();
|
||||||
|
map1.put("time", start+"-23:59:59");
|
||||||
|
map1.put("powerPrice", 0);
|
||||||
|
map1.put("servicePrice", 0);
|
||||||
|
map1.put("chargingDegree", 0);
|
||||||
|
map1.put("actPrice", 0);
|
||||||
|
list.add(map1);
|
||||||
|
map.put("list", list);//数据列表
|
||||||
|
map.putAll(getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime3, updateTime2, chargingDegree, list));
|
||||||
|
return map;
|
||||||
|
}else if(decimal.compareTo(new BigDecimal(0))==1){
|
||||||
|
map =getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime, chargingDegree1, list);
|
||||||
|
map.putAll(getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime3, updateTime2, decimal, list));;
|
||||||
|
return map;
|
||||||
|
}else{
|
||||||
|
String end = DateUtil.formatTime(updateTime2);
|
||||||
|
map.putAll(getBigDecimal(totalPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime, chargingDegree, list));
|
||||||
|
Map<String, Object> map1 = new HashMap<>();
|
||||||
|
map1.put("time", "00:00:00-"+end);
|
||||||
|
map1.put("powerPrice", 0);
|
||||||
|
map1.put("servicePrice", 0);
|
||||||
|
map1.put("chargingDegree", 0);
|
||||||
|
map1.put("actPrice", 0);
|
||||||
|
list.add(map1);
|
||||||
|
map.put("list", list);//
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Map<String, Object> getBigDecimal(String totalPrice, BigDecimal powerPriceTotal, BigDecimal servicePriceTotal, XhpcChargeOrder chargeOrder, Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, List<Map<String, Object>> list) {
|
private Map<String, Object> getBigDecimal(String totalPrice, BigDecimal powerPriceTotal, BigDecimal servicePriceTotal, XhpcChargeOrder chargeOrder, Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, List<Map<String, Object>> list) {
|
||||||
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
@ -777,4 +828,5 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis
|
|||||||
return sr;
|
return sr;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,8 +11,10 @@ import com.xhpc.common.core.domain.R;
|
|||||||
import com.xhpc.common.core.utils.SecurityUtils;
|
import com.xhpc.common.core.utils.SecurityUtils;
|
||||||
import com.xhpc.common.core.web.domain.AjaxResult;
|
import com.xhpc.common.core.web.domain.AjaxResult;
|
||||||
import com.xhpc.common.core.web.service.BaseService;
|
import com.xhpc.common.core.web.service.BaseService;
|
||||||
|
import com.xhpc.common.data.redis.CacheBmsReqChargerOutputData;
|
||||||
import com.xhpc.common.data.redis.CacheOrderData;
|
import com.xhpc.common.data.redis.CacheOrderData;
|
||||||
import com.xhpc.common.data.redis.CacheRealtimeData;
|
import com.xhpc.common.data.redis.CacheRealtimeData;
|
||||||
|
import com.xhpc.common.domain.XhpcRate;
|
||||||
import com.xhpc.common.enums.StopReasonEnum;
|
import com.xhpc.common.enums.StopReasonEnum;
|
||||||
import com.xhpc.common.redis.service.RedisService;
|
import com.xhpc.common.redis.service.RedisService;
|
||||||
import com.xhpc.common.security.service.TokenService;
|
import com.xhpc.common.security.service.TokenService;
|
||||||
@ -134,11 +136,28 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AjaxResult timeChartList(Long chargingOrderId) {
|
public List<Map<String, Object>> timeBmsList(Long chargingOrderId) {
|
||||||
|
return xhpcRealTimeOrderMapper.timeBmsList(chargingOrderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AjaxResult timeChartListVoltage(Long chargingOrderId) {
|
||||||
|
Map<String,Object> map =new HashMap();
|
||||||
|
map.put("voltage",xhpcRealTimeOrderMapper.timeChartVoltageList(chargingOrderId));
|
||||||
|
return AjaxResult.success(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AjaxResult timeChartListCurrent(Long chargingOrderId) {
|
||||||
|
Map<String,Object> map =new HashMap();
|
||||||
|
map.put("current",xhpcRealTimeOrderMapper.timeChartCurrentList(chargingOrderId));
|
||||||
|
return AjaxResult.success(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AjaxResult timeChartListSoc(Long chargingOrderId) {
|
||||||
Map<String,Object> map =new HashMap();
|
Map<String,Object> map =new HashMap();
|
||||||
map.put("soc",xhpcRealTimeOrderMapper.timeChartSOCList(chargingOrderId));
|
map.put("soc",xhpcRealTimeOrderMapper.timeChartSOCList(chargingOrderId));
|
||||||
map.put("voltage",xhpcRealTimeOrderMapper.timeChartVoltageList(chargingOrderId));
|
|
||||||
map.put("current",xhpcRealTimeOrderMapper.timeChartCurrentList(chargingOrderId));
|
|
||||||
return AjaxResult.success(map);
|
return AjaxResult.success(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,6 +166,40 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
return xhpcRealTimeOrderMapper.insertXhpcRealTimeOrder(xhpcRealTimeOrder);
|
return xhpcRealTimeOrderMapper.insertXhpcRealTimeOrder(xhpcRealTimeOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条实时订单的BMS
|
||||||
|
*
|
||||||
|
* @param orderNo
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void addRealTimeOrderBms(String orderNo) {
|
||||||
|
CacheBmsReqChargerOutputData cacheBmsReqChargerOutputData = redisService.getCacheObject("order:" + orderNo + ".bms");
|
||||||
|
if(cacheBmsReqChargerOutputData !=null){
|
||||||
|
XhpcRealTimeOrderBms xhpcRealTimeOrderBms = new XhpcRealTimeOrderBms();
|
||||||
|
BeanUtils.copyProperties(cacheBmsReqChargerOutputData, xhpcRealTimeOrderBms);
|
||||||
|
Integer bmsEstRemainingTime = cacheBmsReqChargerOutputData.getBmsEstRemainingTime();
|
||||||
|
Integer chargingTimeSummary = cacheBmsReqChargerOutputData.getChargingTimeSummary();
|
||||||
|
if (bmsEstRemainingTime > 60) {
|
||||||
|
Integer hours = bmsEstRemainingTime / 60;
|
||||||
|
Integer mins = bmsEstRemainingTime - (hours * 60);
|
||||||
|
xhpcRealTimeOrderBms.setBmsEstRemainingTime(hours + "时" + mins + "分");
|
||||||
|
} else {
|
||||||
|
xhpcRealTimeOrderBms.setBmsEstRemainingTime(bmsEstRemainingTime + "分");
|
||||||
|
}
|
||||||
|
if (chargingTimeSummary > 60) {
|
||||||
|
Integer hours = chargingTimeSummary / 60;
|
||||||
|
Integer mins = chargingTimeSummary - (hours * 60);
|
||||||
|
xhpcRealTimeOrderBms.setChargingTimeSummary(hours + "时" + mins + "分");
|
||||||
|
} else {
|
||||||
|
xhpcRealTimeOrderBms.setChargingTimeSummary(chargingTimeSummary + "分");
|
||||||
|
}
|
||||||
|
XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo);
|
||||||
|
xhpcRealTimeOrderBms.setChargingOrderId(xhpcChargeOrder.getChargeOrderId());
|
||||||
|
xhpcRealTimeOrderMapper.insertRealTimeOrderBms(xhpcRealTimeOrderBms);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int addSOC(XhpcChargeOrderSoc xhpcChargeOrderSoc) {
|
public int addSOC(XhpcChargeOrderSoc xhpcChargeOrderSoc) {
|
||||||
return xhpcRealTimeOrderMapper.insertSOC(xhpcChargeOrderSoc);
|
return xhpcRealTimeOrderMapper.insertSOC(xhpcChargeOrderSoc);
|
||||||
@ -165,7 +218,6 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> getExamineMessage(Long realTimeOrderId,Long chargeOrderId) {
|
public Map<String, Object> getExamineMessage(Long realTimeOrderId,Long chargeOrderId) {
|
||||||
|
|
||||||
if(realTimeOrderId==null){
|
if(realTimeOrderId==null){
|
||||||
Map<String, Object> message = xhpcRealTimeOrderMapper.getMessageChargeOrderId(chargeOrderId);
|
Map<String, Object> message = xhpcRealTimeOrderMapper.getMessageChargeOrderId(chargeOrderId);
|
||||||
message.put("powerPriceTotal",0);
|
message.put("powerPriceTotal",0);
|
||||||
@ -175,145 +227,254 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
//基本信息
|
//基本信息
|
||||||
Map<String, Object> message = xhpcRealTimeOrderMapper.getMessage(realTimeOrderId);
|
Map<String, Object> message = xhpcRealTimeOrderMapper.getMessage(realTimeOrderId);
|
||||||
try{
|
try{
|
||||||
if(message ==null || message.get("chargeOrderId") ==null){
|
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString()));
|
||||||
|
Map<String, Object> cacheMap = redisService.getCacheMap("order:" + chargeOrder.getSerialNumber());
|
||||||
|
if (cacheMap !=null && cacheMap.get("startTime")!=null && cacheMap.get("lastOrderTime")!=null) {
|
||||||
|
String startTime = cacheMap.get("startTime").toString();
|
||||||
|
String lastOrderTime = cacheMap.get("lastOrderTime").toString();
|
||||||
|
chargeOrder.setStartTime(DateUtil.parse(startTime));
|
||||||
|
chargeOrder.setEndTime(DateUtil.parse(lastOrderTime));
|
||||||
|
message.put("startTime",startTime);
|
||||||
|
message.put("endTime",lastOrderTime);
|
||||||
|
if (cacheMap.get("totalPower")!=null && cacheMap.get("totalMoney")!=null) {
|
||||||
|
String totalPower = cacheMap.get("totalPower").toString();
|
||||||
|
//String totalPowerSub = totalPower.substring(0, totalPower.length() - 1);
|
||||||
|
String totalMoney = cacheMap.get("totalMoney").toString();
|
||||||
|
//String totalMoneySub = totalMoney.substring(0, totalMoney.length() - 1);
|
||||||
|
chargeOrder.setChargingDegree(new BigDecimal(totalPower));
|
||||||
|
chargeOrder.setAmountCharged(new BigDecimal(totalMoney));
|
||||||
|
message.put("chargingDegree",new BigDecimal(totalPower));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(message.get("chargeOrderId") == null){
|
||||||
message.put("powerPriceTotal",0);
|
message.put("powerPriceTotal",0);
|
||||||
message.put("servicePriceTotal",0);
|
message.put("servicePriceTotal",0);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
//获取开始充电时间、结束时间、计费模型、充电度数、已充金额
|
//获取开始充电时间、结束时间、计费模型、充电度数、已充金额
|
||||||
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString()));
|
|
||||||
|
|
||||||
//获取该订单最后一条实时数据
|
if(chargeOrder.getRateModelId()==null || "".equals(chargeOrder.getRateModelId().toString())){
|
||||||
Map<String, Object> cacheMap = redisService.getCacheMap("order:" + chargeOrder.getSerialNumber());
|
Map<String, Object> xhpcChargingStationMap = xhpcRealTimeOrderMapper.getXhpcChargingStationById(chargeOrder.getChargingStationId());
|
||||||
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
|
chargeOrder.setRateModelId(Long.valueOf(xhpcChargingStationMap.get("rateModelId").toString()));
|
||||||
|
|
||||||
CacheRealtimeData startData =new CacheRealtimeData();
|
|
||||||
CacheRealtimeData endData =new CacheRealtimeData();
|
|
||||||
|
|
||||||
if (list != null && list.size() > 0) {
|
|
||||||
endData =list.get(list.size()-1);
|
|
||||||
for (int i = 0; i <list.size() ; i++) {
|
|
||||||
startData =list.get(i);
|
|
||||||
if(startData.getAmountCharged()>0 && startData.getChargingTime()>0){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
//获取该订单最后一条实时数据
|
||||||
|
|
||||||
Long rateModelId = chargeOrder.getRateModelId();
|
Long rateModelId = chargeOrder.getRateModelId();
|
||||||
|
if(cacheMap !=null && cacheMap.get("orderData") !=null){
|
||||||
if(endData !=null && endData.getAmountCharged() !=null && startData.getChargingTime()>0){
|
CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData");
|
||||||
|
BigDecimal bigDecimal = new BigDecimal(10000);
|
||||||
message.put("soc",endData.getSoc());
|
BigDecimal money = new BigDecimal(cacheOrderData.getCost()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP);
|
||||||
//最后一祯时间
|
//00: 尖费率 01: 峰费率 02: 平费率 03: 谷费率
|
||||||
Date endTime = DateUtil.parse(endData.getCreateTime());
|
BigDecimal t1powerFee =new BigDecimal(0);
|
||||||
Date startTime =DateUtil.parse(startData.getCreateTime());
|
BigDecimal t2powerFee =new BigDecimal(0);
|
||||||
//充电时长
|
BigDecimal t3powerFee =new BigDecimal(0);
|
||||||
Long tiem = (endTime.getTime() - startTime.getTime()) / 1000;
|
BigDecimal t4powerFee =new BigDecimal(0);
|
||||||
if (tiem > 3600) {
|
BigDecimal t1serviceFee =new BigDecimal(0);
|
||||||
long hours = tiem / 3600;
|
BigDecimal t2serviceFee =new BigDecimal(0);
|
||||||
double mins = (double) ((tiem - (hours * 3600)) / 60);
|
BigDecimal t3serviceFee =new BigDecimal(0);
|
||||||
message.put("chargingTime",hours + "时" + new BigDecimal(mins).setScale(0) + "分");
|
BigDecimal t4serviceFee =new BigDecimal(0);
|
||||||
chargeOrder.setChargingTime(hours + "时" + new BigDecimal(mins).setScale(0) + "分");
|
//费率计费模型
|
||||||
} else {
|
List<XhpcRate> rateModelList = xhpcChargeOrderService.getRateModelId(rateModelId);
|
||||||
double mins = (double) (tiem / 60);
|
for (XhpcRate xhpcRate:rateModelList) {
|
||||||
message.put("chargingTime",new BigDecimal(mins).setScale(0) + "分");
|
if("00".equals(xhpcRate.getRateValue())){
|
||||||
chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "分");
|
t1powerFee = xhpcRate.getPowerFee();
|
||||||
|
t1serviceFee =xhpcRate.getServiceFee();
|
||||||
|
}
|
||||||
|
if("01".equals(xhpcRate.getRateValue())){
|
||||||
|
t2powerFee = xhpcRate.getPowerFee();
|
||||||
|
t2serviceFee =xhpcRate.getServiceFee();
|
||||||
|
}
|
||||||
|
if("02".equals(xhpcRate.getRateValue())){
|
||||||
|
t3powerFee = xhpcRate.getPowerFee();
|
||||||
|
t3serviceFee = xhpcRate.getServiceFee();
|
||||||
|
}
|
||||||
|
if("03".equals(xhpcRate.getRateValue())){
|
||||||
|
t4powerFee = xhpcRate.getPowerFee();
|
||||||
|
t4serviceFee =xhpcRate.getServiceFee();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
BigDecimal chargingDegree = new BigDecimal(endData.getChargingDegree()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
|
BigDecimal powerPrice =new BigDecimal(0);
|
||||||
message.put("chargingDegree",chargingDegree);
|
BigDecimal servicePrice =new BigDecimal(0);
|
||||||
|
//因桩有误差,电费和服务费重新计算
|
||||||
chargeOrder.setStartTime(startTime);
|
if(!"0".equals(cacheOrderData.getT1PowerQuantity().toString())){
|
||||||
chargeOrder.setEndTime(endTime);
|
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
chargeOrder.setStartSoc(startData.getSoc().toString());
|
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
chargeOrder.setEndSoc(endData.getSoc().toString());
|
powerPrice=powerPrice.add(multiply1);
|
||||||
chargeOrder.setChargingTimeNumber(tiem);
|
servicePrice=servicePrice.add(multiply2);
|
||||||
chargeOrder.setChargingDegree(chargingDegree);
|
}
|
||||||
chargeOrder.setType("平台停止");
|
if(!"0".equals(cacheOrderData.getT2PowerQuantity().toString())){
|
||||||
chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
|
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
powerPrice=powerPrice.add(multiply1);
|
||||||
|
servicePrice=servicePrice.add(multiply2);
|
||||||
|
}
|
||||||
|
if(!"0".equals(cacheOrderData.getT3PowerQuantity().toString())){
|
||||||
|
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
powerPrice=powerPrice.add(multiply1);
|
||||||
|
servicePrice=servicePrice.add(multiply2);
|
||||||
|
}
|
||||||
|
if(!"0".equals(cacheOrderData.getT4PowerQuantity().toString())){
|
||||||
|
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
powerPrice=powerPrice.add(multiply1);
|
||||||
|
servicePrice=servicePrice.add(multiply2);
|
||||||
|
}
|
||||||
|
powerPrice =powerPrice.setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||||
|
//总服务费
|
||||||
|
servicePrice =servicePrice.setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||||
|
message.put("powerPriceTotal",powerPrice);
|
||||||
|
message.put("servicePriceTotal",servicePrice);
|
||||||
|
chargeOrder.setStartTime(DateUtil.parse(cacheOrderData.getStartTime()));
|
||||||
|
chargeOrder.setEndTime(DateUtil.parse(cacheOrderData.getEndTime()));
|
||||||
|
if(cacheOrderData.getStartSoc() !=null){
|
||||||
|
chargeOrder.setStartSoc(cacheOrderData.getStartSoc()+"");
|
||||||
|
}
|
||||||
|
if(cacheOrderData.getEndTime() !=null){
|
||||||
|
chargeOrder.setEndSoc(cacheOrderData.getEndSoc()+"");
|
||||||
|
}
|
||||||
|
if(cacheOrderData.getTotalPowerQuantity() !=null){
|
||||||
|
BigDecimal chargingDegree1 = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP);
|
||||||
|
chargeOrder.setChargingDegree(chargingDegree1);
|
||||||
|
}
|
||||||
|
chargeOrder.setAmountCharged(money);
|
||||||
}else{
|
}else{
|
||||||
//当没有缓存数据时,查询数据库
|
if (cacheMap.get("startTime")!=null && cacheMap.get("lastOrderTime")!=null) {
|
||||||
XhpcRealTimeOrder startRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 1);
|
chargeOrder.setStartTime(DateUtil.parse(cacheMap.get("startTime").toString()));
|
||||||
|
chargeOrder.setEndTime(DateUtil.parse(cacheMap.get("lastOrderTime").toString()));
|
||||||
if(startRealTimeOrder ==null){
|
if (cacheMap.get("totalPower")!=null && cacheMap.get("totalMoney")!=null) {
|
||||||
message.put("powerPriceTotal",0);
|
String totalPower = cacheMap.get("totalPower").toString();
|
||||||
message.put("servicePriceTotal",0);
|
//String totalPowerSub = totalPower.substring(0, totalPower.length() - 1);
|
||||||
return message;
|
String totalMoney = cacheMap.get("totalMoney").toString();
|
||||||
}
|
chargeOrder.setChargingDegree(new BigDecimal(totalPower));
|
||||||
XhpcRealTimeOrder endRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 2);
|
chargeOrder.setAmountCharged(new BigDecimal(totalMoney));
|
||||||
|
}
|
||||||
message.put("soc",endRealTimeOrder.getSoc());
|
|
||||||
//最后一祯时间
|
|
||||||
Date endTime = endRealTimeOrder.getCreateTime();
|
|
||||||
Date startTime = startRealTimeOrder.getCreateTime();
|
|
||||||
|
|
||||||
BigDecimal chargingDegree = endRealTimeOrder.getChargingDegree();
|
|
||||||
message.put("chargingDegree",chargingDegree);
|
|
||||||
chargeOrder.setChargingTime(endRealTimeOrder.getChargingTime());
|
|
||||||
message.put("chargingTime",endRealTimeOrder.getChargingTime());
|
|
||||||
|
|
||||||
if(startRealTimeOrder.getRealTimeOrderId().equals(startRealTimeOrder.getRealTimeOrderId())){
|
|
||||||
message.put("powerPriceTotal",0);
|
|
||||||
message.put("servicePriceTotal",0);
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
chargeOrder.setStartTime(startTime);
|
|
||||||
chargeOrder.setEndTime(endTime);
|
|
||||||
chargeOrder.setStartSoc(startRealTimeOrder.getSoc());
|
|
||||||
chargeOrder.setEndSoc(endRealTimeOrder.getSoc());
|
|
||||||
Integer chargingTimeNumber = endRealTimeOrder.getChargingTimeNumber();
|
|
||||||
if(chargingTimeNumber>0){
|
|
||||||
chargeOrder.setChargingTimeNumber(Long.valueOf(chargingTimeNumber*60));
|
|
||||||
}else{
|
}else{
|
||||||
chargeOrder.setChargingTimeNumber(0L);
|
//没有获取到时间 1.获取缓存数据 2.缓存没有获取数据库数据
|
||||||
|
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
|
||||||
|
|
||||||
|
CacheRealtimeData startData =new CacheRealtimeData();
|
||||||
|
CacheRealtimeData endData =new CacheRealtimeData();
|
||||||
|
|
||||||
|
if (list != null && list.size() > 0) {
|
||||||
|
endData =list.get(list.size()-1);
|
||||||
|
for (int i = 0; i <list.size() ; i++) {
|
||||||
|
startData =list.get(i);
|
||||||
|
if(startData.getAmountCharged()>0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(endData !=null && endData.getAmountCharged() !=null && startData.getChargingTime()>0){
|
||||||
|
//最后一祯时间
|
||||||
|
Date endTime = DateUtil.parse(endData.getCreateTime());
|
||||||
|
Date startTime =DateUtil.parse(startData.getCreateTime());
|
||||||
|
//充电时长
|
||||||
|
BigDecimal chargingDegree = new BigDecimal(endData.getChargingDegree()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
chargeOrder.setStartTime(startTime);
|
||||||
|
chargeOrder.setEndTime(endTime);
|
||||||
|
chargeOrder.setStartSoc(startData.getSoc().toString());
|
||||||
|
chargeOrder.setEndSoc(endData.getSoc().toString());
|
||||||
|
chargeOrder.setChargingDegree(chargingDegree);
|
||||||
|
chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
|
||||||
|
}else{
|
||||||
|
//当没有缓存数据时,查询数据库
|
||||||
|
XhpcRealTimeOrder startRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 1);
|
||||||
|
if(startRealTimeOrder ==null){
|
||||||
|
message.put("powerPriceTotal",0);
|
||||||
|
message.put("servicePriceTotal",0);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
XhpcRealTimeOrder endRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 2);
|
||||||
|
//最后一祯时间
|
||||||
|
Date endTime = endRealTimeOrder.getCreateTime();
|
||||||
|
Date startTime = startRealTimeOrder.getCreateTime();
|
||||||
|
BigDecimal chargingDegree = endRealTimeOrder.getChargingDegree();
|
||||||
|
chargeOrder.setChargingTime(endRealTimeOrder.getChargingTime());
|
||||||
|
if(startRealTimeOrder.getRealTimeOrderId().equals(startRealTimeOrder.getRealTimeOrderId())){
|
||||||
|
message.put("powerPriceTotal",0);
|
||||||
|
message.put("servicePriceTotal",0);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
chargeOrder.setStartTime(startTime);
|
||||||
|
chargeOrder.setEndTime(endTime);
|
||||||
|
chargeOrder.setStartSoc(startRealTimeOrder.getSoc());
|
||||||
|
chargeOrder.setEndSoc(endRealTimeOrder.getSoc());
|
||||||
|
Integer chargingTimeNumber = endRealTimeOrder.getChargingTimeNumber();
|
||||||
|
if(chargingTimeNumber>0){
|
||||||
|
chargeOrder.setChargingTimeNumber(Long.valueOf(chargingTimeNumber*60));
|
||||||
|
}else{
|
||||||
|
chargeOrder.setChargingTimeNumber(0L);
|
||||||
|
}
|
||||||
|
chargeOrder.setChargingDegree(chargingDegree);
|
||||||
|
|
||||||
|
chargeOrder.setAmountCharged(endRealTimeOrder.getAmountCharged());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Date startTime2 = chargeOrder.getStartTime();
|
||||||
|
Date updateTime2 = chargeOrder.getEndTime();
|
||||||
|
BigDecimal amountCharged = chargeOrder.getAmountCharged();
|
||||||
|
//充电度数
|
||||||
|
BigDecimal chargingDegree = chargeOrder.getChargingDegree();
|
||||||
|
BigDecimal powerPriceTotal =new BigDecimal(0);
|
||||||
|
//1时间没有跨天
|
||||||
|
DateTime parse = DateUtil.parse(DateUtil.format(startTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||||
|
DateTime parse1 = DateUtil.parse(DateUtil.format(updateTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
||||||
|
//每分钟多少度电
|
||||||
|
BigDecimal decimal = new BigDecimal((updateTime2.getTime() - startTime2.getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP);
|
||||||
|
BigDecimal divide = chargingDegree.divide(decimal,4,BigDecimal.ROUND_HALF_UP);
|
||||||
|
long betweenDay = DateUtil.between(parse,parse1, DateUnit.DAY);
|
||||||
|
if(betweenDay==0){
|
||||||
|
powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
|
||||||
|
}else{
|
||||||
|
//跨天
|
||||||
|
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", powerPriceTotal, divide);
|
||||||
|
System.out.println(">>>>>>跨天前>>>>>>>"+powerPriceTotal);
|
||||||
|
//明天
|
||||||
|
DateTime tomorrow = DateUtil.offsetDay(startTime2,1);
|
||||||
|
Date startTime3 = DateUtil.beginOfDay(tomorrow);
|
||||||
|
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
|
||||||
|
System.out.println(">>>>>>跨天后>>>>>>>"+powerPriceTotal);
|
||||||
|
}
|
||||||
|
//算服务费和电费
|
||||||
|
if(amountCharged.compareTo(powerPriceTotal)>-1){
|
||||||
|
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
|
||||||
|
message.put("powerPriceTotal",powerPriceTotal);
|
||||||
|
message.put("servicePriceTotal",servicePriceTotal);
|
||||||
|
}else{
|
||||||
|
message.put("powerPriceTotal",amountCharged);
|
||||||
|
message.put("servicePriceTotal",0);
|
||||||
}
|
}
|
||||||
chargeOrder.setChargingDegree(chargingDegree);
|
|
||||||
chargeOrder.setType("平台停止充电");
|
|
||||||
chargeOrder.setAmountCharged(endRealTimeOrder.getAmountCharged());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Date startTime2 = chargeOrder.getStartTime();
|
message.put("chargingDegree",chargeOrder.getChargingDegree());
|
||||||
Date updateTime2 = chargeOrder.getEndTime();
|
Long tiem = (chargeOrder.getEndTime().getTime() - chargeOrder.getStartTime().getTime()) / 1000;
|
||||||
BigDecimal amountCharged = chargeOrder.getAmountCharged();
|
if (tiem > 3600) {
|
||||||
//充电度数
|
long hours = tiem / 3600;
|
||||||
BigDecimal chargingDegree = chargeOrder.getChargingDegree();
|
double mins = (double) ((tiem - (hours * 3600)) / 60);
|
||||||
BigDecimal powerPriceTotal =new BigDecimal(0);
|
message.put("chargingTime",hours + "时" + new BigDecimal(mins).setScale(0) + "分");
|
||||||
//1时间没有跨天
|
chargeOrder.setChargingTime(hours + "时" + new BigDecimal(mins).setScale(0) + "分");
|
||||||
DateTime parse = DateUtil.parse(DateUtil.format(startTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
} else {
|
||||||
DateTime parse1 = DateUtil.parse(DateUtil.format(updateTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
|
double mins = (double) (tiem / 60);
|
||||||
//每分钟多少度电
|
message.put("chargingTime",new BigDecimal(mins).setScale(0) + "分");
|
||||||
BigDecimal decimal = new BigDecimal((updateTime2.getTime() - startTime2.getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP);
|
chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "分");
|
||||||
BigDecimal divide = chargingDegree.divide(decimal,4,BigDecimal.ROUND_HALF_UP);
|
}
|
||||||
long betweenDay = DateUtil.between(parse,parse1, DateUnit.DAY);
|
message.put("startSoc",chargeOrder.getStartSoc());
|
||||||
if(betweenDay==0){
|
message.put("endSoc",chargeOrder.getEndSoc());
|
||||||
powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
|
|
||||||
|
if(cacheMap.get("stopReasonHex") !=null && "".equals(cacheMap.get("stopReasonHex").toString())){
|
||||||
|
chargeOrder.setType(cacheMap.get("stopReasonHex").toString());
|
||||||
}else{
|
}else{
|
||||||
//跨天
|
chargeOrder.setType("90");
|
||||||
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", powerPriceTotal, divide);
|
|
||||||
System.out.println(">>>>>>跨天前>>>>>>>"+powerPriceTotal);
|
|
||||||
//明天
|
|
||||||
DateTime tomorrow = DateUtil.offsetDay(startTime2,1);
|
|
||||||
Date startTime3 = DateUtil.beginOfDay(tomorrow);
|
|
||||||
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
|
|
||||||
System.out.println(">>>>>>跨天后>>>>>>>"+powerPriceTotal);
|
|
||||||
}
|
}
|
||||||
|
message.put("startTime",chargeOrder.getStartTime());
|
||||||
//算服务费和电费
|
message.put("endTime",chargeOrder.getEndTime());
|
||||||
if(amountCharged.compareTo(powerPriceTotal)>-1){
|
|
||||||
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
|
|
||||||
message.put("powerPriceTotal",powerPriceTotal);
|
|
||||||
message.put("servicePriceTotal",servicePriceTotal);
|
|
||||||
}else{
|
|
||||||
message.put("powerPriceTotal",amountCharged);
|
|
||||||
message.put("servicePriceTotal",0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//修改充电订单
|
//修改充电订单
|
||||||
xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder);
|
xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder);
|
||||||
|
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
logger.info("======================异常订单审核异常=======================");
|
||||||
message.put("powerPriceTotal",0);
|
message.put("powerPriceTotal",0);
|
||||||
message.put("servicePriceTotal",0);
|
message.put("servicePriceTotal",0);
|
||||||
}
|
}
|
||||||
@ -334,6 +495,10 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
|
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
if(xhpcChargeOrder.getRateModelId()==null || "".equals(xhpcChargeOrder.getRateModelId())){
|
||||||
|
Map<String, Object> xhpcChargingStationMap = xhpcRealTimeOrderMapper.getXhpcChargingStationById(xhpcChargeOrder.getChargingStationId());
|
||||||
|
xhpcChargeOrder.setRateModelId(Long.valueOf(xhpcChargingStationMap.get("rateModelId").toString()));
|
||||||
|
}
|
||||||
//总金额
|
//总金额
|
||||||
BigDecimal money = powerPrice.add(servicePrice);
|
BigDecimal money = powerPrice.add(servicePrice);
|
||||||
//总服务费 servicePrice
|
//总服务费 servicePrice
|
||||||
@ -1535,6 +1700,8 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
|
|||||||
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
|
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private BigDecimal getBigDecimal(Long rateModelId, String startTime, String updateTime, BigDecimal powerPriceTotal, BigDecimal divide) {
|
private BigDecimal getBigDecimal(Long rateModelId, String startTime, String updateTime, BigDecimal powerPriceTotal, BigDecimal divide) {
|
||||||
if("00:00:00".equals(updateTime)){
|
if("00:00:00".equals(updateTime)){
|
||||||
updateTime="23:59:59";
|
updateTime="23:59:59";
|
||||||
|
|||||||
@ -1530,6 +1530,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati
|
|||||||
int freeTime =0;//空闲
|
int freeTime =0;//空闲
|
||||||
int charge =0;//充电
|
int charge =0;//充电
|
||||||
int unknown =0;//未知
|
int unknown =0;//未知
|
||||||
|
int insertGun =0;//已插枪
|
||||||
if(terminal !=null && terminal.size()>0){
|
if(terminal !=null && terminal.size()>0){
|
||||||
for (String st:terminal) {
|
for (String st:terminal) {
|
||||||
Map<String, Object> cacheMap = redisService.getCacheMap("gun:" + st);
|
Map<String, Object> cacheMap = redisService.getCacheMap("gun:" + st);
|
||||||
@ -1542,7 +1543,11 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati
|
|||||||
fault++;
|
fault++;
|
||||||
}else if(cacheMap.containsKey("status") &&
|
}else if(cacheMap.containsKey("status") &&
|
||||||
"空闲".equals(cacheMap.get("status").toString())){
|
"空闲".equals(cacheMap.get("status").toString())){
|
||||||
freeTime++;
|
if("是".equals(cacheMap.get("vehicleGunStatus").toString())){
|
||||||
|
insertGun++;
|
||||||
|
}else{
|
||||||
|
freeTime++;
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
charge++;
|
charge++;
|
||||||
}
|
}
|
||||||
@ -1586,6 +1591,12 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati
|
|||||||
mapList4.add(objectMap4);
|
mapList4.add(objectMap4);
|
||||||
mapList.addAll(mapList4);
|
mapList.addAll(mapList4);
|
||||||
|
|
||||||
|
List<Map<String,Object>> mapList5 =new ArrayList<>();
|
||||||
|
Map<String,Object> objectMap5 =new HashMap<>();
|
||||||
|
objectMap5.put("name","已插枪");
|
||||||
|
objectMap5.put("value",insertGun);
|
||||||
|
mapList5.add(objectMap5);
|
||||||
|
mapList.addAll(mapList5);
|
||||||
return mapList;
|
return mapList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,10 +14,10 @@ spring:
|
|||||||
nacos:
|
nacos:
|
||||||
discovery:
|
discovery:
|
||||||
# 服务注册地址
|
# 服务注册地址
|
||||||
server-addr: 172.31.183.135:8848
|
server-addr: mse-e2a05960-nacos-ans.mse.aliyuncs.com:8848
|
||||||
config:
|
config:
|
||||||
# 配置中心地址
|
# 配置中心地址
|
||||||
server-addr: 172.31.183.135:8848
|
server-addr: mse-e2a05960-nacos-ans.mse.aliyuncs.com:8848
|
||||||
# 配置文件格式
|
# 配置文件格式
|
||||||
file-extension: yml
|
file-extension: yml
|
||||||
# 共享配置
|
# 共享配置
|
||||||
|
|||||||
@ -1162,7 +1162,7 @@
|
|||||||
<if test="isNotNull==1">
|
<if test="isNotNull==1">
|
||||||
and ho.total_price >=0
|
and ho.total_price >=0
|
||||||
</if>
|
</if>
|
||||||
order by ho.create_time desc
|
order by ho.end_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getReatTimeList" resultType="map">
|
<select id="getReatTimeList" resultType="map">
|
||||||
@ -1616,4 +1616,12 @@
|
|||||||
and serial_number=#{serialNumber}
|
and serial_number=#{serialNumber}
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getXhpcRealTimeOrderTwentyFour" resultType="map">
|
||||||
|
select max(real_time_order_id),
|
||||||
|
amount_charged as amountCharged,
|
||||||
|
charging_degree as chargingDegree
|
||||||
|
from xhpc_real_time_order where create_time <= #{time} and charging_order_id=#{chargingOrderId}
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@ -212,6 +212,105 @@
|
|||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<insert id="insertRealTimeOrderBms" >
|
||||||
|
insert into xhpc_real_time_order_bms
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="null != orderNo and orderNo !=''">
|
||||||
|
order_no,
|
||||||
|
</if>
|
||||||
|
<if test="null != pileNo and pileNo!=''">
|
||||||
|
pile_no,
|
||||||
|
</if>
|
||||||
|
<if test="null != gunId and gunId!='' ">
|
||||||
|
gun_id,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsVoltageRequest ">
|
||||||
|
bms_voltage_request,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsCurrentRequest ">
|
||||||
|
bms_current_request,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsChargingMod ">
|
||||||
|
bms_charging_mod,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsChargingVolt ">
|
||||||
|
bms_charging_volt,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsChargingCurrent ">
|
||||||
|
bms_charging_current,
|
||||||
|
</if>
|
||||||
|
<if test="null != soc ">
|
||||||
|
soc,
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsEstRemainingTime and bmsEstRemainingTime !=''">
|
||||||
|
bms_est_remaining_time,
|
||||||
|
</if>
|
||||||
|
<if test="null != pileVoltageOutput ">
|
||||||
|
pile_voltage_output,
|
||||||
|
</if>
|
||||||
|
<if test="null != pileCurrentOutput ">
|
||||||
|
pile_current_output,
|
||||||
|
</if>
|
||||||
|
<if test="null != chargingTimeSummary and chargingTimeSummary !=''">
|
||||||
|
charging_time_summary,
|
||||||
|
</if>
|
||||||
|
<if test="null != monoBatteryVoltGroupId ">
|
||||||
|
mono_battery_volt_groupId,
|
||||||
|
</if>
|
||||||
|
<if test="null != chargingOrderId ">
|
||||||
|
charging_order_id,
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="null != orderNo and orderNo !=''">
|
||||||
|
#{orderNo},
|
||||||
|
</if>
|
||||||
|
<if test="null != pileNo and pileNo!=''">
|
||||||
|
#{pileNo},
|
||||||
|
</if>
|
||||||
|
<if test="null != gunId and gunId!='' ">
|
||||||
|
#{gunId},
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsVoltageRequest ">
|
||||||
|
#{bmsVoltageRequest},
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsCurrentRequest ">
|
||||||
|
#{bmsCurrentRequest},
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsChargingMod ">
|
||||||
|
#{bmsChargingMod},
|
||||||
|
</if>
|
||||||
|
<if test="null != monoBatteryVolt ">
|
||||||
|
#{monoBatteryVolt},
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsChargingCurrent ">
|
||||||
|
#{bmsChargingCurrent},
|
||||||
|
</if>
|
||||||
|
<if test="null != soc ">
|
||||||
|
#{soc},
|
||||||
|
</if>
|
||||||
|
<if test="null != bmsEstRemainingTime and bmsEstRemainingTime!=''">
|
||||||
|
#{bmsEstRemainingTime},
|
||||||
|
</if>
|
||||||
|
<if test="null != pileVoltageOutput ">
|
||||||
|
#{pileVoltageOutput},
|
||||||
|
</if>
|
||||||
|
<if test="null != pileCurrentOutput ">
|
||||||
|
#{pileCurrentOutput},
|
||||||
|
</if>
|
||||||
|
<if test="null != chargingTimeSummary and chargingTimeSummary!=''">
|
||||||
|
#{chargingTimeSummary},
|
||||||
|
</if>
|
||||||
|
<if test="null != monoBatteryVoltGroupId ">
|
||||||
|
#{monoBatteryVoltGroupId},
|
||||||
|
</if>
|
||||||
|
<if test="null != chargingOrderId ">
|
||||||
|
#{chargingOrderId},
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
|
||||||
<insert id="insertSOC" parameterType="com.xhpc.order.domain.XhpcChargeOrderSoc" useGeneratedKeys="true"
|
<insert id="insertSOC" parameterType="com.xhpc.order.domain.XhpcChargeOrderSoc" useGeneratedKeys="true"
|
||||||
keyProperty="chargeOrderSocId">
|
keyProperty="chargeOrderSocId">
|
||||||
insert into xhpc_charge_order_soc
|
insert into xhpc_charge_order_soc
|
||||||
@ -547,6 +646,13 @@
|
|||||||
where ro.real_time_order_id=#{realTimeOrderId}
|
where ro.real_time_order_id=#{realTimeOrderId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getXhpcChargingStationById" resultType="map">
|
||||||
|
select
|
||||||
|
charging_station_id chargingStationId,
|
||||||
|
rate_model_id as rateModelId
|
||||||
|
from xhpc_charging_station where charging_station_id=#{chargingStationId}
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="getMessageChargeOrderId" resultType="map">
|
<select id="getMessageChargeOrderId" resultType="map">
|
||||||
select
|
select
|
||||||
co.charge_order_id as chargeOrderId,
|
co.charge_order_id as chargeOrderId,
|
||||||
@ -607,6 +713,30 @@
|
|||||||
order by create_time desc
|
order by create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="timeBmsList" resultType="map">
|
||||||
|
select
|
||||||
|
order_no as orderNo,
|
||||||
|
pile_no as pileNo,
|
||||||
|
gun_id as gunId,
|
||||||
|
bms_voltage_request as bmsVoltageRequest,
|
||||||
|
bms_current_request as bmsCurrentRequest,
|
||||||
|
bms_charging_mod as bmsChargingMod,
|
||||||
|
bms_charging_volt as bmsChargingVolt,
|
||||||
|
bms_charging_current as gunLineTemperature,
|
||||||
|
mono_battery_volt as monoBatteryVolt,
|
||||||
|
soc as soc,
|
||||||
|
bms_est_remaining_time as bmsEstRemainingTime,
|
||||||
|
pileVoltageOutput as pileVoltageOutput,
|
||||||
|
pile_current_output as pileCurrentOutput,
|
||||||
|
charging_time_summary as chargingTimeSummary,
|
||||||
|
mono_battery_volt_groupId as monoBatteryVoltGroupId,
|
||||||
|
create_time as createTime
|
||||||
|
from xhpc_real_time_order_bms
|
||||||
|
where charging_order_id=#{chargingOrderId}
|
||||||
|
order by create_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<select id="timeChartSOCList" resultType="map">
|
<select id="timeChartSOCList" resultType="map">
|
||||||
select
|
select
|
||||||
group_concat(soc) as soc,
|
group_concat(soc) as soc,
|
||||||
|
|||||||
@ -1,19 +1,29 @@
|
|||||||
package com.xhpc.pp.logic;
|
package com.xhpc.pp.logic;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.xhpc.common.api.PileOrderService;
|
||||||
|
import com.xhpc.common.data.redis.CacheBmsReqChargerOutputData;
|
||||||
|
import com.xhpc.common.data.up.BmsReqChargerOutputData;
|
||||||
import com.xhpc.common.enums.StationDeviceEnum;
|
import com.xhpc.common.enums.StationDeviceEnum;
|
||||||
import com.xhpc.pp.domain.XhpcDeviceMessage;
|
import com.xhpc.pp.domain.XhpcDeviceMessage;
|
||||||
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
|
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
|
||||||
import com.xhpc.pp.tx.ServiceParameter;
|
import com.xhpc.pp.tx.ServiceParameter;
|
||||||
import com.xhpc.pp.tx.ServiceResult;
|
import com.xhpc.pp.tx.ServiceResult;
|
||||||
import com.xhpc.pp.tx.logic.ServiceLogic;
|
import com.xhpc.pp.tx.logic.ServiceLogic;
|
||||||
|
import com.xhpc.pp.utils.HexUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.text.NumberFormat;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
@Component("BmsReqChargerOutputDataLogic")
|
@Component("BmsReqChargerOutputDataLogic")
|
||||||
public class BmsReqChargerOutputDataLogic implements ServiceLogic {
|
public class BmsReqChargerOutputDataLogic implements ServiceLogic {
|
||||||
@ -22,10 +32,22 @@ public class BmsReqChargerOutputDataLogic implements ServiceLogic {
|
|||||||
@Resource
|
@Resource
|
||||||
XhpcDeviceMessageMapper deviceMessageMapper;
|
XhpcDeviceMessageMapper deviceMessageMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
PileOrderService pileOrderService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServiceResult service(ServiceParameter sp) throws Exception {
|
public ServiceResult service(ServiceParameter sp) throws Exception {
|
||||||
|
|
||||||
Map<String, Object> req = sp.getParameters();
|
Map<String, Object> req = sp.getParameters();
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
BmsReqChargerOutputData orderData = objectMapper.convertValue(req, BmsReqChargerOutputData.class);
|
||||||
|
|
||||||
|
String orderNo = (String) req.get("orderNo");
|
||||||
|
String orderKey = "order:".concat(orderNo).concat(".bms");
|
||||||
|
|
||||||
|
CacheBmsReqChargerOutputData cacheBmsReqChargerOutputData = translate(orderData);
|
||||||
|
REDIS.setCacheObject(orderKey, cacheBmsReqChargerOutputData);
|
||||||
|
pileOrderService.pileRimeOrderBms(orderNo);
|
||||||
|
|
||||||
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
|
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
|
||||||
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
|
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
|
||||||
@ -39,4 +61,37 @@ public class BmsReqChargerOutputDataLogic implements ServiceLogic {
|
|||||||
return new ServiceResult(false);
|
return new ServiceResult(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private CacheBmsReqChargerOutputData translate(BmsReqChargerOutputData orderData) {
|
||||||
|
CacheBmsReqChargerOutputData cacheBmsReqChargerOutputData = new CacheBmsReqChargerOutputData();
|
||||||
|
cacheBmsReqChargerOutputData.setOrderNo(orderData.getOrderNo());
|
||||||
|
cacheBmsReqChargerOutputData.setPileNo(orderData.getPileNo());
|
||||||
|
cacheBmsReqChargerOutputData.setGunId(orderData.getGunId());
|
||||||
|
cacheBmsReqChargerOutputData.setBmsVoltageRequest(convertDouble(HexUtils.reverseHexInt(orderData.getBmsVoltageRequest()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setBmsCurrentRequest(convertDouble(HexUtils.reverseHexInt(orderData.getBmsCurrentRequest()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setBmsChargingMod(HexUtils.reverseHexInt(orderData.getBmsChargingMod()));
|
||||||
|
cacheBmsReqChargerOutputData.setBmsChargingVolt(convertDouble(HexUtils.reverseHexInt(orderData.getBmsChargingVolt()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setBmsChargingCurrent(convertDouble(HexUtils.reverseHexInt(orderData.getBmsChargingCurrent()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setMonoBatteryVolt(convertDouble(Integer.parseInt(orderData.getMonoBatteryVoltGroupId().substring(0, 3), 16) * 0.01));
|
||||||
|
cacheBmsReqChargerOutputData.setSoc(HexUtils.reverseHexInt(orderData.getSoc()));
|
||||||
|
cacheBmsReqChargerOutputData.setBmsEstRemainingTime(HexUtils.reverseHexInt(orderData.getBmsEstRemainingTime()));
|
||||||
|
cacheBmsReqChargerOutputData.setPileVoltageOutput(convertDouble(HexUtils.reverseHexInt(orderData.getPileVoltageOutput()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setPileCurrentOutput(convertDouble(HexUtils.reverseHexInt(orderData.getPileVoltageOutput()) * 0.1));
|
||||||
|
cacheBmsReqChargerOutputData.setChargingTimeSummary(HexUtils.reverseHexInt(orderData.getChargingTimeSummary()));
|
||||||
|
cacheBmsReqChargerOutputData.setMonoBatteryVoltGroupId(Integer.parseInt(orderData.getMonoBatteryVoltGroupId().substring(3), 16));
|
||||||
|
cacheBmsReqChargerOutputData.setHex(orderData.getHex());
|
||||||
|
cacheBmsReqChargerOutputData.setCreateTime(DateUtil.now());
|
||||||
|
return cacheBmsReqChargerOutputData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Double convertDouble(Double oldVar) {
|
||||||
|
NumberFormat nf = NumberFormat.getInstance();
|
||||||
|
nf.setMaximumFractionDigits(2);
|
||||||
|
nf.setMinimumFractionDigits(2);
|
||||||
|
nf.setRoundingMode(RoundingMode.HALF_UP);
|
||||||
|
nf.setGroupingUsed(false);
|
||||||
|
return Double.parseDouble(nf.format(oldVar));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,9 @@ import com.xhpc.common.api.PileOrderService;
|
|||||||
import com.xhpc.common.core.domain.R;
|
import com.xhpc.common.core.domain.R;
|
||||||
import com.xhpc.common.data.redis.CacheOrderData;
|
import com.xhpc.common.data.redis.CacheOrderData;
|
||||||
import com.xhpc.common.data.up.OrderData;
|
import com.xhpc.common.data.up.OrderData;
|
||||||
import com.xhpc.pp.controller.ChargingController;
|
import com.xhpc.common.enums.StationDeviceEnum;
|
||||||
|
import com.xhpc.pp.domain.XhpcDeviceMessage;
|
||||||
|
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
|
||||||
import com.xhpc.pp.tx.ServiceParameter;
|
import com.xhpc.pp.tx.ServiceParameter;
|
||||||
import com.xhpc.pp.tx.ServiceResult;
|
import com.xhpc.pp.tx.ServiceResult;
|
||||||
import com.xhpc.pp.tx.logic.ServiceLogic;
|
import com.xhpc.pp.tx.logic.ServiceLogic;
|
||||||
@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -35,6 +38,8 @@ public class OrderDataLogic implements ServiceLogic {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private PileOrderService pileOrderService;
|
private PileOrderService pileOrderService;
|
||||||
|
@Resource
|
||||||
|
XhpcDeviceMessageMapper deviceMessageMapper;
|
||||||
private static Map<String, String> SM = new HashMap<>();
|
private static Map<String, String> SM = new HashMap<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -67,6 +72,7 @@ public class OrderDataLogic implements ServiceLogic {
|
|||||||
cacheOrder.put("status", "已结束");
|
cacheOrder.put("status", "已结束");
|
||||||
cacheOrder.put("stopReason", translate(cacheOrderData.getStopReason()));
|
cacheOrder.put("stopReason", translate(cacheOrderData.getStopReason()));
|
||||||
cacheOrder.put("stopReasonHex", cacheOrderData.getStopReason());
|
cacheOrder.put("stopReasonHex", cacheOrderData.getStopReason());
|
||||||
|
cacheOrder.put("stopTime", cacheOrderData.getEndTime());
|
||||||
REDIS.setCacheMap(orderkey, cacheOrder);
|
REDIS.setCacheMap(orderkey, cacheOrder);
|
||||||
String gunkey = "gun:".concat(orderData.getPileNo()).concat(orderData.getGunId());
|
String gunkey = "gun:".concat(orderData.getPileNo()).concat(orderData.getGunId());
|
||||||
Map<String, Object> cacheGun = REDIS.getCacheMap(gunkey);
|
Map<String, Object> cacheGun = REDIS.getCacheMap(gunkey);
|
||||||
@ -89,6 +95,16 @@ public class OrderDataLogic implements ServiceLogic {
|
|||||||
"无效订单"))) {
|
"无效订单"))) {
|
||||||
log.error(">>INVALID order [{}] detected. MUST check the system or [{}].<<", orderNo, gunkey);
|
log.error(">>INVALID order [{}] detected. MUST check the system or [{}].<<", orderNo, gunkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
|
||||||
|
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
|
||||||
|
deviceMessage.setSerialNumber(sp.getPileNo());
|
||||||
|
deviceMessage.setRemark("充电交易结算记录");
|
||||||
|
deviceMessage.setStatus(0);
|
||||||
|
deviceMessage.setContent((String) req.get("hex"));
|
||||||
|
deviceMessage.setChargeOrderNo((String) req.get("orderNo"));
|
||||||
|
deviceMessageMapper.insertByDomain(deviceMessage);
|
||||||
|
|
||||||
String resultStr = "6815".concat(req.get("seqhex").toString()).concat("0040").concat(orderNo);
|
String resultStr = "6815".concat(req.get("seqhex").toString()).concat("0040").concat(orderNo);
|
||||||
if ((r != null && r.getCode() == 200) || (r != null && r.getMsg() != null && r.getMsg().contains("重复结算"))) {
|
if ((r != null && r.getCode() == 200) || (r != null && r.getMsg() != null && r.getMsg().contains("重复结算"))) {
|
||||||
resultStr = resultStr.concat(ServiceResult.HEX_00);
|
resultStr = resultStr.concat(ServiceResult.HEX_00);
|
||||||
|
|||||||
@ -116,6 +116,13 @@ public class PileStartChargingDataLogic implements ServiceLogic {
|
|||||||
String orderkey = "order:".concat(orderNo);
|
String orderkey = "order:".concat(orderNo);
|
||||||
REDIS.setCacheMap(orderkey, cacheOrder);
|
REDIS.setCacheMap(orderkey, cacheOrder);
|
||||||
REDIS.setCacheMapValue("gun:".concat(connectorId), "ac.on", false);
|
REDIS.setCacheMapValue("gun:".concat(connectorId), "ac.on", false);
|
||||||
|
REDIS.setCacheMapValue("gun:".concat(connectorId), "orderkey", orderNo);
|
||||||
|
|
||||||
|
String pushOrderKey = orderkey.replace("order:", "pushOrder:");
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put("startChargeSeqStat", 2);
|
||||||
|
REDIS.setCacheMap(pushOrderKey, map);
|
||||||
|
|
||||||
resultStr = "00";
|
resultStr = "00";
|
||||||
} else {
|
} else {
|
||||||
resultStr = "1C";
|
resultStr = "1C";
|
||||||
|
|||||||
@ -9,8 +9,11 @@ import com.xhpc.common.core.domain.R;
|
|||||||
import com.xhpc.common.data.redis.CacheOrderData;
|
import com.xhpc.common.data.redis.CacheOrderData;
|
||||||
import com.xhpc.common.data.redis.CacheRealtimeData;
|
import com.xhpc.common.data.redis.CacheRealtimeData;
|
||||||
import com.xhpc.common.data.up.RealtimeData;
|
import com.xhpc.common.data.up.RealtimeData;
|
||||||
|
import com.xhpc.common.enums.StationDeviceEnum;
|
||||||
import com.xhpc.evcs.dto.ChargeDetails;
|
import com.xhpc.evcs.dto.ChargeDetails;
|
||||||
import com.xhpc.pp.controller.ChargingController;
|
import com.xhpc.pp.controller.ChargingController;
|
||||||
|
import com.xhpc.pp.domain.XhpcDeviceMessage;
|
||||||
|
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
|
||||||
import com.xhpc.pp.tx.ServiceParameter;
|
import com.xhpc.pp.tx.ServiceParameter;
|
||||||
import com.xhpc.pp.tx.ServiceResult;
|
import com.xhpc.pp.tx.ServiceResult;
|
||||||
import com.xhpc.pp.tx.logic.ServiceLogic;
|
import com.xhpc.pp.tx.logic.ServiceLogic;
|
||||||
@ -21,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -45,6 +49,8 @@ public class RealtimeDataLogic implements ServiceLogic {
|
|||||||
private PileOrderService pileOrderService;
|
private PileOrderService pileOrderService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChargingController chargingController;
|
private ChargingController chargingController;
|
||||||
|
@Resource
|
||||||
|
XhpcDeviceMessageMapper deviceMessageMapper;
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(RealtimeDataLogic.class);
|
private static final Logger log = LoggerFactory.getLogger(RealtimeDataLogic.class);
|
||||||
|
|
||||||
@ -126,7 +132,7 @@ public class RealtimeDataLogic implements ServiceLogic {
|
|||||||
}
|
}
|
||||||
Integer balance = (Integer) cacheOrder.get("initBalance");
|
Integer balance = (Integer) cacheOrder.get("initBalance");
|
||||||
CacheRealtimeData cacheRealtimeData = translate(realtimeData);
|
CacheRealtimeData cacheRealtimeData = translate(realtimeData);
|
||||||
balance -= cacheRealtimeData.getAmountCharged();
|
|
||||||
cacheRealtimeData.setCreateTime(DateUtil.now());
|
cacheRealtimeData.setCreateTime(DateUtil.now());
|
||||||
String lord = orderkey.concat(".lord");
|
String lord = orderkey.concat(".lord");
|
||||||
REDIS.setCacheObject(lord, cacheRealtimeData);
|
REDIS.setCacheObject(lord, cacheRealtimeData);
|
||||||
@ -141,12 +147,14 @@ public class RealtimeDataLogic implements ServiceLogic {
|
|||||||
cacheOrder.put("em1", calcem1(cdhex));
|
cacheOrder.put("em1", calcem1(cdhex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
balance -= cacheRealtimeData.getAmountCharged();
|
||||||
cacheOrder.put("rbalance", balance);
|
cacheOrder.put("rbalance", balance);
|
||||||
cacheOrder.put("remainingTime", tr);
|
cacheOrder.put("remainingTime", tr);
|
||||||
cacheOrder.put("status", statusplain);
|
cacheOrder.put("status", statusplain);
|
||||||
cacheOrder.put("totalPower", cacheRealtimeData.getChargingDegree() / 10000.0);
|
cacheOrder.put("totalPower", cacheRealtimeData.getChargingDegree() / 10000.0);
|
||||||
cacheOrder.put("totalMoney", cacheRealtimeData.getAmountCharged() / 10000.0);
|
cacheOrder.put("totalMoney", cacheRealtimeData.getAmountCharged() / 10000.0);
|
||||||
cacheOrder.put("realtimeDataList", realtimeDataList);
|
cacheOrder.put("realtimeDataList", realtimeDataList);
|
||||||
|
cacheOrder.put("lastOrderTime", DateUtil.now());
|
||||||
R r1 = pileOrderService.pileRimeOrder(orderNo);
|
R r1 = pileOrderService.pileRimeOrder(orderNo);
|
||||||
if (r1 == null || (r1.getMsg()!=null && r1.getMsg().contains("无效订单")) || (r1.getCode() >=500 && r1.getCode() != 3886)) {
|
if (r1 == null || (r1.getMsg()!=null && r1.getMsg().contains("无效订单")) || (r1.getCode() >=500 && r1.getCode() != 3886)) {
|
||||||
chargingController.stopInvalidOrder(orderNo);
|
chargingController.stopInvalidOrder(orderNo);
|
||||||
@ -200,6 +208,16 @@ public class RealtimeDataLogic implements ServiceLogic {
|
|||||||
cacheOrder.put("lordiss", "false");
|
cacheOrder.put("lordiss", "false");
|
||||||
pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复");
|
pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复");
|
||||||
}
|
}
|
||||||
|
// 判断金额和电量为0, 防止白嫖
|
||||||
|
if(realtimeDataList.size() > 3){
|
||||||
|
if(cacheRealtimeData.getAmountCharged() < 0.1 && cacheRealtimeData.getChargingDegree() < 0.1){
|
||||||
|
log.error("实时数据充电度数:{}, 实时充电金额为: {},订单[{}] 自动结束",
|
||||||
|
cacheRealtimeData.getChargingDegree(),
|
||||||
|
cacheRealtimeData.getAmountCharged(),
|
||||||
|
cacheRealtimeData.getOrderNo());
|
||||||
|
chargingController.stopCharging(pileNo, gunId, default_version);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -248,6 +266,15 @@ public class RealtimeDataLogic implements ServiceLogic {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
REDIS.setCacheMap(gunkey, cacheGun);
|
REDIS.setCacheMap(gunkey, cacheGun);
|
||||||
|
|
||||||
|
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
|
||||||
|
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
|
||||||
|
deviceMessage.setSerialNumber(sp.getPileNo());
|
||||||
|
deviceMessage.setRemark("实时数据");
|
||||||
|
deviceMessage.setStatus(0);
|
||||||
|
deviceMessage.setContent((String) req.get("hex"));
|
||||||
|
deviceMessage.setChargeOrderNo((String) req.get("orderNo"));
|
||||||
|
deviceMessageMapper.insertByDomain(deviceMessage);
|
||||||
return new ServiceResult(false);
|
return new ServiceResult(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -430,24 +430,28 @@ public class XhpcAppUserServiceImpl extends BaseService implements IXhpcAppUserU
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public R<?> voluntaryLogin(Map<String, Object> map) {
|
public R<?> voluntaryLogin(Map<String, Object> map) {
|
||||||
String type = StringUtils.valueOf(map.get("type"));
|
try{
|
||||||
String openid = StringUtils.valueOf(map.get("openid"));
|
String type = StringUtils.valueOf(map.get("type"));
|
||||||
String tenantId = StringUtils.valueOf(map.get("tenantId"));
|
String openid = StringUtils.valueOf(map.get("openid"));
|
||||||
logger.info("<<<<<<<<<<openid>>>>>>>>>>>>");
|
String tenantId = StringUtils.valueOf(map.get("tenantId"));
|
||||||
logger.info("<<<<<<<<<<自动登录openid>>>>>>>>>>>>"+openid);
|
logger.info("<<<<<<<<<<openid>>>>>>>>>>>>");
|
||||||
logger.info("<<<<<<<<<<openid>>>>>>>>>>>>");
|
logger.info("<<<<<<<<<<自动登录openid>>>>>>>>>>>>"+openid);
|
||||||
Map<String, Object> userLoginTime = xhpcAppUserMapper.getUserLoginTime(Integer.valueOf(type), openid,tenantId);
|
logger.info("<<<<<<<<<<openid>>>>>>>>>>>>");
|
||||||
if(userLoginTime ==null){
|
Map<String, Object> userLoginTime = xhpcAppUserMapper.getUserLoginTime(Integer.valueOf(type), openid,tenantId);
|
||||||
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
if(userLoginTime ==null){
|
||||||
}
|
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
||||||
logger.info("-------userLoginTime---" + userLoginTime);
|
}
|
||||||
if(userLoginTime.get("status") == null){
|
logger.info("-------userLoginTime---" + userLoginTime);
|
||||||
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
if(userLoginTime.get("status") == null){
|
||||||
} else if(UserTypeUtil.NO_LOGIN.equals(userLoginTime.get("status").toString())){
|
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
||||||
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
} else if(UserTypeUtil.NO_LOGIN.equals(userLoginTime.get("status").toString())){
|
||||||
}
|
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
||||||
logger.info("-------status---"+userLoginTime.get("status").toString());
|
}
|
||||||
return appLogin(userLoginTime.get("account").toString(), type, openid, tenantId);
|
logger.info("-------status---"+userLoginTime.get("status").toString());
|
||||||
|
return appLogin(userLoginTime.get("account").toString(), type, openid, tenantId);
|
||||||
|
}catch (Exception e){
|
||||||
|
return R.fail(HttpStatus.USER_LOGIN, "请重新登录");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -525,6 +529,7 @@ public class XhpcAppUserServiceImpl extends BaseService implements IXhpcAppUserU
|
|||||||
}
|
}
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
logger.info("-------appInfo----请重新登录---");
|
||||||
return AjaxResult.error("请重新登录",HttpStatus.USER_LOGIN);
|
return AjaxResult.error("请重新登录",HttpStatus.USER_LOGIN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,10 +14,10 @@ spring:
|
|||||||
nacos:
|
nacos:
|
||||||
discovery:
|
discovery:
|
||||||
# 服务注册地址
|
# 服务注册地址
|
||||||
server-addr: 172.31.183.135:8848
|
server-addr: mse-e2a05960-nacos-ans.mse.aliyuncs.com:8848
|
||||||
config:
|
config:
|
||||||
# 配置中心地址
|
# 配置中心地址
|
||||||
server-addr: 172.31.183.135:8848
|
server-addr: mse-e2a05960-nacos-ans.mse.aliyuncs.com:8848
|
||||||
# 配置文件格式
|
# 配置文件格式
|
||||||
file-extension: yml
|
file-extension: yml
|
||||||
# 共享配置
|
# 共享配置
|
||||||
@ -55,4 +55,4 @@ oss:
|
|||||||
#文件路径
|
#文件路径
|
||||||
file:
|
file:
|
||||||
aliyunPath: invoicePdf/
|
aliyunPath: invoicePdf/
|
||||||
serverStoreDisposableFileLocation: /www/wwwroot/xhpc.scxhua.com/disposableFiles/
|
serverStoreDisposableFileLocation: /www/wwwroot/scxhua.cn/disposableFiles/
|
||||||
Loading…
x
Reference in New Issue
Block a user