diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/PowerHeartbeatHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/PowerHeartbeatHandler.java index 797cf1cf2..2b2a6e5cb 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/PowerHeartbeatHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/PowerHeartbeatHandler.java @@ -5,11 +5,15 @@ import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ebike.EBikeDataProtocol; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.enums.ebike.PortStatusEnum; +import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.EBikeOperateFactory; +import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.ebike.EBikeCommandEnum; import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd06; +import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileConnectorInfoService; import io.netty.channel.ChannelHandlerContext; @@ -17,6 +21,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; +import java.util.Objects; + /** * 端口充电时功率心跳包 */ @@ -31,6 +38,9 @@ public class PowerHeartbeatHandler extends AbstractEBikeHandler { @Autowired private PileBasicInfoService pileBasicInfoService; + @Autowired + private OrderBasicInfoService orderBasicInfoService; + @Override public void afterPropertiesSet() throws Exception { EBikeOperateFactory.register(type, this); @@ -52,8 +62,6 @@ public class PowerHeartbeatHandler extends AbstractEBikeHandler { log.info("端口充电时功率心跳包:{}", JSON.toJSONString(message)); // 更新枪口状态 updatePileStatus(message); - // 保存实时监控数据 - saveRealTimeMonitorData(message); return getResult(dataProtocol, Constants.zeroByteArray); } @@ -67,13 +75,22 @@ public class PowerHeartbeatHandler extends AbstractEBikeHandler { realTimeMonitorData.setPileSn(message.getPhysicalId() + ""); realTimeMonitorData.setConnectorCode(message.getConnectorCode()); realTimeMonitorData.setPileConnectorCode(realTimeMonitorData.getPileSn() + realTimeMonitorData.getConnectorCode()); - realTimeMonitorData.setTransactionCode(message.getOrderCode()); + realTimeMonitorData.setTransactionCode(message.getTransactionCode()); realTimeMonitorData.setConnectorStatus(message.getPortStatus()); realTimeMonitorData.setOutputVoltage(message.getVoltage()); realTimeMonitorData.setOutputCurrent(message.getCurrent()); - // realTimeMonitorData.setOutputPower(""); realTimeMonitorData.setDateTime(DateUtils.getDateTime()); - + String portStatus = PortStatusEnum.eBikeStatusTransformDBStatus(message.getPortStatus()); + realTimeMonitorData.setConnectorStatus(portStatus); + realTimeMonitorData.setOutputPower(message.getRealTimePower()); + realTimeMonitorData.setBatteryMaxTemperature(message.getAmbientTemperature()); + realTimeMonitorData.setSumChargingTime(message.getChargingTime()); + realTimeMonitorData.setTimeRemaining(message.getTimePeriodElectricity()); + realTimeMonitorData.setChargingDegree(message.getMaxPower()); + realTimeMonitorData.setLossDegree(message.getMinPower()); + realTimeMonitorData.setChargingAmount(message.getTotalUsedElectricity()); + realTimeMonitorData.setHomingFlag(message.getStartMode()); + realTimeMonitorData.setGunLineTemperature(message.getPortTemperature()); pileBasicInfoService.saveRealTimeMonitorData2Redis(realTimeMonitorData); } @@ -85,6 +102,46 @@ public class PowerHeartbeatHandler extends AbstractEBikeHandler { String pileSn = message.getPhysicalId() + ""; String connectorCode = message.getConnectorCode(); String portStatus = message.getPortStatus(); + String transactionCode = message.getTransactionCode(); + + if (StringUtils.equals(portStatus, String.valueOf(PortStatusEnum.CHARGING.getValue()))) { + // 默认保存到redis + boolean saveRedisFlag = true; + + // 查询数据库中该订单当前信息 + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); + if (Objects.nonNull(orderInfo)) { + if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { + // 在订单状态为 订单完成或待结算,不保存 + saveRedisFlag = false; + } + + boolean updateFlag = false; + if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.NOT_START.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ABNORMAL.getValue()) + || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { + updateFlag = true; + // 如果是未启动状态或者异常状态, 修改这个订单状态为充电中 2023年7月7日新增 如果是待结算状态,也改为充电中 + orderInfo.setOrderStatus(OrderStatusEnum.IN_THE_CHARGING.getValue()); + } + + // 如果原来没有开始充电时间就保存当前时间为开始充电时间 + if (orderInfo.getChargeStartTime() == null) { + updateFlag = true; + orderInfo.setChargeStartTime(new Date()); + } + + if (updateFlag) { + orderBasicInfoService.updateOrderBasicInfo(orderInfo); + } + } + + // 充电时保存实时数据到redis + if (saveRedisFlag) { + saveRealTimeMonitorData(message); + } + } pileConnectorInfoService.updateConnectorStatus(pileSn + connectorCode, PortStatusEnum.eBikeStatusTransformDBStatus(portStatus)); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java index c02920cf7..e9b9e0423 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java @@ -61,7 +61,7 @@ public class EBikeMessageCmd06 extends AbsEBikeMessage2 { /** * 订单编号:当前充电的订单编号 */ - private String orderCode; + private String transactionCode; /** * 该时间段内消耗电量:此数据需除以4800后才是真实的电量,该字段属于调试使用,服务器无需关心此字段 @@ -149,7 +149,7 @@ public class EBikeMessageCmd06 extends AbsEBikeMessage2 { startIndex += length; length = 16; - this.orderCode = BytesUtil.bcd2Str(BytesUtil.copyBytes(messageBytes, startIndex, length)); + this.transactionCode = BytesUtil.bcd2Str(BytesUtil.copyBytes(messageBytes, startIndex, length)); startIndex += length; length = 2;