main
黄海 8 months ago
parent cdbb9c28c6
commit 30ce8c0422

@ -62,6 +62,11 @@ public class SysConnectorServiceImpl implements SysConnectorService {
@Lazy @Lazy
StationOperatorLinkService stationOperatorLinkService; StationOperatorLinkService stationOperatorLinkService;
/**
* ID
* @param connectorId
* @return
*/
@Override @Override
public SysConnector getConnectorById(String connectorId) { public SysConnector getConnectorById(String connectorId) {
if(TextUtils.isBlank(connectorId)){ if(TextUtils.isBlank(connectorId)){
@ -70,24 +75,30 @@ public class SysConnectorServiceImpl implements SysConnectorService {
else if(connectorId.length() <= 9){ else if(connectorId.length() <= 9){
return null; return null;
} }
String key = HlhtRedisKey.SYS_CONNECTOR + connectorId; String key = HlhtRedisKey.SYS_CONNECTOR + connectorId;//redis中的键值
SysConnector sysConnector = RedisUtils.getCacheObject(key); SysConnector sysConnector = RedisUtils.getCacheObject(key);
if(sysConnector != null){ if(sysConnector != null){
return sysConnector; return sysConnector;//如果redis中存在直接返回
} }
//到这里就是不在redis上存在了需要查询数据库
//表sys_connector
LambdaQueryWrapper<SysConnector> queryWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysConnector> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(SysConnector::getConnectorId, connectorId); queryWrapper.eq(SysConnector::getConnectorId, connectorId);
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
List<SysConnector> list = iService.list(queryWrapper); List<SysConnector> list = iService.list(queryWrapper);
if(list != null && list.size() > 0){ if(list != null && list.size() > 0){
sysConnector = list.get(0); sysConnector = list.get(0);
RedisUtils.setCacheObject(key, sysConnector, Duration.ofMinutes(5)); RedisUtils.setCacheObject(key, sysConnector, Duration.ofMinutes(5));//5分钟的TTL值
return sysConnector; return sysConnector;
} }
return null; return null;
} }
/**
* ,
* @param connectorId
* @return
*/
@Override @Override
public Boolean isConnectorIdValid(String connectorId) { public Boolean isConnectorIdValid(String connectorId) {
if(TextUtils.isBlank(connectorId)){ if(TextUtils.isBlank(connectorId)){

@ -31,27 +31,39 @@ public class SysOperatorServiceImpl implements SysOperatorService {
@Lazy @Lazy
SysOperatorService selfService; SysOperatorService selfService;
/**
* ID
* @param operatorId
* @return
*/
@Override @Override
public SysOperator getOperatorById(String operatorId) { public SysOperator getOperatorById(String operatorId) {
//operatorId:MA01D1QR8
if(TextUtils.isBlank(operatorId)){ if(TextUtils.isBlank(operatorId)){
return null; return null;
} }
else if(operatorId.length() != 9){ else if(operatorId.length() != 9){
return null; return null;
} }
//键值 = keys:v1:hlht:sys:operator:MA01D1QR8
String key = HlhtRedisKey.SYS_OPERATOR + operatorId; String key = HlhtRedisKey.SYS_OPERATOR + operatorId;
//根据组装的key到Redis上去获取一个对象然后反序列化成对象返回
SysOperator sysOperator = RedisUtils.getCacheObject(key); SysOperator sysOperator = RedisUtils.getCacheObject(key);
if(sysOperator != null){ if(sysOperator != null){
return sysOperator; return sysOperator;
} }
LambdaQueryWrapper<SysOperator> queryWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysOperator> queryWrapper = Wrappers.lambdaQuery();
//到表sys_operator中去查找 operator_id = MA01D1QR8
// select * from sys_operator where operator_id = 'MA01D1QR8' --北京奥陌科技有限公司
queryWrapper.eq(SysOperator::getOperatorId, operatorId); queryWrapper.eq(SysOperator::getOperatorId, operatorId);
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
List<SysOperator> list = iService.list(queryWrapper); List<SysOperator> list = iService.list(queryWrapper);
if(list != null && list.size() > 0){ if(list != null && list.size() > 0){
sysOperator = list.get(0); sysOperator = list.get(0);
//记录回Redis中去
RedisUtils.setCacheObject(HlhtRedisKey.SYS_OPERATOR + sysOperator.getOperatorId(), sysOperator); RedisUtils.setCacheObject(HlhtRedisKey.SYS_OPERATOR + sysOperator.getOperatorId(), sysOperator);
return sysOperator; return sysOperator;//将查询到的对象返回
//基础设施运营商信息表
} }
return null; return null;
} }

@ -20,6 +20,7 @@ import java.util.Map;
@Configuration @Configuration
public class SimCenter { public class SimCenter {
//某个充电桩是不是在线的Map,如果存在就是存线不存在就是不在线那么一定有一个定时检查的任务在处理这个map!
private static Map<String, SimPileClient> pileMap = new LinkedHashMap<>(); private static Map<String, SimPileClient> pileMap = new LinkedHashMap<>();
@DubboReference @DubboReference
@ -31,112 +32,100 @@ public class SimCenter {
@DubboReference @DubboReference
RemoteTradeService remoteTradeService; RemoteTradeService remoteTradeService;
public Boolean isOnline(String connectorId) public Boolean isOnline(String connectorId) {
{ if (pileMap.containsKey(connectorId)) {//桩是不是在线
if(pileMap.containsKey(connectorId)){
return true; return true;
} } else {
else{
return false; return false;
} }
} }
public void start(String connectorId) throws BaseException public void start(String connectorId) throws BaseException {
{
log.info("启动模态充电桩:" + connectorId); log.info("启动模态充电桩:" + connectorId);
if(pileMap.containsKey(connectorId)){ if (pileMap.containsKey(connectorId)) {
throw new BaseException("模态桩已启动"); throw new BaseException("模态桩已启动");
} }
SysConnector sysConnector = connectorService.getConnectorById(connectorId); SysConnector sysConnector = connectorService.getConnectorById(connectorId);
if(sysConnector == null){ if (sysConnector == null) {
throw new BaseException("模态枪不存在"); throw new BaseException("模态枪不存在");
} }
SysEquipment sysEquipment = equipmentService.getEquipmentById(sysConnector.getEquipmentId()); SysEquipment sysEquipment = equipmentService.getEquipmentById(sysConnector.getEquipmentId());
if(sysEquipment == null){ if (sysEquipment == null) {
throw new BaseException("模态桩不存在"); throw new BaseException("模态桩不存在");
} }
SimPileClient pileClient = new SimPileClient(remoteTradeService, sysEquipment, sysConnector); SimPileClient pileClient = new SimPileClient(remoteTradeService, sysEquipment, sysConnector);
pileMap.put(connectorId, pileClient); pileMap.put(connectorId, pileClient);
try{ try {
new Thread(()->{ new Thread(() -> {
pileClient.start(); pileClient.start();
log.info("模态桩服务------启动成功"); log.info("模态桩服务------启动成功");
}).start(); }).start();
} } catch (BaseException ex) {
catch (BaseException ex){
throw ex; throw ex;
} } catch (Exception ex) {
catch (Exception ex){
throw new BaseException("未知错误"); throw new BaseException("未知错误");
} }
} }
public void stop(String connectorId) throws BaseException public void stop(String connectorId) throws BaseException {
{ if (!pileMap.containsKey(connectorId)) {
if(!pileMap.containsKey(connectorId)){
throw new BaseException("模态桩未启动"); throw new BaseException("模态桩未启动");
} }
try{ try {
SimPileClient pileClient = pileMap.get(connectorId); SimPileClient pileClient = pileMap.get(connectorId);
if(pileClient == null){ if (pileClient == null) {
throw new BaseException("枪未启动"); throw new BaseException("枪未启动");
} }
pileClient.stop(); pileClient.stop();
} } catch (BaseException ex) {
catch (BaseException ex){
throw ex; throw ex;
} } finally {
finally {
pileMap.remove(connectorId); pileMap.remove(connectorId);
} }
} }
public void link(String connectorId) throws BaseException public void link(String connectorId) throws BaseException {
{ if (!pileMap.containsKey(connectorId)) {
if(!pileMap.containsKey(connectorId)){
throw new BaseException("充电桩未启动"); throw new BaseException("充电桩未启动");
} }
SimPileClient pileClient = pileMap.get(connectorId); SimPileClient pileClient = pileMap.get(connectorId);
if(pileClient == null){ if (pileClient == null) {
throw new BaseException("枪未启动"); throw new BaseException("枪未启动");
} }
pileClient.link(); pileClient.link();
} }
public void unlink(String connectorId) throws BaseException public void unlink(String connectorId) throws BaseException {
{ if (!pileMap.containsKey(connectorId)) {
if(!pileMap.containsKey(connectorId)){
throw new BaseException("充电桩未启动"); throw new BaseException("充电桩未启动");
} }
SimPileClient pileClient = pileMap.get(connectorId); SimPileClient pileClient = pileMap.get(connectorId);
if(pileClient == null){ if (pileClient == null) {
throw new BaseException("枪未启动"); throw new BaseException("枪未启动");
} }
pileClient.unlink(); pileClient.unlink();
} }
public void startCharge(SysChargeOrder sysChargeOrder) throws BaseException public void startCharge(SysChargeOrder sysChargeOrder) throws BaseException {
{ if (sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())) {
if(sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())){
throw new BaseException("无效的枪信息"); throw new BaseException("无效的枪信息");
} }
SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId()); SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId());
if(pileClient == null){ if (pileClient == null) {
throw new BaseException("枪未启动"); throw new BaseException("枪未启动");
} }
pileClient.startCharge(sysChargeOrder); pileClient.startCharge(sysChargeOrder);
} }
public void stopCharge(SysChargeOrder sysChargeOrder) throws BaseException public void stopCharge(SysChargeOrder sysChargeOrder) throws BaseException {
{ if (sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())) {
if(sysChargeOrder == null || TextUtils.isBlank(sysChargeOrder.getConnectorId())){
throw new BaseException("无效的枪信息"); throw new BaseException("无效的枪信息");
} }
SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId()); SimPileClient pileClient = pileMap.get(sysChargeOrder.getConnectorId());
if(pileClient == null){ if (pileClient == null) {
throw new BaseException("枪未启动"); throw new BaseException("枪未启动");
} }
pileClient.stopCharge(1, sysChargeOrder); pileClient.stopCharge(1, sysChargeOrder);

@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal; import java.math.BigDecimal;
@Log4j2 @Log4j2
@Tag(name ="SimTestController",description = "充电桩模拟器操作接口") @Tag(name = "SimTestController", description = "充电桩模拟器操作接口")
@RestController @RestController
@RequestMapping("/evcs/sim/test/") @RequestMapping("/evcs/sim/test/")
public class SimTestController { public class SimTestController {
@ -44,52 +44,63 @@ public class SimTestController {
@Operation(summary = "启动一个测试订单", method = "GET") @Operation(summary = "启动一个测试订单", method = "GET")
@GetMapping("/startChargeTest") @GetMapping("/startChargeTest")
public R startChargeTest(String connectorId){ public R startChargeTest(String connectorId) {
//connector_id:充电设备接口编码同一运营商内唯一9位组织机构编码+14桩编码+3枪号
//select LENGTH('2411010810000101') 这个返回是16位也不是26位啊我也是服了~
try { try {
//获取运营商实体 Bean ,基础设施运营商信息表 :北京奥陌科技有限公司
SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8"); SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8");
//QueryStartChargeData JAVA BEAN: 启动充电请求报文
QueryStartChargeData queryStartChargeData = new QueryStartChargeData(); QueryStartChargeData queryStartChargeData = new QueryStartChargeData();
//"充电订单号格式“运营商ID+唯一编号”27字符
queryStartChargeData.setStartChargeSeq(sysOperator.getOperatorId() + System.currentTimeMillis()); queryStartChargeData.setStartChargeSeq(sysOperator.getOperatorId() + System.currentTimeMillis());
//充电设备接口编码
queryStartChargeData.setConnectorID(connectorId); queryStartChargeData.setConnectorID(connectorId);
//账户余额
queryStartChargeData.setBalance(new BigDecimal("9999999")); queryStartChargeData.setBalance(new BigDecimal("9999999"));
//用户手机号,这里是测试,写死的手机号
queryStartChargeData.setPhoneNum("13910000000"); queryStartChargeData.setPhoneNum("13910000000");
//车牌号
queryStartChargeData.setPlateNum("京kz3433"); queryStartChargeData.setPlateNum("京kz3433");
//二维码,这里没有传入二维码
queryStartChargeData.setQrCode(""); queryStartChargeData.setQrCode("");
//sysOperator:运营商,看来支持多运营商
//queryStartChargeData组装好的实体Bean
//startCharging:开始充电
int result = remoteStartChargingService.startCharging(sysOperator, queryStartChargeData); int result = remoteStartChargingService.startCharging(sysOperator, queryStartChargeData);
if(0 == result){ //如果没有错误,那么是启动成功
if (0 == result) {
return R.ok("启动订单成功"); return R.ok("启动订单成功");
} } else {
else{ //否则返回错误码
return R.ok("启动订单失败" + result); return R.ok("启动订单失败" + result);
} }
} } catch (Exception ex) {
catch (Exception ex){
log.error("启动一个测试订单失败", ex); log.error("启动一个测试订单失败", ex);
return R.fail("启动一个测试订单失败"); return R.fail("启动一个测试订单失败");
} }
} }
@Operation(summary = "停止一个测试订单", method = "GET") @Operation(summary = "停止一个测试订单", method = "GET")
@GetMapping("/stopChargeTest") @GetMapping("/stopChargeTest")
public R stopChargeTest(String startChargeSeq){ public R stopChargeTest(String startChargeSeq) {
try { try {
SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8"); SysOperator sysOperator = remoteSysOperatorService.getOperatorById("MA01D1QR8");
SysChargeOrder sysChargeOrder = remoteSysChargeOrderService.getChargeOrderByStartChargeSeq(startChargeSeq); SysChargeOrder sysChargeOrder = remoteSysChargeOrderService.getChargeOrderByStartChargeSeq(startChargeSeq);
if(sysChargeOrder == null){ if (sysChargeOrder == null) {
return R.fail("停止订单失败(未找到订单)"); return R.fail("停止订单失败(未找到订单)");
} }
QueryStopChargeData queryStopChargeData = new QueryStopChargeData(); QueryStopChargeData queryStopChargeData = new QueryStopChargeData();
queryStopChargeData.setConnectorID(sysChargeOrder.getConnectorId()); queryStopChargeData.setConnectorID(sysChargeOrder.getConnectorId());
queryStopChargeData.setStartChargeSeq(sysChargeOrder.getStartChargeSeq()); queryStopChargeData.setStartChargeSeq(sysChargeOrder.getStartChargeSeq());
int result = remoteStopChargingService.stopCharging(sysOperator, queryStopChargeData); int result = remoteStopChargingService.stopCharging(sysOperator, queryStopChargeData);
if(0 == result){ if (0 == result) {
return R.ok("停止订单成功"); return R.ok("停止订单成功");
} } else {
else{
return R.fail("停止订单失败:" + result); return R.fail("停止订单失败:" + result);
} }
} } catch (Exception ex) {
catch (Exception ex){
log.error("停止订单失败", ex); log.error("停止订单失败", ex);
return R.fail("停止订单失败"); return R.fail("停止订单失败");
} }

@ -50,48 +50,73 @@ public class RemoteStartChargingServiceImpl implements RemoteStartChargingServic
@Lazy @Lazy
SimCenter simCenter; SimCenter simCenter;
/**
*
* @param sysOperator
* @param queryStartChargeData
* @return
* @throws BaseException
*/
@Override @Override
public int startCharging(SysOperator sysOperator, QueryStartChargeData queryStartChargeData) throws BaseException { public int startCharging(SysOperator sysOperator, QueryStartChargeData queryStartChargeData) throws BaseException {
//如果模拟器中显示此设备不在线返回错误码2
if(!simCenter.isOnline(queryStartChargeData.getConnectorID())){ if(!simCenter.isOnline(queryStartChargeData.getConnectorID())){
return 2; return 2;
} }
//获取充电设备信息如果Redis缓存中有了就直接用没有的话就查询数据库并且记录到缓存中再使用
SysConnector sysConnector = remoteSysConnectorService.getConnectorById(queryStartChargeData.getConnectorID()); SysConnector sysConnector = remoteSysConnectorService.getConnectorById(queryStartChargeData.getConnectorID());
if(sysConnector == null || sysConnector.getState() != 0 || sysConnector.getStatus() != 2){ if(sysConnector == null || sysConnector.getState() != 0 || sysConnector.getStatus() != 2){
//getStatus状态 0离网 1空闲 2占用未充电3占用充电4占用预约锁定255故障 //getStatus状态 0离网 1空闲 2占用未充电3占用充电4占用预约锁定255故障
//state充电桩状态 0正常 1故障 //state充电桩状态 0正常 1故障
return 3; return 3;//返回错误码3:没找着枪枪故障或者枪离线或者枪被占用等反正就是枪不好用都返回3
} }
//表sys_charge_order:充电订单信息表
SysChargeOrder sysChargeOrder = new SysChargeOrder(); SysChargeOrder sysChargeOrder = new SysChargeOrder();
//充电订单号
String lockKey = HlhtRedisKey.LOCK_KEY_CHARGE_ORDER_INFO + queryStartChargeData.getStartChargeSeq(); String lockKey = HlhtRedisKey.LOCK_KEY_CHARGE_ORDER_INFO + queryStartChargeData.getStartChargeSeq();
LockInfo lockInfo = null; LockInfo lockInfo = null;
try{ try{
//分布式锁框架Lock4j
//https://segmentfault.com/a/1190000044440523
//对Redis的key键值进行锁定
lockInfo = lockTemplate.lock(lockKey, 3000L, 5000L, RedissonLockExecutor.class); lockInfo = lockTemplate.lock(lockKey, 3000L, 5000L, RedissonLockExecutor.class);
sysChargeOrder.setStartChargeSeq(queryStartChargeData.getStartChargeSeq()); sysChargeOrder.setStartChargeSeq(queryStartChargeData.getStartChargeSeq());//序列号
sysChargeOrder.setOperatorId(sysOperator.getOperatorId()); sysChargeOrder.setOperatorId(sysOperator.getOperatorId());//运营商id
sysChargeOrder.setTradeNo(queryStartChargeData.getStartChargeSeq()); sysChargeOrder.setTradeNo(queryStartChargeData.getStartChargeSeq());//交易号,与序列号是一个东西
sysChargeOrder.setConnectorId(sysConnector.getConnectorId()); sysChargeOrder.setConnectorId(sysConnector.getConnectorId());//设备ID
//充电订单状态1启动中 2充电中 3停止中 4已结束 5未知
sysChargeOrder.setStartChargeSeqStat((short) 2); sysChargeOrder.setStartChargeSeqStat((short) 2);
//1空闲 2占用未充电 3占用充电中 4占用预约锁定 255故障
sysChargeOrder.setConnectorStatus(3); sysChargeOrder.setConnectorStatus(3);
//开始充电时间
sysChargeOrder.setStartTime(new Date()); sysChargeOrder.setStartTime(new Date());
//订单结束后是否已和用户平台同步 0否 1是
sysChargeOrder.setSyncFlag((short) 0); sysChargeOrder.setSyncFlag((short) 0);
//是否已上报至市政平台
sysChargeOrder.setReportGov((short) 0); sysChargeOrder.setReportGov((short) 0);
//手机号
sysChargeOrder.setPhoneNum(queryStartChargeData.getPhoneNum()); sysChargeOrder.setPhoneNum(queryStartChargeData.getPhoneNum());
//车牌号
sysChargeOrder.setPlateNum(queryStartChargeData.getPlateNum()); sysChargeOrder.setPlateNum(queryStartChargeData.getPlateNum());
//获取收费的标准,应该是支持分时电价
List<PolicyInfoData> priceList = priceService.getConnectorPriceList(sysConnector.getConnectorId()); List<PolicyInfoData> priceList = priceService.getConnectorPriceList(sysConnector.getConnectorId());
if(priceList != null && priceList.size() > 0){ if(priceList != null && priceList.size() > 0){
sysChargeOrder.setPriceInfo(JsonUtils.toJsonString(priceList)); sysChargeOrder.setPriceInfo(JsonUtils.toJsonString(priceList));//直接JSON化后将JSON字符串写入数据库
} }
log.info(JSON.toJSONString(sysChargeOrder)); log.info(JSON.toJSONString(sysChargeOrder));
//调用dubbo 远程服务保存订单信息
remoteSysChargeOrderService.save(sysChargeOrder); remoteSysChargeOrderService.save(sysChargeOrder);
log.info("启动订单创建成功:" + JSON.toJSONString(sysChargeOrder)); log.info("启动订单创建成功:" + JSON.toJSONString(sysChargeOrder));
} }
finally { finally {
if(lockInfo != null){ if(lockInfo != null){
//释放锁
lockTemplate.releaseLock(lockInfo); lockTemplate.releaseLock(lockInfo);
} }
} }
//模拟器启动充电
simCenter.startCharge(sysChargeOrder); simCenter.startCharge(sysChargeOrder);
return 0; return 0;
} }

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

Loading…
Cancel
Save