diff --git a/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysConnectorServiceImpl.java b/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysConnectorServiceImpl.java index ffb3ee9..8207e0e 100644 --- a/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysConnectorServiceImpl.java +++ b/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysConnectorServiceImpl.java @@ -62,6 +62,11 @@ public class SysConnectorServiceImpl implements SysConnectorService { @Lazy StationOperatorLinkService stationOperatorLinkService; + /** + * 根据枪ID获取枪的信息 + * @param connectorId + * @return + */ @Override public SysConnector getConnectorById(String connectorId) { if(TextUtils.isBlank(connectorId)){ @@ -70,24 +75,30 @@ public class SysConnectorServiceImpl implements SysConnectorService { else if(connectorId.length() <= 9){ return null; } - String key = HlhtRedisKey.SYS_CONNECTOR + connectorId; + String key = HlhtRedisKey.SYS_CONNECTOR + connectorId;//redis中的键值 SysConnector sysConnector = RedisUtils.getCacheObject(key); if(sysConnector != null){ - return sysConnector; + return sysConnector;//如果redis中存在,直接返回 } - + //到这里就是不在redis上存在了,需要查询数据库 + //表:sys_connector LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(SysConnector::getConnectorId, connectorId); queryWrapper.last("limit 1"); List list = iService.list(queryWrapper); if(list != null && list.size() > 0){ sysConnector = list.get(0); - RedisUtils.setCacheObject(key, sysConnector, Duration.ofMinutes(5)); + RedisUtils.setCacheObject(key, sysConnector, Duration.ofMinutes(5));//5分钟的TTL值 return sysConnector; } return null; } + /** + * 判断枪是不是合法,在数据库中查找到就是合法 + * @param connectorId + * @return + */ @Override public Boolean isConnectorIdValid(String connectorId) { if(TextUtils.isBlank(connectorId)){ diff --git a/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysOperatorServiceImpl.java b/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysOperatorServiceImpl.java index dad5e36..4c39434 100644 --- a/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysOperatorServiceImpl.java +++ b/omind-modules/omind-baseplat/src/main/java/org/dromara/omind/baseplat/service/impl/SysOperatorServiceImpl.java @@ -31,27 +31,39 @@ public class SysOperatorServiceImpl implements SysOperatorService { @Lazy SysOperatorService selfService; + /** + * 根据运营商ID获取运营商信息 + * @param operatorId + * @return + */ @Override public SysOperator getOperatorById(String operatorId) { + //operatorId:MA01D1QR8 if(TextUtils.isBlank(operatorId)){ return null; } else if(operatorId.length() != 9){ return null; } + //键值 = keys:v1:hlht:sys:operator:MA01D1QR8 String key = HlhtRedisKey.SYS_OPERATOR + operatorId; + //根据组装的key到Redis上去获取一个对象,然后反序列化成对象返回 SysOperator sysOperator = RedisUtils.getCacheObject(key); if(sysOperator != null){ return sysOperator; } LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + //到表:sys_operator中去查找 operator_id = MA01D1QR8 + // select * from sys_operator where operator_id = 'MA01D1QR8' --北京奥陌科技有限公司 queryWrapper.eq(SysOperator::getOperatorId, operatorId); queryWrapper.last("limit 1"); List list = iService.list(queryWrapper); if(list != null && list.size() > 0){ sysOperator = list.get(0); + //记录回Redis中去 RedisUtils.setCacheObject(HlhtRedisKey.SYS_OPERATOR + sysOperator.getOperatorId(), sysOperator); - return sysOperator; + return sysOperator;//将查询到的对象返回 + //基础设施运营商信息表 } return null; } diff --git a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/config/SimCenter.java b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/config/SimCenter.java index 430bf81..11c044d 100644 --- a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/config/SimCenter.java +++ b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/config/SimCenter.java @@ -20,6 +20,7 @@ import java.util.Map; @Configuration public class SimCenter { + //某个充电桩是不是在线的Map,如果存在就是存线,不存在就是不在线,那么一定有一个定时检查的任务在处理这个map! private static Map pileMap = new LinkedHashMap<>(); @DubboReference @@ -31,112 +32,100 @@ public class SimCenter { @DubboReference RemoteTradeService remoteTradeService; - public Boolean isOnline(String connectorId) - { - if(pileMap.containsKey(connectorId)){ + public Boolean isOnline(String connectorId) { + if (pileMap.containsKey(connectorId)) {//桩是不是在线 return true; - } - else{ + } else { return false; } } - public void start(String connectorId) throws BaseException - { + public void start(String connectorId) throws BaseException { log.info("启动模态充电桩:" + connectorId); - if(pileMap.containsKey(connectorId)){ + if (pileMap.containsKey(connectorId)) { throw new BaseException("模态桩已启动"); } SysConnector sysConnector = connectorService.getConnectorById(connectorId); - if(sysConnector == null){ + if (sysConnector == null) { throw new BaseException("模态枪不存在"); } SysEquipment sysEquipment = equipmentService.getEquipmentById(sysConnector.getEquipmentId()); - if(sysEquipment == null){ + if (sysEquipment == null) { throw new BaseException("模态桩不存在"); } SimPileClient pileClient = new SimPileClient(remoteTradeService, sysEquipment, sysConnector); pileMap.put(connectorId, pileClient); - try{ - new Thread(()->{ + try { + new Thread(() -> { pileClient.start(); log.info("模态桩服务------启动成功"); }).start(); - } - catch (BaseException ex){ + } catch (BaseException ex) { throw ex; - } - catch (Exception ex){ + } catch (Exception ex) { throw new BaseException("未知错误"); } } - public void stop(String connectorId) throws BaseException - { - if(!pileMap.containsKey(connectorId)){ + public void stop(String connectorId) throws BaseException { + if (!pileMap.containsKey(connectorId)) { throw new BaseException("模态桩未启动"); } - try{ + try { SimPileClient pileClient = pileMap.get(connectorId); - if(pileClient == null){ + if (pileClient == null) { throw new BaseException("枪未启动"); } pileClient.stop(); - } - catch (BaseException ex){ + } catch (BaseException ex) { throw ex; - } - finally { + } finally { pileMap.remove(connectorId); } } - public void link(String connectorId) throws BaseException - { - if(!pileMap.containsKey(connectorId)){ + public void link(String connectorId) throws BaseException { + if (!pileMap.containsKey(connectorId)) { throw new BaseException("充电桩未启动"); } SimPileClient pileClient = pileMap.get(connectorId); - if(pileClient == null){ + if (pileClient == null) { throw new BaseException("枪未启动"); } pileClient.link(); } - public void unlink(String connectorId) throws BaseException - { - if(!pileMap.containsKey(connectorId)){ + public void unlink(String connectorId) throws BaseException { + if (!pileMap.containsKey(connectorId)) { throw new BaseException("充电桩未启动"); } SimPileClient pileClient = pileMap.get(connectorId); - if(pileClient == null){ + if (pileClient == null) { throw new BaseException("枪未启动"); } pileClient.unlink(); } - public void startCharge(SysChargeOrder sysChargeOrder) throws BaseException - { - if(sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())){ + public void startCharge(SysChargeOrder sysChargeOrder) throws BaseException { + if (sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())) { throw new BaseException("无效的枪信息"); } SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId()); - if(pileClient == null){ + if (pileClient == null) { throw new BaseException("枪未启动"); } pileClient.startCharge(sysChargeOrder); } - public void stopCharge(SysChargeOrder sysChargeOrder) throws BaseException - { - if(sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())){ + public void stopCharge(SysChargeOrder sysChargeOrder) throws BaseException { + if (sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())) { throw new BaseException("无效的枪信息"); } SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId()); - if(pileClient == null){ + if (pileClient == null) { throw new BaseException("枪未启动"); } pileClient.stopCharge(1, sysChargeOrder); diff --git a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/controller/SimTestController.java b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/controller/SimTestController.java index bdd9e1c..bbe6e42 100644 --- a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/controller/SimTestController.java +++ b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/controller/SimTestController.java @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; @Log4j2 -@Tag(name ="SimTestController",description = "充电桩模拟器操作接口") +@Tag(name = "SimTestController", description = "充电桩模拟器操作接口") @RestController @RequestMapping("/evcs/sim/test/") public class SimTestController { @@ -44,52 +44,63 @@ public class SimTestController { @Operation(summary = "启动一个测试订单", method = "GET") @GetMapping("/startChargeTest") - public R startChargeTest(String connectorId){ + public R startChargeTest(String connectorId) { + //connector_id:充电设备接口编码,同一运营商内唯一;9位组织机构编码+14桩编码+3枪号 + //select LENGTH('2411010810000101') 这个返回是16位,也不是26位啊,我也是服了~ try { + //获取运营商实体 Bean ,基础设施运营商信息表 :北京奥陌科技有限公司 SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8"); + //QueryStartChargeData JAVA BEAN: 启动充电请求报文 QueryStartChargeData queryStartChargeData = new QueryStartChargeData(); + //"充电订单号,格式“运营商ID+唯一编号”,27字符 queryStartChargeData.setStartChargeSeq(sysOperator.getOperatorId() + System.currentTimeMillis()); + //充电设备接口编码 queryStartChargeData.setConnectorID(connectorId); + //账户余额 queryStartChargeData.setBalance(new BigDecimal("9999999")); + //用户手机号,这里是测试,写死的手机号 queryStartChargeData.setPhoneNum("13910000000"); + //车牌号 queryStartChargeData.setPlateNum("京kz3433"); + //二维码,这里没有传入二维码 queryStartChargeData.setQrCode(""); + + //sysOperator:运营商,看来支持多运营商 + //queryStartChargeData:组装好的实体Bean + //startCharging:开始充电 int result = remoteStartChargingService.startCharging(sysOperator, queryStartChargeData); - if(0 == result){ + //如果没有错误,那么是启动成功 + if (0 == result) { return R.ok("启动订单成功"); - } - else{ + } else { + //否则返回错误码 return R.ok("启动订单失败" + result); } - } - catch (Exception ex){ + } catch (Exception ex) { log.error("启动一个测试订单失败", ex); return R.fail("启动一个测试订单失败"); } - } @Operation(summary = "停止一个测试订单", method = "GET") @GetMapping("/stopChargeTest") - public R stopChargeTest(String startChargeSeq){ + public R stopChargeTest(String startChargeSeq) { try { SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8"); SysChargeOrder sysChargeOrder = remoteSysChargeOrderService.getChargeOrderByStartChargeSeq(startChargeSeq); - if(sysChargeOrder == null){ + if (sysChargeOrder == null) { return R.fail("停止订单失败(未找到订单)"); } QueryStopChargeData queryStopChargeData = new QueryStopChargeData(); queryStopChargeData.setConnectorID(sysChargeOrder.getConnectorId()); queryStopChargeData.setStartChargeSeq(sysChargeOrder.getStartChargeSeq()); int result = remoteStopChargingService.stopCharging(sysOperator, queryStopChargeData); - if(0 == result){ + if (0 == result) { return R.ok("停止订单成功"); - } - else{ + } else { return R.fail("停止订单失败:" + result); } - } - catch (Exception ex){ + } catch (Exception ex) { log.error("停止订单失败", ex); return R.fail("停止订单失败"); } diff --git a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/dubbo/RemoteStartChargingServiceImpl.java b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/dubbo/RemoteStartChargingServiceImpl.java index 9f9fad9..4ca802c 100644 --- a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/dubbo/RemoteStartChargingServiceImpl.java +++ b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/dubbo/RemoteStartChargingServiceImpl.java @@ -50,48 +50,73 @@ public class RemoteStartChargingServiceImpl implements RemoteStartChargingServic @Lazy SimCenter simCenter; + /** + * 开始充电 + * @param sysOperator 运营商 + * @param queryStartChargeData 启动充电请求 + * @return + * @throws BaseException + */ @Override public int startCharging(SysOperator sysOperator, QueryStartChargeData queryStartChargeData) throws BaseException { + //如果模拟器中显示此设备不在线,返回错误码2 if(!simCenter.isOnline(queryStartChargeData.getConnectorID())){ return 2; } - + //获取充电设备信息,如果Redis缓存中有了,就直接用,没有的话,就查询数据库并且记录到缓存中再使用 SysConnector sysConnector = remoteSysConnectorService.getConnectorById(queryStartChargeData.getConnectorID()); if(sysConnector == null || sysConnector.getState() != 0 || sysConnector.getStatus() != 2){ //getStatus状态 0离网 1空闲 2占用(未充电)3占用(充电)4占用(预约锁定)255故障 //state充电桩状态 0正常 1故障 - return 3; + return 3;//返回错误码3:没找着枪,枪故障,或者枪离线,或者枪被占用等,反正就是枪不好用都返回3 } + + //表:sys_charge_order:充电订单信息表 SysChargeOrder sysChargeOrder = new SysChargeOrder(); + //充电订单号 String lockKey = HlhtRedisKey.LOCK_KEY_CHARGE_ORDER_INFO + queryStartChargeData.getStartChargeSeq(); LockInfo lockInfo = null; try{ + //分布式锁框架Lock4j + //https://segmentfault.com/a/1190000044440523 + //对Redis的key键值进行锁定 lockInfo = lockTemplate.lock(lockKey, 3000L, 5000L, RedissonLockExecutor.class); - sysChargeOrder.setStartChargeSeq(queryStartChargeData.getStartChargeSeq()); - sysChargeOrder.setOperatorId(sysOperator.getOperatorId()); - sysChargeOrder.setTradeNo(queryStartChargeData.getStartChargeSeq()); - sysChargeOrder.setConnectorId(sysConnector.getConnectorId()); + sysChargeOrder.setStartChargeSeq(queryStartChargeData.getStartChargeSeq());//序列号 + sysChargeOrder.setOperatorId(sysOperator.getOperatorId());//运营商id + sysChargeOrder.setTradeNo(queryStartChargeData.getStartChargeSeq());//交易号,与序列号是一个东西 + sysChargeOrder.setConnectorId(sysConnector.getConnectorId());//设备ID + //充电订单状态;1启动中 2充电中 3停止中 4已结束 5未知 sysChargeOrder.setStartChargeSeqStat((short) 2); + //1空闲 2占用(未充电) 3占用(充电中) 4占用(预约锁定) 255故障 sysChargeOrder.setConnectorStatus(3); + //开始充电时间 sysChargeOrder.setStartTime(new Date()); + //订单结束后是否已和用户平台同步 0否 1是 sysChargeOrder.setSyncFlag((short) 0); + //是否已上报至市政平台 sysChargeOrder.setReportGov((short) 0); + //手机号 sysChargeOrder.setPhoneNum(queryStartChargeData.getPhoneNum()); + //车牌号 sysChargeOrder.setPlateNum(queryStartChargeData.getPlateNum()); + //获取收费的标准,应该是支持分时电价 List priceList = priceService.getConnectorPriceList(sysConnector.getConnectorId()); if(priceList != null && priceList.size() > 0){ - sysChargeOrder.setPriceInfo(JsonUtils.toJsonString(priceList)); + sysChargeOrder.setPriceInfo(JsonUtils.toJsonString(priceList));//直接JSON化后将JSON字符串写入数据库 } log.info(JSON.toJSONString(sysChargeOrder)); + //调用dubbo 远程服务保存订单信息 remoteSysChargeOrderService.save(sysChargeOrder); log.info("启动订单创建成功:" + JSON.toJSONString(sysChargeOrder)); } finally { if(lockInfo != null){ + //释放锁 lockTemplate.releaseLock(lockInfo); } } + //模拟器启动充电 simCenter.startCharge(sysChargeOrder); return 0; } diff --git a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/simulation/SimPileClient.java b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/simulation/SimPileClient.java index 645e948..c7c19a8 100644 --- a/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/simulation/SimPileClient.java +++ b/omind-modules/omind-simplat/src/main/java/org/dromara/omind/simplat/simulation/SimPileClient.java @@ -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);