From 0171908069c7851f346b237f31423a8f55411a7d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 22 Nov 2024 16:05:15 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=93=9D=E7=89=99?= =?UTF-8?q?=E5=85=85=E7=94=B5=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 8a163bb29286c6e459b9e4da91c8e7f4138a38f7) --- .../com/jsowell/service/OrderService.java | 20 +++++++++++++------ .../enums/ykc/YKCChargingStopReasonEnum.java | 1 - 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 1fd94afb2..6f15e2f76 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -1476,12 +1476,16 @@ public class OrderService { // record.setEndSoc(dto.getEndSoc()); record.setAmmeterTotalStart(dto.getStartKwh()); record.setAmmeterTotalEnd(dto.getStopKwh()); - record.setTotalUsedElectricity(new BigDecimal(dto.getTotalEnergy())); - record.setSharpUsedElectricity(new BigDecimal(dto.getEnergySharp())); - record.setPeakUsedElectricity(new BigDecimal(dto.getEnergyPeak())); - record.setFlatUsedElectricity(new BigDecimal(dto.getEnergyFlat())); - record.setValleyUsedElectricity(new BigDecimal(dto.getEnergyValley())); - record.setReason(dto.getStopReason()); + record.setTotalUsedElectricity(StringUtils.isNotBlank(dto.getTotalEnergy()) ? new BigDecimal(dto.getTotalEnergy()) : BigDecimal.ZERO); + record.setSharpUsedElectricity(StringUtils.isNotBlank(dto.getEnergySharp()) ? new BigDecimal(dto.getEnergySharp()) : BigDecimal.ZERO); + record.setPeakUsedElectricity(StringUtils.isNotBlank(dto.getEnergyPeak()) ? new BigDecimal(dto.getEnergyPeak()) : BigDecimal.ZERO); + record.setFlatUsedElectricity(StringUtils.isNotBlank(dto.getEnergyFlat()) ? new BigDecimal(dto.getEnergyFlat()) : BigDecimal.ZERO); + record.setValleyUsedElectricity(StringUtils.isNotBlank(dto.getEnergyValley()) ? new BigDecimal(dto.getEnergyValley()) : BigDecimal.ZERO); + if (StringUtils.isNotBlank(dto.getStopReason())) { + int i = Integer.parseInt(dto.getStopReason(), 16); + String stopReasonMsg = YKCChargingStopReasonEnum.getMsgByCode(i); + record.setReason(stopReasonMsg); + } record.setTradeDate(DateUtils.parseDate(dto.getTradeTime())); record.setSourceType("BT"); record.setCreateBy(dto.getMemberId()); @@ -1491,4 +1495,8 @@ public class OrderService { record.setDelFlag(DelFlagEnum.NORMAL.getValue()); personalChargingRecordService.insertOrUpdateSelective(record); } + + public static void main(String[] args) { + + } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/YKCChargingStopReasonEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/YKCChargingStopReasonEnum.java index c9a0f2e29..6a12ff8d8 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/YKCChargingStopReasonEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/YKCChargingStopReasonEnum.java @@ -115,7 +115,6 @@ public enum YKCChargingStopReasonEnum { ; - private int code; private String msg; From 7fd5bf6eca8d04c8b04d3cf3499897dc525bfd6f Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 22 Nov 2024 17:44:05 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=80=80?= =?UTF-8?q?=E5=87=BA=E5=8A=A0=E8=AF=A6=E7=BB=86=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/YKCBusinessServiceImpl.java | 4 ++-- .../impl/PileConnectorInfoServiceImpl.java | 21 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java b/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java index ad7971900..641edecae 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java @@ -57,7 +57,7 @@ public class YKCBusinessServiceImpl implements YKCBusinessService { if (StringUtils.isBlank(pileSn)) { return; } - log.info("充电桩退出:{}, channelId:{}", pileSn, PileChannelEntity.getChannelByPileSn(pileSn).channel().id()); + log.info("充电桩退出:{}, 类型:主动断开链接, channelId:{}", pileSn, PileChannelEntity.getChannelByPileSn(pileSn).channel().id()); // 充电桩断开连接,所有枪口都设置为【离线】 pileConnectorInfoService.updateConnectorStatusByPileSn(pileSn, PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue()); @@ -68,7 +68,7 @@ public class YKCBusinessServiceImpl implements YKCBusinessService { // 记录充电桩退出msg // 保存报文 String type = YKCFrameTypeCode.PILE_LOG_OUT.getCode() + ""; - String jsonMsg = YKCFrameTypeCode.PILE_LOG_OUT.getValue(); + String jsonMsg = YKCFrameTypeCode.PILE_LOG_OUT.getValue() + ": 充电桩主动断开链接"; pileMsgRecordService.save(pileSn, pileSn, type, jsonMsg, ""); // 删除桩编号和channel的关系 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java index 691fc0e6f..6e01bee97 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java @@ -12,6 +12,7 @@ import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.GroundLockData; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; +import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum; @@ -82,6 +83,9 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService { @Autowired private ThirdPartyStationRelationService thirdPartyStationRelationService; + @Autowired + private PileMsgRecordService pileMsgRecordService; + @Autowired private PileStationInfoService pileStationInfoService; @@ -863,14 +867,25 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService { */ @Override public boolean checkPileOffLine(String pileSn) { + boolean flag = false; // 获取桩最后连接时间,最后连接到平台的时间在3分钟之前,判定为离线 String lastConnectionTime = redisCache.getCacheObject(CacheConstants.PILE_LAST_CONNECTION + pileSn); if (StringUtils.isBlank(lastConnectionTime)) { // 没有最后连接时间,返回离线 - return true; + flag = true; + } else { + long l = DateUtils.intervalTime(lastConnectionTime, DateUtils.getDateTime()); + if (l > 3L) { + // 超过3分钟,返回离线 + flag = true; + } } - long l = DateUtils.intervalTime(lastConnectionTime, DateUtils.getDateTime()); - return l > 3L; + if (flag) { + String type = YKCFrameTypeCode.PILE_LOG_OUT.getCode() + ""; + String jsonMsg = YKCFrameTypeCode.PILE_LOG_OUT.getValue() + ": 超过3分钟无通信, 判断离线!"; + pileMsgRecordService.save(pileSn, pileSn, type, jsonMsg, ""); + } + return flag; } /** From 186b7beb70b51c86e8867580b4fe6460f08383d3 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Mon, 25 Nov 2024 09:50:29 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=85=85=E7=94=B5=E6=A1=A9=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E6=97=A5=E5=BF=97,=20=E5=B1=95=E7=A4=BA=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/service/impl/PileMsgRecordServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java index 80ef50bb7..b654ffb78 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java @@ -225,12 +225,16 @@ public class PileMsgRecordServiceImpl implements PileMsgRecordService { // 枪口编号 String pileConnectorCode = jsonObject.getString("pileSn") + jsonObject.getString("connectorCode"); + String stopReason = jsonObject.getString("stopReasonMsg"); + return "订单号:" + orderCode + ", " + "交易流水号:" + transactionCode + ", " + "枪口编号:" + pileConnectorCode + ", " + "充电度数:" + totalElectricity + ", " + "消费金额:" + consumptionAmount + ", " + "开始时间:" + startTime + ", " + - "结束时间:" + endTime; + "结束时间:" + endTime + ", " + + "停止原因:" + stopReason + ; } } From 3c7a917a6e943bedec1741e2a9aa165735765099 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Mon, 25 Nov 2024 09:56:59 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8E=A5=E5=8F=A3,=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E5=8E=9F=E5=9B=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/PileService.java | 5 +++-- .../vo/uniapp/customer/PersonPileConnectorSumInfoVO.java | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 28b0b6578..9a19fb2c1 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -643,13 +643,14 @@ public class PileService { vo = new PersonPileConnectorSumInfoVO(); vo.setSourceType(personalChargingRecord.getSourceType()); if (personalChargingRecord.getChargeStartTime() != null && personalChargingRecord.getChargeEndTime() != null){ - vo.setChargeStartTime(DateUtils.dateTime(personalChargingRecord.getChargeStartTime())); - vo.setChargeEndTime(DateUtils.dateTime(personalChargingRecord.getChargeEndTime())); + vo.setChargeStartTime(DateUtils.formatDateTime(personalChargingRecord.getChargeStartTime())); + vo.setChargeEndTime(DateUtils.formatDateTime(personalChargingRecord.getChargeEndTime())); String datePoor = DateUtils.getDatePoor(personalChargingRecord.getChargeEndTime(), personalChargingRecord.getChargeStartTime()); vo.setSumChargingTime(datePoor); } vo.setMemberId(personalChargingRecord.getMemberId()); vo.setSumChargingDegree(personalChargingRecord.getTotalUsedElectricity().toString()); + vo.setStopReasonMsg(personalChargingRecord.getReason()); list.add(vo); } return PageResponse.builder() diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileConnectorSumInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileConnectorSumInfoVO.java index bd39b7c52..6527de0da 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileConnectorSumInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/customer/PersonPileConnectorSumInfoVO.java @@ -46,4 +46,9 @@ public class PersonPileConnectorSumInfoVO { * 来源(4G/BT) sourceType */ private String sourceType; + + /** + * 停止原因 + */ + private String stopReasonMsg; } From 355c34e262fca5ac7ca4b6400da6078e5f147955 Mon Sep 17 00:00:00 2001 From: Lemon Date: Mon, 25 Nov 2024 11:14:57 +0800 Subject: [PATCH 5/6] update --- .../service/impl/ChargeAlgorithmService.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java index 806680454..aa597e21a 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java @@ -1,5 +1,12 @@ package com.jsowell.thirdparty.platform.service.impl; +import com.jsowell.common.constant.Constants; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.domain.OrderBasicInfo; +import com.jsowell.pile.service.OrderBasicInfoService; +import com.jsowell.pile.vo.uniapp.customer.OrderVO; +import com.jsowell.thirdparty.platform.domain.ChargeAlgorithmData; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -10,4 +17,69 @@ import org.springframework.stereotype.Service; */ @Service public class ChargeAlgorithmService { + + @Autowired + private OrderBasicInfoService orderBasicInfoService; + + /** + * 推送充电订单数据 + * @param orderCode + */ + public void pushOrderInfo(String orderCode) { + // 根据订单号查询订单信息 + OrderVO orderVO = orderBasicInfoService.getChargeOrderInfoByOrderCode(orderCode); + + ChargeAlgorithmData data = ChargeAlgorithmData.builder() + .orderCode(orderCode) + .initSoc(Constants.zero) + .currentSoc(Constants.zero) + .alarmCode(Constants.ZERO) + .currentServiceFee(String.valueOf(orderVO.getTotalServiceAmount())) + .currentTotalFee(String.valueOf(orderVO.getOrderAmount())) + .totalCharge(orderVO.getTotalPower()) + .totalChargeTime(Integer.parseInt(orderVO.getChargingTime())) + .remainChargeTime(Constants.zero) + // .maxAllowElectricity() + // .singleMaxAllowVoltage() + // .dcv() + // .dca() + // .bmsDemandVoltage() + // .bmsDemandElectricity() + // .bmsChargeMode() + // .readBeforeCharge() + // .readCurrentCharge() + // .beginTime() + // .maxAllowTemp() + // .chargePower() + // .ratedCapacity() + // .nominalEnergy() + // .ratedVoltage() + // .singleMaxVoltage() + // .singleMinVoltage() + // .singleMaxTemp() + // .ventTemp() + // .environmentTemp() + // .gunTemp() + // .doorStatus() + // .bmsVersion() + // .measuringChargeVoltage() + // .measuringChargeElectricity() + // .maxSingleVoltageGroupNum() + // .maxSingleVoltageNum() + // .maxTempPointNum() + // .minTempPointNum() + // .batteryType() + // .batteryInsulation() + // .maxAllowTotalVoltage() + // .beforeChargeTotalVoltage() + + .build(); + + if (StringUtils.isNotBlank(orderVO.getStartSoc())) { + data.setInitSoc(Integer.parseInt(orderVO.getStartSoc())); + } + if (StringUtils.isNotBlank(orderVO.getEndSoc())) { + data.setCurrentSoc(Integer.parseInt(orderVO.getEndSoc())); + } + } } From 6c3eee800e65406a2b8b2f07e233a7296c931a76 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Mon, 25 Nov 2024 11:27:08 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/yunkuaichong/LoginRequestHandler.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/LoginRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/LoginRequestHandler.java index 567826722..437d40747 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/LoginRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/LoginRequestHandler.java @@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; +import org.springframework.util.StopWatch; import java.math.BigDecimal; import java.util.List; @@ -122,6 +123,8 @@ public class LoginRequestHandler extends AbstractYkcHandler { // 阻止重复帧 return null; } + StopWatch stopWatch = new StopWatch("LoginRequestHandler"); + stopWatch.start("解析数据"); // 获取消息体 byte[] msgBody = ykcDataProtocol.getMsgBody(); @@ -190,10 +193,10 @@ public class LoginRequestHandler extends AbstractYkcHandler { .iccid(iccid) .business(business) .build(); - + stopWatch.stop(); // 结果(默认 0x01:登录失败) byte[] flag = Constants.oneByteArray; - + stopWatch.start("登录逻辑"); // 通过桩编码SN查询数据库,如果有数据,则登录成功,否则登录失败 PileBasicInfo pileBasicInfo = null; try { @@ -276,7 +279,8 @@ public class LoginRequestHandler extends AbstractYkcHandler { log.error("保存报文失败pileSn:{}", pileSn, e); } }, executor); - + stopWatch.stop(); + log.info("0x01登录耗时:{}, 详细信息:{}", stopWatch.getTotalTimeMillis(), stopWatch.prettyPrint()); // 消息体 byte[] messageBody = Bytes.concat(pileSnByte, flag); return getResult(ykcDataProtocol, messageBody);