|
|
|
@ -49,7 +49,7 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
RemoteTradeService remoteTradeService;
|
|
|
|
|
|
|
|
|
|
public SimPileClient(RemoteTradeService remoteTradeService, SysEquipment sysEquipment, SysConnector sysConnector){
|
|
|
|
|
public SimPileClient(RemoteTradeService remoteTradeService, SysEquipment sysEquipment, SysConnector sysConnector) {
|
|
|
|
|
|
|
|
|
|
chargeOrderItemMap = new LinkedHashMap<>();
|
|
|
|
|
this.sysConnector = sysConnector;
|
|
|
|
@ -60,8 +60,8 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void start() throws BaseException {
|
|
|
|
|
if(this.sysConnector != null){
|
|
|
|
|
this.sysConnector.setStatus((short)1);
|
|
|
|
|
if (this.sysConnector != null) {
|
|
|
|
|
this.sysConnector.setStatus((short) 1);
|
|
|
|
|
}
|
|
|
|
|
String ip = IpUtils.getHostIp();
|
|
|
|
|
SysEquipment upEquipment = new SysEquipment();
|
|
|
|
@ -74,57 +74,57 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void stop() throws BaseException {
|
|
|
|
|
sysConnector.setStatus((short)0);
|
|
|
|
|
sysConnector.setStatus((short) 0);
|
|
|
|
|
sendRealTimeData(true);
|
|
|
|
|
log.info("【模拟桩" + sysConnector.getConnectorId() + "】" + "下线");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void link() throws BaseException {
|
|
|
|
|
if(sysConnector.getStatus() == 2 || sysConnector.getStatus() == 3){
|
|
|
|
|
if (sysConnector.getStatus() == 2 || sysConnector.getStatus() == 3) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//插枪
|
|
|
|
|
log.info("=====》插枪");
|
|
|
|
|
sysConnector.setStatus((short)2);
|
|
|
|
|
sysConnector.setStatus((short) 2);
|
|
|
|
|
sendRealTimeData(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void unlink() throws BaseException {
|
|
|
|
|
if(sysConnector.getStatus() == 3){
|
|
|
|
|
if (sysConnector.getStatus() == 3) {
|
|
|
|
|
log.info("=====》充电中无法拔枪");
|
|
|
|
|
}
|
|
|
|
|
//拔枪
|
|
|
|
|
log.info("=====》拔枪");
|
|
|
|
|
sysConnector.setStatus((short)1);
|
|
|
|
|
sysConnector.setStatus((short) 1);
|
|
|
|
|
sendRealTimeData(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void startCharge(SysChargeOrder sysChargeOrder) throws BaseException {
|
|
|
|
|
log.info("充电桩"+ sysConnector.getConnectorId() +"状态码:"+sysConnector.getStatus());
|
|
|
|
|
log.info("充电桩" + sysConnector.getConnectorId() + "状态码:" + sysConnector.getStatus());
|
|
|
|
|
chargeOrderItemMap = new HashMap<>();
|
|
|
|
|
if(sysConnector.getStatus() == 2){
|
|
|
|
|
//0离网 1空闲 2占用(未充电)3占用(充电)4占用(预约锁定)255故障
|
|
|
|
|
if (sysConnector.getStatus() == 2) {
|
|
|
|
|
//可以充电
|
|
|
|
|
log.info("充电桩"+sysConnector.getConnectorId()+"状态码:设置3");
|
|
|
|
|
sysConnector.setStatus((short)3);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
log.info("充电桩" + sysConnector.getConnectorId() + "状态码:设置3");
|
|
|
|
|
sysConnector.setStatus((short) 3);
|
|
|
|
|
} else {
|
|
|
|
|
startChargingReturnService.startFail(sysChargeOrder);
|
|
|
|
|
throw new BaseException("启动失败-状态"+ sysConnector.getStatus());
|
|
|
|
|
throw new BaseException("启动失败-状态" + sysConnector.getStatus());
|
|
|
|
|
}
|
|
|
|
|
SysChargeOrder dbInfo = remoteSysChargeOrderService.getChargeOrderByStartChargeSeq(sysChargeOrder.getStartChargeSeq());
|
|
|
|
|
|
|
|
|
|
if(dbInfo == null){
|
|
|
|
|
if (dbInfo == null) {
|
|
|
|
|
log.error("[启动充电]=>订单数据为null");
|
|
|
|
|
}
|
|
|
|
|
log.info("[启动充电]=>tradeNo=" + sysChargeOrder.getStartChargeSeq());
|
|
|
|
|
log.info("" + dbInfo.getStartChargeSeq());
|
|
|
|
|
|
|
|
|
|
this.sysChargeOrder = new SysChargeOrder();
|
|
|
|
|
this.sysChargeOrder.setStartChargeSeq(dbInfo.getStartChargeSeq());
|
|
|
|
|
this.sysChargeOrder.setStartChargeSeqStat((short)2);
|
|
|
|
|
this.sysChargeOrder.setStartChargeSeq(dbInfo.getStartChargeSeq());//序列号
|
|
|
|
|
this.sysChargeOrder.setStartChargeSeqStat((short) 2);
|
|
|
|
|
this.sysChargeOrder.setTradeNo(dbInfo.getStartChargeSeq());
|
|
|
|
|
this.sysChargeOrder.setConnectorId(sysConnector.getConnectorId());
|
|
|
|
|
this.sysChargeOrder.setConnectorStatus(3);
|
|
|
|
@ -137,11 +137,11 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
this.sysChargeOrder.setTotalMoney(new BigDecimal("0.00"));
|
|
|
|
|
this.sysChargeOrder.setElecMoney(new BigDecimal("0.00"));
|
|
|
|
|
this.sysChargeOrder.setServiceMoney(new BigDecimal("0.00"));
|
|
|
|
|
this.sysChargeOrder.setSumPeriod((short)0);
|
|
|
|
|
this.sysChargeOrder.setSumPeriod((short) 0);
|
|
|
|
|
this.sysChargeOrder.setCarVin(RandomUtil.randomStringUpper(17));
|
|
|
|
|
this.sysChargeOrder.setSyncFlag((short)0);
|
|
|
|
|
this.sysChargeOrder.setReportGov((short)0);
|
|
|
|
|
sysConnector.setStatus((short)3);
|
|
|
|
|
this.sysChargeOrder.setSyncFlag((short) 0);
|
|
|
|
|
this.sysChargeOrder.setReportGov((short) 0);
|
|
|
|
|
sysConnector.setStatus((short) 3);
|
|
|
|
|
|
|
|
|
|
startChargingReturnService.startSuccess(this.sysChargeOrder);
|
|
|
|
|
sendRealTimeData(true);
|
|
|
|
@ -149,15 +149,14 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void stopCharge(int type, SysChargeOrder sysChargeOrder) throws BaseException {
|
|
|
|
|
if(type == 1){
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
//人工应答
|
|
|
|
|
log.info("【人工停机命令】桩编号:" + sysChargeOrder.getConnectorId());
|
|
|
|
|
if(sysConnector.getStatus() == 3){
|
|
|
|
|
sysConnector.setStatus((short)2);
|
|
|
|
|
if (sysConnector.getStatus() == 3) {
|
|
|
|
|
sysConnector.setStatus((short) 2);
|
|
|
|
|
sendRealTimeData(true);
|
|
|
|
|
stopChargingReturnService.stopSuccess(sysChargeOrder);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
} else {
|
|
|
|
|
stopChargingReturnService.stopFail(sysChargeOrder);
|
|
|
|
|
throw new BaseException("停止失败");
|
|
|
|
|
}
|
|
|
|
@ -171,9 +170,8 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
@Override
|
|
|
|
|
public void sendRealTimeData(Boolean sendForce) throws BaseException {
|
|
|
|
|
try {
|
|
|
|
|
long minDurant = (sysChargeOrder == null)?60000:15000;
|
|
|
|
|
if((System.currentTimeMillis() - lastRealtime < minDurant) && !sendForce)
|
|
|
|
|
{
|
|
|
|
|
long minDurant = (sysChargeOrder == null) ? 60000 : 15000;
|
|
|
|
|
if ((System.currentTimeMillis() - lastRealtime < minDurant) && !sendForce) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
lastRealtime = System.currentTimeMillis();
|
|
|
|
@ -181,33 +179,31 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
short status = 0; //0离线 1故障 2空闲 3充电
|
|
|
|
|
short isHome = 1;
|
|
|
|
|
short isPlugn = 0;
|
|
|
|
|
if(sysConnector.getStatus() == 0){
|
|
|
|
|
if (sysConnector.getStatus() == 0) {
|
|
|
|
|
status = 2;
|
|
|
|
|
}
|
|
|
|
|
else if(sysConnector.getStatus() == 1){
|
|
|
|
|
} else if (sysConnector.getStatus() == 1) {
|
|
|
|
|
status = 2;
|
|
|
|
|
}
|
|
|
|
|
else if(sysConnector.getStatus() == 2){
|
|
|
|
|
} else if (sysConnector.getStatus() == 2) {
|
|
|
|
|
status = 2;
|
|
|
|
|
isHome = 0;
|
|
|
|
|
isPlugn = 1;
|
|
|
|
|
}
|
|
|
|
|
else if(sysConnector.getStatus() == 3){
|
|
|
|
|
} else if (sysConnector.getStatus() == 3) {
|
|
|
|
|
status = 3;
|
|
|
|
|
isHome = 0;
|
|
|
|
|
isPlugn = 1;
|
|
|
|
|
}
|
|
|
|
|
else if(sysConnector.getStatus() == 4){
|
|
|
|
|
} else if (sysConnector.getStatus() == 4) {
|
|
|
|
|
status = 2;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
} else {
|
|
|
|
|
status = 255;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PlatConnectorRealtimeData platConnectorRealtimeData = null;
|
|
|
|
|
if(sysConnector.getStatus() == 3){
|
|
|
|
|
/*
|
|
|
|
|
0离网 1空闲 2占用(未充电)3占用(充电)4占用(预约锁定)255故障
|
|
|
|
|
*/
|
|
|
|
|
if (sysConnector.getStatus() == 3) {
|
|
|
|
|
culChargeState();
|
|
|
|
|
if(sysConnector.getStatus() != 3){
|
|
|
|
|
if (sysConnector.getStatus() != 3) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
platConnectorRealtimeData = new PlatConnectorRealtimeData();
|
|
|
|
@ -222,16 +218,15 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
platConnectorRealtimeData.setOutCurrent(sysChargeOrder.getCurrentA());
|
|
|
|
|
platConnectorRealtimeData.setGunlineTemp(RandomUtil.randomInt(60, 80));
|
|
|
|
|
platConnectorRealtimeData.setGunlineNo(sysConnector.getGunNo().longValue());
|
|
|
|
|
platConnectorRealtimeData.setSoc(sysChargeOrder.getSoc().setScale(2,RoundingMode.DOWN));
|
|
|
|
|
platConnectorRealtimeData.setSoc(sysChargeOrder.getSoc().setScale(2, RoundingMode.DOWN));
|
|
|
|
|
platConnectorRealtimeData.setBatteryMaxTemp(RandomUtil.randomInt(60, 80));
|
|
|
|
|
platConnectorRealtimeData.setTotalChargeDurant((int)((sysChargeOrder.getEndTime().getTime() - sysChargeOrder.getStartTime().getTime())/60000));
|
|
|
|
|
platConnectorRealtimeData.setRemainChargeDurent((int)((1.0-sysChargeOrder.getSoc().floatValue()) / 0.008));
|
|
|
|
|
platConnectorRealtimeData.setTotalChargeDurant((int) ((sysChargeOrder.getEndTime().getTime() - sysChargeOrder.getStartTime().getTime()) / 60000));
|
|
|
|
|
platConnectorRealtimeData.setRemainChargeDurent((int) ((1.0 - sysChargeOrder.getSoc().floatValue()) / 0.008));
|
|
|
|
|
platConnectorRealtimeData.setChargingKWH(sysChargeOrder.getTotalPower());
|
|
|
|
|
platConnectorRealtimeData.setLoseKwh(sysChargeOrder.getTotalPower());
|
|
|
|
|
platConnectorRealtimeData.setChargeMoney(sysChargeOrder.getTotalMoney());
|
|
|
|
|
platConnectorRealtimeData.setCreateTime(new Date());
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
} else {
|
|
|
|
|
//发送一般实时状态
|
|
|
|
|
platConnectorRealtimeData = new PlatConnectorRealtimeData();
|
|
|
|
|
platConnectorRealtimeData.setTradeNo("");
|
|
|
|
@ -255,7 +250,7 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
platConnectorRealtimeData.setCreateTime(new Date());
|
|
|
|
|
}
|
|
|
|
|
realtimeDataProducer.sendMsg(platConnectorRealtimeData);
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -264,7 +259,7 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
public void sendTradeInfo(int stopType, String startChargeSeq) throws BaseException {
|
|
|
|
|
//充电完成后,更新充电订单信息,发送充电数据
|
|
|
|
|
SysChargeOrder theChargeOrder = remoteSysChargeOrderService.getChargeOrderByStartChargeSeq(startChargeSeq);
|
|
|
|
|
if(theChargeOrder == null){
|
|
|
|
|
if (theChargeOrder == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
theChargeOrder.setEndTime(new Date());
|
|
|
|
@ -303,7 +298,7 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
platTradingRecordData.setCost(theChargeOrder.getTotalMoney());
|
|
|
|
|
platTradingRecordData.setVin(theChargeOrder.getCarVin());
|
|
|
|
|
platTradingRecordData.setTradeType((short)1);
|
|
|
|
|
platTradingRecordData.setTradeType((short) 1);
|
|
|
|
|
platTradingRecordData.setTradeTime(new Date());
|
|
|
|
|
platTradingRecordData.setStopType(stopType);
|
|
|
|
|
platTradingRecordData.setSystemCardNo(theChargeOrder.getPhoneNum());
|
|
|
|
@ -317,16 +312,16 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void startHeart() throws BaseException {
|
|
|
|
|
new Thread(()->{
|
|
|
|
|
for(;;) {
|
|
|
|
|
new Thread(() -> {
|
|
|
|
|
for (; ; ) {
|
|
|
|
|
try {
|
|
|
|
|
//发送一般心跳
|
|
|
|
|
log.info("循环-心跳----" + sysConnector.getConnectorId());
|
|
|
|
|
if(sysConnector != null) {
|
|
|
|
|
if (sysConnector != null) {
|
|
|
|
|
heartBeatProducer.sendMsg(sysConnector.getConnectorId());
|
|
|
|
|
}
|
|
|
|
|
Thread.sleep(5000);
|
|
|
|
|
if(sysConnector != null && sysConnector.getStatus() == 0){
|
|
|
|
|
if (sysConnector != null && sysConnector.getStatus() == 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
@ -339,24 +334,23 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}).start();
|
|
|
|
|
new Thread(()->{
|
|
|
|
|
for(;;) {
|
|
|
|
|
new Thread(() -> {
|
|
|
|
|
for (; ; ) {
|
|
|
|
|
try {
|
|
|
|
|
log.info("循环-实时数据----" + sysConnector.getConnectorId());
|
|
|
|
|
sendRealTimeData(false);
|
|
|
|
|
if(sysChargeOrder != null){
|
|
|
|
|
if (sysChargeOrder != null) {
|
|
|
|
|
Thread.sleep(5000);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
} else {
|
|
|
|
|
Thread.sleep(10000);
|
|
|
|
|
}
|
|
|
|
|
if(sysConnector != null && sysConnector.getStatus() == 0){
|
|
|
|
|
if (sysConnector != null && sysConnector.getStatus() == 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
log.error(e.toString(), e);
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
} catch (Exception ex){
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
log.error(ex.toString(), ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -364,25 +358,24 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void culChargeState()
|
|
|
|
|
{
|
|
|
|
|
if(sysChargeOrder == null || sysConnector.getStatus() != 3){
|
|
|
|
|
private void culChargeState() {
|
|
|
|
|
if (sysChargeOrder == null || sysConnector.getStatus() != 3) {//3:充电中
|
|
|
|
|
//异常情况 中止充电
|
|
|
|
|
stopCharge(0, sysChargeOrder);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(sysChargeOrder.getSoc().floatValue() > 0.98){
|
|
|
|
|
if (sysChargeOrder.getSoc().floatValue() > 0.98) {
|
|
|
|
|
//停止充电
|
|
|
|
|
stopCharge(0, sysChargeOrder);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
sysChargeOrder.setSoc(sysChargeOrder.getSoc().add(new BigDecimal("0.001")).setScale(3, RoundingMode.DOWN));
|
|
|
|
|
sysChargeOrder.setCurrentA(RandomUtil.randomBigDecimal(new BigDecimal(200)).setScale(2,RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setVoltageA(RandomUtil.randomBigDecimal(new BigDecimal(400)).setScale(2,RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setCurrentA(RandomUtil.randomBigDecimal(new BigDecimal(200)).setScale(2, RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setVoltageA(RandomUtil.randomBigDecimal(new BigDecimal(400)).setScale(2, RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setEndTime(new Date());
|
|
|
|
|
BigDecimal currentPower = RandomUtil.randomBigDecimal(new BigDecimal("0.2"), new BigDecimal("0.5")).setScale(5,RoundingMode.UP);
|
|
|
|
|
sysChargeOrder.setTotalPower(sysChargeOrder.getTotalPower().add(currentPower).setScale(5,RoundingMode.DOWN));
|
|
|
|
|
BigDecimal currentPower = RandomUtil.randomBigDecimal(new BigDecimal("0.2"), new BigDecimal("0.5")).setScale(5, RoundingMode.UP);
|
|
|
|
|
sysChargeOrder.setTotalPower(sysChargeOrder.getTotalPower().add(currentPower).setScale(5, RoundingMode.DOWN));
|
|
|
|
|
|
|
|
|
|
Date date = new Date();
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
@ -396,14 +389,13 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
|
|
|
|
|
BigDecimal currentPrice = priceE.add(priceS);
|
|
|
|
|
SysChargeOrderItem item = null;
|
|
|
|
|
if(chargeOrderItemMap.containsKey(hour+"")){
|
|
|
|
|
item = chargeOrderItemMap.get(hour+"");
|
|
|
|
|
if (chargeOrderItemMap.containsKey(hour + "")) {
|
|
|
|
|
item = chargeOrderItemMap.get(hour + "");
|
|
|
|
|
|
|
|
|
|
item.setPower(item.getPower().add(currentPower));
|
|
|
|
|
item.setElecMoney(item.getElecMoney().add(priceE.multiply(currentPower)).setScale(4, RoundingMode.UP));
|
|
|
|
|
item.setServiceMoney(item.getServiceMoney().add(priceE.multiply(currentPower)));
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
} else {
|
|
|
|
|
item = new SysChargeOrderItem();
|
|
|
|
|
Calendar startCal = Calendar.getInstance();
|
|
|
|
|
startCal.setTime(date);
|
|
|
|
@ -420,12 +412,12 @@ public class SimPileClient implements SimPileIClient {
|
|
|
|
|
item.setSevicePrice(priceS);
|
|
|
|
|
item.setElecMoney(priceE.multiply(currentPower));
|
|
|
|
|
item.setServiceMoney(priceE.multiply(currentPower));
|
|
|
|
|
chargeOrderItemMap.put(hour+"", item);
|
|
|
|
|
chargeOrderItemMap.put(hour + "", item);
|
|
|
|
|
}
|
|
|
|
|
sysChargeOrder.setTotalMoney(sysChargeOrder.getTotalMoney().add(currentPrice.multiply(currentPower)));
|
|
|
|
|
sysChargeOrder.setElecMoney(sysChargeOrder.getElecMoney().add(priceE.multiply(currentPower)).setScale(5,RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setServiceMoney(sysChargeOrder.getServiceMoney().add(priceS.multiply(currentPower)).setScale(5,RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setSumPeriod((short)chargeOrderItemMap.size());
|
|
|
|
|
sysChargeOrder.setElecMoney(sysChargeOrder.getElecMoney().add(priceE.multiply(currentPower)).setScale(5, RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setServiceMoney(sysChargeOrder.getServiceMoney().add(priceS.multiply(currentPower)).setScale(5, RoundingMode.UP));
|
|
|
|
|
sysChargeOrder.setSumPeriod((short) chargeOrderItemMap.size());
|
|
|
|
|
|
|
|
|
|
log.info("[实时状态]->充电度数" + sysChargeOrder.getTotalPower());
|
|
|
|
|
log.info("[实时状态]->时段内充电度数" + currentPower);
|
|
|
|
|