From 23f372ab2453eff85e7794cd3e868009950184ea Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 13:25:31 +0800 Subject: [PATCH 01/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/service/impl/YKCPushCommandServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java index 9a26bc84b..e355a66e2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java @@ -183,7 +183,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { } /** - * 发送停止ch + * 发送停止充电 * * @param command */ From 67f973ac9b1bdc6fcf4c13a60c76a50949e8ffa1 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 13:55:55 +0800 Subject: [PATCH 02/41] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=85=85=E7=94=B5?= =?UTF-8?q?=E4=B8=AD,=20=E5=BC=82=E6=AD=A5=E5=8F=91=E9=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=AE=9E=E6=97=B6=E6=95=B0=E6=8D=AE=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/service/OrderService.java | 20 ++++++++++++++++--- .../pile/service/PileRemoteService.java | 1 - 2 files changed, 17 insertions(+), 4 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 765b38bb6..c56812191 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -557,10 +557,24 @@ public class OrderService { throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL); } + String pileSn = orderBasicInfo.getPileSn(); + String connectorCode = orderBasicInfo.getConnectorCode(); + + // 异步发送获取实时数据指令 + if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.IN_THE_CHARGING.getValue())) { + CompletableFuture.runAsync(() -> { + try { + pileRemoteService.getRealTimeMonitorData(pileSn, connectorCode); + } catch (Exception e) { + log.error("异步发送获取实时数据指令error", e); + } + }); + } + vo.setOrderCode(orderBasicInfo.getOrderCode()); - vo.setPileSn(orderBasicInfo.getPileSn()); - vo.setConnectorCode(orderBasicInfo.getConnectorCode()); - vo.setPileConnectorCode(orderBasicInfo.getPileSn() + orderBasicInfo.getConnectorCode()); + vo.setPileSn(pileSn); + vo.setConnectorCode(connectorCode); + vo.setPileConnectorCode(pileSn + connectorCode); String orderStatus = orderBasicInfo.getOrderStatus(); vo.setOrderStatus(orderStatus); if (Objects.nonNull(orderBasicInfo.getChargeStartTime())) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java index 193cad20b..f0393abdf 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java @@ -72,7 +72,6 @@ public class PileRemoteService { .build(); ykcPushCommandService.pushGetRealTimeMonitorDataCommand(command); } - } /** From 5a58d6e22ca314c152157c4e1ff6a6a43ed97e80 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 13:57:13 +0800 Subject: [PATCH 03/41] update --- .../src/main/java/com/jsowell/service/OrderService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 c56812191..e8ebb539a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -577,6 +577,9 @@ public class OrderService { vo.setPileConnectorCode(pileSn + connectorCode); String orderStatus = orderBasicInfo.getOrderStatus(); vo.setOrderStatus(orderStatus); + // 订单状态描述 + String orderStatusDescribe = orderBasicInfoService.transformOrderStatusDescribe(orderStatus, orderBasicInfo.getPayStatus()); + vo.setOrderStatusDescribe(orderStatusDescribe); if (Objects.nonNull(orderBasicInfo.getChargeStartTime())) { vo.setStartChargingTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderBasicInfo.getChargeStartTime())); } @@ -597,9 +600,6 @@ public class OrderService { if (StringUtils.isNotBlank(String.valueOf(stationInfo.getOccupyFee()))) { vo.setOccupyFee(stationInfo.getOccupyFee()); } - // 订单状态描述 - String orderStatusDescribe = orderBasicInfoService.transformOrderStatusDescribe(orderStatus, orderBasicInfo.getPayStatus()); - vo.setOrderStatusDescribe(orderStatusDescribe); // 获取充电桩枪口信息 PileConnectorDetailVO pileConnectorDetailVO = pileService.queryPileConnectorDetail(vo.getPileConnectorCode()); From ad31f21549fd8fbcf60ac02144782bbdebd8bc5a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 14:55:04 +0800 Subject: [PATCH 04/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/common/core/domain/ykc/YKCFrameTypeCode.java | 7 +++++-- .../netty/handler/yunkuaichong/ReserveChargingHandler.java | 2 +- .../yunkuaichong/ReserveChargingResponseHandler.java | 2 +- .../pile/service/impl/YKCPushCommandServiceImpl.java | 5 ++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java index 8b67ff87c..9a17068dd 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java +++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java @@ -71,8 +71,11 @@ public enum YKCFrameTypeCode { BILLING_TEMPLATE_SETTING_CODE(0x58, "计费模型设置"), BILLING_TEMPLATE_SETTING_ANSWER_CODE(0x57, "计费模型设置应答"), - RESERVE_CHARGING_CODE(0x60, "预约充电设置"), - RESERVE_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"), + RESERVATION_CHARGING_CODE(0x60, "预约充电设置"), + RESERVATION_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"), // RESERVATION + + RESERVATION_CHARGING_START_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), + RESERVATION_CHARGING_START_RESULT_CODE(0x65, "预约充电启动结果上传"), GROUND_LOCK_DATA_UPLOAD_CODE(0x61, "地锁数据上送"), REMOTE_CONTROL_GROUND_LOCK_LIFTING_CODE(0x62, "遥控地锁升降"), diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java index b77bcb6df..f0e1c50df 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java @@ -14,7 +14,7 @@ import org.springframework.stereotype.Component; @Component public class ReserveChargingHandler extends AbstractHandler{ - private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_CODE.getBytes()); + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes()); @Override public void afterPropertiesSet() throws Exception { diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java index 65d2600c2..1b1d3810e 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Component; @Component public class ReserveChargingResponseHandler extends AbstractHandler{ - private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_ANSWER_CODE.getBytes()); + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_ANSWER_CODE.getBytes()); @Override public void afterPropertiesSet() throws Exception { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java index e355a66e2..4001cf0dc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java @@ -20,7 +20,6 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.aspectj.weaver.ast.Var; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -59,7 +58,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_RESTART_CODE.getBytes()), YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_CONTROL_START_CODE.getBytes()), YKCUtils.frameType2Str(YKCFrameTypeCode.REMOTE_STOP_CHARGING_CODE.getBytes()), - YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVE_CHARGING_CODE.getBytes()) + YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes()) ); /** @@ -536,7 +535,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { reservationTypeByteArr, vin1ByteArr, vin2ByteArr, vin3ByteArr, reservedStartTimeByteArr, reservedEndTimeByteArr, amountByteArr); - this.push(msg, pileSn, YKCFrameTypeCode.RESERVE_CHARGING_CODE); + this.push(msg, pileSn, YKCFrameTypeCode.RESERVATION_CHARGING_CODE); log.info("=====平台下发指令=====: 预约充电指令, 交易流水号:{}, 桩编号:{}, 枪口号:{}, 操作:{}, 开始时间:{}, 结束时间:{}, 启动金额:{}", transactionCode, pileSn, connectorCode, operation, DateUtils.formatDateTime(reservedStartTime), DateUtils.formatDateTime(reservedEndTime), amount); From cea198bcd47731194dfb9bbfef87b9ac0a6a5e18 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 14:57:42 +0800 Subject: [PATCH 05/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java index 9a17068dd..c949aee68 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java +++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java @@ -74,8 +74,8 @@ public enum YKCFrameTypeCode { RESERVATION_CHARGING_CODE(0x60, "预约充电设置"), RESERVATION_CHARGING_ANSWER_CODE(0x59, "预约充电设置响应"), // RESERVATION - RESERVATION_CHARGING_START_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), - RESERVATION_CHARGING_START_RESULT_CODE(0x65, "预约充电启动结果上传"), + RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE(0x64, "预约充电启动结果上传响应"), // 平台响应 + RESERVATION_CHARGING_STARTUP_RESULT_CODE(0x65, "预约充电启动结果上传"), // 桩 -> 平台 GROUND_LOCK_DATA_UPLOAD_CODE(0x61, "地锁数据上送"), REMOTE_CONTROL_GROUND_LOCK_LIFTING_CODE(0x62, "遥控地锁升降"), From d1e5c6d3c64677052281380f6542114743268163 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 14:59:50 +0800 Subject: [PATCH 06/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservationChargingHandler.java | 23 +++++++++++++++++++ .../ReservationChargingResponseHandler.java | 22 ++++++++++++++++++ ...servationChargingStartupResultHandler.java | 15 ++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java create mode 100644 jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java create mode 100644 jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java new file mode 100644 index 000000000..ea06e0a96 --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingHandler.java @@ -0,0 +1,23 @@ +package com.jsowell.netty.handler.yunkuaichong; + +import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.util.YKCUtils; +import com.jsowell.netty.factory.YKCOperateFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 预约充电 + * @deprecated 桩不会发送这个指令,由平台主动发送 + */ +@Slf4j +@Component +public class ReservationChargingHandler extends AbstractHandler{ + + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes()); + + @Override + public void afterPropertiesSet() throws Exception { + YKCOperateFactory.register(type, this); + } +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java new file mode 100644 index 000000000..4e18aef8f --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingResponseHandler.java @@ -0,0 +1,22 @@ +package com.jsowell.netty.handler.yunkuaichong; + +import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.util.YKCUtils; +import com.jsowell.netty.factory.YKCOperateFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 预约充电响应 + */ +@Slf4j +@Component +public class ReservationChargingResponseHandler extends AbstractHandler{ + + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_ANSWER_CODE.getBytes()); + + @Override + public void afterPropertiesSet() throws Exception { + YKCOperateFactory.register(type, this); + } +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java new file mode 100644 index 000000000..8339cad0c --- /dev/null +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java @@ -0,0 +1,15 @@ +package com.jsowell.netty.handler.yunkuaichong; + +import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.util.YKCUtils; +import com.jsowell.netty.factory.YKCOperateFactory; + +public class ReservationChargingStartupResultHandler extends AbstractHandler{ + + private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_STARTUP_RESULT_CODE.getBytes()); + + @Override + public void afterPropertiesSet() throws Exception { + YKCOperateFactory.register(type, this); + } +} From 85aa953f56164bc75b30b995b4592c48e79ea674 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 24 Jul 2024 15:01:00 +0800 Subject: [PATCH 07/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunkuaichong/ReserveChargingHandler.java | 23 ------------------- .../ReserveChargingResponseHandler.java | 22 ------------------ 2 files changed, 45 deletions(-) delete mode 100644 jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java delete mode 100644 jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java deleted file mode 100644 index f0e1c50df..000000000 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.jsowell.netty.handler.yunkuaichong; - -import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; -import com.jsowell.common.util.YKCUtils; -import com.jsowell.netty.factory.YKCOperateFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * 预约充电 - * @deprecated 桩不会发送这个指令,由平台主动发送 - */ -@Slf4j -@Component -public class ReserveChargingHandler extends AbstractHandler{ - - private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_CODE.getBytes()); - - @Override - public void afterPropertiesSet() throws Exception { - YKCOperateFactory.register(type, this); - } -} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java deleted file mode 100644 index 1b1d3810e..000000000 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReserveChargingResponseHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.jsowell.netty.handler.yunkuaichong; - -import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; -import com.jsowell.common.util.YKCUtils; -import com.jsowell.netty.factory.YKCOperateFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * 预约充电响应 - */ -@Slf4j -@Component -public class ReserveChargingResponseHandler extends AbstractHandler{ - - private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_ANSWER_CODE.getBytes()); - - @Override - public void afterPropertiesSet() throws Exception { - YKCOperateFactory.register(type, this); - } -} From 1adec0e1a5803808278a3e71f8e6edb95cd225c2 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 08:54:45 +0800 Subject: [PATCH 08/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/ykc/YKCFrameTypeCode.java | 6 +- ...servationChargingStartupResultHandler.java | 75 +++++++++++++++++++ .../TransactionRecordsRequestHandler.java | 6 +- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java index c949aee68..81349b3fc 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java +++ b/jsowell-common/src/main/java/com/jsowell/common/core/domain/ykc/YKCFrameTypeCode.java @@ -170,8 +170,12 @@ public enum YKCFrameTypeCode { // 交易记录 TRANSACTION_RECORDS(TRANSACTION_RECORDS_CODE.getCode(), TRANSACTION_RECORDS_CONFIRM_CODE.getCode()), // 远程账户更新 - REMOTE_ACCOUNT_BALANCE_UPDATE(REMOTE_ACCOUNT_BALANCE_UPDATE_CODE.getCode(), REMOTE_ACCOUNT_BALANCE_UPDATE_ANSWER_CODE.getCode()); + REMOTE_ACCOUNT_BALANCE_UPDATE(REMOTE_ACCOUNT_BALANCE_UPDATE_CODE.getCode(), REMOTE_ACCOUNT_BALANCE_UPDATE_ANSWER_CODE.getCode()), + // 预约充电启动结果 + RESERVATION_CHARGING_STARTUP_RESULT(RESERVATION_CHARGING_STARTUP_RESULT_CODE.getCode(), RESERVATION_CHARGING_STARTUP_RESULT_ANSWER_CODE.getCode()), + + ; // 请求帧类型 private int requestFrameType; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java index 8339cad0c..3c3799521 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java @@ -1,9 +1,22 @@ package com.jsowell.netty.handler.yunkuaichong; +import com.alibaba.fastjson2.JSON; +import com.google.common.primitives.Bytes; +import com.jsowell.common.constant.Constants; +import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; +import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.YKCOperateFactory; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +/** + * 预约充电启动结果上送 + */ +@Slf4j +@Component public class ReservationChargingStartupResultHandler extends AbstractHandler{ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_STARTUP_RESULT_CODE.getBytes()); @@ -12,4 +25,66 @@ public class ReservationChargingStartupResultHandler extends AbstractHandler{ public void afterPropertiesSet() throws Exception { YKCOperateFactory.register(type, this); } + + @Override + public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, Channel channel) { + log.info("[===预约充电启动结果上送===] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString()); + // 消息体 + byte[] msgBody = ykcDataProtocol.getMsgBody(); + + int startIndex = 0; + int length = 16; + + // 交易流水号 + byte[] transactionCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String transactionCode = BytesUtil.bcd2Str(transactionCodeByteArr); + + // 桩编码 + startIndex += length; + length = 7; + byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String pileSn = BytesUtil.bcd2Str(pileSnByteArr); + + // 保存时间 + saveLastTimeAndCheckChannel(pileSn, channel); + + // 枪号 + startIndex += length; + length = 1; + byte[] connectorCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String connectorCode = BytesUtil.bcd2Str(connectorCodeByteArr); + + // vin + startIndex += length; + length = 17; + byte[] vinCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String vinCode = BytesUtil.bcd2Str(vinCodeByteArr); + + // 启动结果 + startIndex += length; + length = 1; + byte[] startupResultByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String startupResult = BytesUtil.bcd2Str(startupResultByteArr); + + // 失败原因 + startIndex += length; + length = 1; + byte[] failReasonByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String failReason = BytesUtil.bcd2Str(failReasonByteArr); + + log.info("[===预约充电启动结果上送===]交易流水号:{}, 桩编号:{}, 枪号:{}, vin:{}, 启动结果:{}, 失败原因:{}", + transactionCode, pileSn, connectorCode, vinCode, startupResult, failReason); + + + + + /* + 应答 + 确认结果 0x00 成功 0x01 失败 + */ + byte[] confirmResultBytes = Constants.zeroByteArray; + byte[] concatMsgBody = Bytes.concat(transactionCodeByteArr, pileSnByteArr, connectorCodeByteArr, confirmResultBytes); + + return getResult(ykcDataProtocol, concatMsgBody); + } } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java index 8caae9a3a..92008bca1 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java @@ -330,8 +330,8 @@ public class TransactionRecordsRequestHandler extends AbstractHandler { int length = 16; // 交易流水号 - byte[] orderCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); - String transactionCode = BytesUtil.bcd2Str(orderCodeByteArr); + byte[] transactionCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length); + String transactionCode = BytesUtil.bcd2Str(transactionCodeByteArr); // 桩编码 startIndex += length; @@ -582,7 +582,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler { 2022年12月15日11点28分发现返回 01非法账单,充电桩会持续上传交易记录,后面产生的交易记录被阻塞 */ byte[] confirmResultBytes = Constants.zeroByteArray; - byte[] concatMsgBody = Bytes.concat(orderCodeByteArr, confirmResultBytes); + byte[] concatMsgBody = Bytes.concat(transactionCodeByteArr, confirmResultBytes); return getResult(ykcDataProtocol, concatMsgBody); } From ada71f6691737e24347b55cdc9b3586eda83d649 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 09:09:05 +0800 Subject: [PATCH 09/41] =?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 --- .../jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java index fcfa82324..6d3f81324 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java @@ -325,8 +325,8 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService { dto.setStartTime(DateUtils.formatDateTime(startTime)); dto.setEndTime(DateUtils.formatDateTime(endTime)); List orderListVOS = orderBasicInfoService.queryOrderByOccupyTime(dto); - log.info("查询会员在占用时段内有没有充电订单, 占桩订单编号:{}, 占桩开始时间:{}, 占桩结束时间:{}, result:{}", - occupyCode, DateUtils.formatDateTime(startTime), DateUtils.formatDateTime(endTime), JSON.toJSONString(orderListVOS)); + log.info("查询会员在占用时段内有没有充电订单, 占桩订单编号:{}, memberId:{}, stationId:{}, 占桩开始时间:{}, 占桩结束时间:{}, result:{}", + occupyCode, orderPileOccupy.getMemberId(), orderPileOccupy.getStationId(), DateUtils.formatDateTime(startTime), DateUtils.formatDateTime(endTime), JSON.toJSONString(orderListVOS)); /* 计算充电时长 */ From ceaa7bd19e4564077723366bf12eb52f3d25a0ee Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 09:48:28 +0800 Subject: [PATCH 10/41] =?UTF-8?q?update=20=E4=B8=AA=E4=BA=BA=E6=A1=A9?= =?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 --- .../handler/yunkuaichong/TransactionRecordsRequestHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java index 92008bca1..7bf8a722c 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java @@ -597,7 +597,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler { PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn); if (StringUtils.equals(pileBasicInfo.getBusinessType(), Constants.TWO)) { personalChargingRecordService.processPersonalChargingRecord(data); - return; + // return; } String transactionCode = data.getTransactionCode(); From 2eb7953c8b722d02118ff9d27b327ba0e63f893a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 10:14:46 +0800 Subject: [PATCH 11/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/api/uniapp/customer/PersonPileController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java index 99b0d8075..eeafe6344 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java @@ -248,7 +248,7 @@ public class PersonPileController extends BaseController { } /** - * 个人桩启动充电 + * 个人桩启动充电/个人桩一键启动 * http://localhost:8080/uniapp/personalPile/startPersonalPileCharging */ @PostMapping("/startPersonalPileCharging") From b2aff8a25a00bbedfb7c0b084312ec63140e8976 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 13:41:33 +0800 Subject: [PATCH 12/41] =?UTF-8?q?update=20=E5=B8=8C=E6=99=93=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=90=8E=E7=AE=A1=E5=85=85=E5=80=BC=E6=B6=88=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 4 +++ .../DelayMerchantProgramLogic.java | 5 ++-- .../NotDelayMerchantProgramLogic.java | 30 +++++++++++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index cb750df5d..2bda3f00b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -475,6 +475,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额 for (OrderPayRecord record : payRecordList) { + if (!StringUtils.equals(record.getPayMode(), OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())) { + // 不是本金支付, 进行下一个循环 + continue; + } List paymentInfos = orderPayRecordService.parseDeductionRecord(record.getDeductionRecord()); for (PaymentInfo object : paymentInfos) { String paymentId = object.getPaymentId(); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index 12bec2532..3ab27ab0c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -718,7 +718,8 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 查支付记录 List payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); // 根据payMode分组 - Map> payRecordMap = payRecordList.stream().collect(Collectors.groupingBy(OrderPayRecord::getPayMode)); + Map> payRecordMap = payRecordList.stream() + .collect(Collectors.groupingBy(OrderPayRecord::getPayMode)); // 获取本金支付的记录 List principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()); BigDecimal principalPay = null; @@ -737,7 +738,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 计算需要退回的金额 Map returnAmountMap = calculateReturnAmount(principalPay, giftPay, orderAmount, discountAmount); logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}", - orderCode, orderAmount, principalPay, null, JSON.toJSONString(returnAmountMap)); + orderCode, orderAmount, principalPay, giftPay, JSON.toJSONString(returnAmountMap)); // 需要退回本金的金额 BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal"); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java index 9b554e160..147db42fd 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java @@ -687,24 +687,35 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic { // 查支付记录 List payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); - Map payRecordMap = payRecordList.stream() - .collect(Collectors.toMap(OrderPayRecord::getPayMode, Function.identity(), (k1, k2) -> k1)); - // 取出本金支付金额 - BigDecimal principalPay = null; + // 根据payMode分组 + Map> payRecordMap = payRecordList.stream() + .collect(Collectors.groupingBy(OrderPayRecord::getPayMode)); // 获取本金支付的记录 - OrderPayRecord principalPayRecord = payRecordMap.get(Constants.ONE); - if (principalPayRecord != null) { - principalPay = principalPayRecord.getPayAmount(); + List principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()); + BigDecimal principalPay = null; + if (CollectionUtils.isNotEmpty(principalPayRecordList)) { + principalPay = principalPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add); } + // 获取赠送金支付的记录 + List giftPayRecordList = payRecordMap.get(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()); + BigDecimal giftPay = null; + if (CollectionUtils.isNotEmpty(giftPayRecordList)) { + giftPay = giftPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + } + + BigDecimal discountAmount = orderBasicInfo.getDiscountAmount() == null ? BigDecimal.ZERO : orderBasicInfo.getDiscountAmount(); + // 计算需要退回的金额 - Map returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount); + Map returnAmountMap = calculateReturnAmount(principalPay, giftPay, orderAmount, discountAmount); logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}", - orderCode, orderAmount, principalPay, null, JSON.toJSONString(returnAmountMap)); + orderCode, orderAmount, principalPay, giftPay, JSON.toJSONString(returnAmountMap)); // 需要退回本金的金额 BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal"); + // 需要退回赠送金的金额 + BigDecimal returnGift = returnAmountMap.get("returnGift"); // 更新会员钱包/余额退回到钱包 UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder() @@ -712,6 +723,7 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic { .type(MemberWalletEnum.TYPE_IN.getValue()) // 进账 .subType(MemberWalletEnum.SUBTYPE_ORDER_SETTLEMENT_REFUND.getValue()) // 订单结算退款 .updatePrincipalBalance(returnPrincipal) + .updateGiftBalance(returnGift) .relatedOrderCode(orderCode) .build(); memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO); From 180645ffb2af9d89fef5f82709fea8cb87f6ddb8 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 13:42:16 +0800 Subject: [PATCH 13/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE0x65?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=85=85=E7=94=B5=E5=90=AF=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 1 + ...servationChargingStartupResultHandler.java | 15 +++++++ .../dto/ReservationChargingStartupResult.java | 42 +++++++++++++++++++ .../pile/service/PileBasicInfoService.java | 7 ++-- .../impl/PileBasicInfoServiceImpl.java | 18 ++++++-- .../wxpay/service/WxAppletRemoteService.java | 20 +++++---- 6 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java diff --git a/jsowell-admin/src/main/resources/application.yml b/jsowell-admin/src/main/resources/application.yml index de9bc248c..a11aaecb3 100644 --- a/jsowell-admin/src/main/resources/application.yml +++ b/jsowell-admin/src/main/resources/application.yml @@ -106,6 +106,7 @@ weixin: sendMsg: startChargingTmpId: BGgZe98QHr0I1S1GrtGps0y3uhvURtQNkbMAzI2D8g8 stopChargingTmpId: UyBPbADlZfsCj89rh_xvfR2ZP1iwtmPcMFA0sUOJwog + startupResultTmpId: BGgZe98QHr0I1S1GrtGps-Av8-Y6WoD2Ny8DZWvdhoQ #Sim卡信息 xunzhong: diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java index 3c3799521..ba3cd3944 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ReservationChargingStartupResultHandler.java @@ -8,8 +8,11 @@ import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.YKCOperateFactory; +import com.jsowell.pile.dto.ReservationChargingStartupResult; +import com.jsowell.pile.service.PileBasicInfoService; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -21,6 +24,9 @@ public class ReservationChargingStartupResultHandler extends AbstractHandler{ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.RESERVATION_CHARGING_STARTUP_RESULT_CODE.getBytes()); + @Autowired + private PileBasicInfoService pileBasicInfoService; + @Override public void afterPropertiesSet() throws Exception { YKCOperateFactory.register(type, this); @@ -76,6 +82,15 @@ public class ReservationChargingStartupResultHandler extends AbstractHandler{ transactionCode, pileSn, connectorCode, vinCode, startupResult, failReason); + ReservationChargingStartupResult chargingStartupResult = ReservationChargingStartupResult.builder() + .transactionCode(transactionCode) + .pileSn(pileSn) + .connectorCode(connectorCode) + .vinCode(vinCode) + .startupResult(startupResult) + .failReason(failReason) + .build(); + pileBasicInfoService.startupResult(chargingStartupResult); /* diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java new file mode 100644 index 000000000..089788305 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ReservationChargingStartupResult.java @@ -0,0 +1,42 @@ +package com.jsowell.pile.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ReservationChargingStartupResult { + /** + * 交易流水号 + */ + private String transactionCode; + + /** + * 桩编号 + */ + private String pileSn; + + /** + * 枪口号 + */ + private String connectorCode; + + /** + * vin + */ + private String vinCode; + + /** + * 启动结果 + */ + private String startupResult; + + /** + * 失败原因 + */ + private String failReason; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java index e049d2d21..d0ff490df 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBasicInfoService.java @@ -2,10 +2,7 @@ package com.jsowell.pile.service; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.pile.domain.PileBasicInfo; -import com.jsowell.pile.dto.IndexQueryDTO; -import com.jsowell.pile.dto.QueryPileDTO; -import com.jsowell.pile.dto.ReplaceMerchantStationDTO; -import com.jsowell.pile.dto.StartPersonPileDTO; +import com.jsowell.pile.dto.*; import com.jsowell.pile.thirdparty.ConnectorInfo; import com.jsowell.pile.thirdparty.EquipmentInfo; import com.jsowell.pile.thirdparty.ZDLConnectorInfo; @@ -222,4 +219,6 @@ public interface PileBasicInfoService { List getConnectorListForZDL(String pileSn); String startPersonalPileCharging(StartPersonPileDTO dto); + + void startupResult(ReservationChargingStartupResult chargingStartupResult); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java index 0c8baba83..10a7f37fb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java @@ -18,10 +18,7 @@ import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.PileConnectorInfo; import com.jsowell.pile.domain.PileModelInfo; import com.jsowell.pile.domain.PileSimInfo; -import com.jsowell.pile.dto.IndexQueryDTO; -import com.jsowell.pile.dto.QueryPileDTO; -import com.jsowell.pile.dto.ReplaceMerchantStationDTO; -import com.jsowell.pile.dto.StartPersonPileDTO; +import com.jsowell.pile.dto.*; import com.jsowell.pile.mapper.PileBasicInfoMapper; import com.jsowell.pile.service.*; import com.jsowell.pile.service.programlogic.AbstractProgramLogic; @@ -37,6 +34,7 @@ import com.jsowell.pile.vo.uniapp.customer.GroundLockInfoVO; import com.jsowell.pile.vo.uniapp.customer.PersonalPileInfoVO; import com.jsowell.pile.vo.uniapp.customer.PileConnectorDetailVO; import com.jsowell.pile.vo.web.*; +import com.jsowell.wxpay.service.WxAppletRemoteService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.RandomStringUtils; @@ -89,6 +87,9 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { @Autowired private PileReservationInfoService pileReservationInfoService; + @Autowired + private WxAppletRemoteService wxAppletRemoteService; + /** * 查询设备管理 * @@ -1211,4 +1212,13 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { String orderCode = orderLogic.startPersonalPileCharging(dto); return orderCode; } + + /** + * 预约充电启动结果 + */ + @Override + public void startupResult(ReservationChargingStartupResult chargingStartupResult) { + // 小程序通知 + wxAppletRemoteService.reservationStartupResultSendMsg(); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java index e8f5897f4..ee2f9f9e6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java @@ -72,19 +72,14 @@ public class WxAppletRemoteService { @Value("${weixin.sendMsg.stopChargingTmpId}") private String stopChargingTmpId; + @Value("${weixin.sendMsg.startupResultTmpId}") + private String startupResultTmpId; /** * 获取accessToken * * @return */ public String getAccessToken() { - // String appid = Constants.APP_ID; - // String secret = Constants.APP_SECRET; - - // 这里我是从配置文件中取得appid和appsecret - // appid = properties.getAppId(); - // secret = properties.getAppSecret(); - //查询token是否存在 String redisKey = CacheConstants.ACCESS_TOKEN + appid; // 使用缓存先查询AccessToken是否存在 @@ -236,7 +231,6 @@ public class WxAppletRemoteService { return uniAppSendMsg(msgInfo); } - /** * 停止充电发送消息 * @param dto @@ -281,7 +275,15 @@ public class WxAppletRemoteService { } /** - * 小程序发送消息方法 + * 预约充电结果小程序服务通知 + */ + public Map reservationStartupResultSendMsg() { + AppletTemplateMessageSendDTO msgInfo = new AppletTemplateMessageSendDTO(); + return uniAppSendMsg(msgInfo); + } + + /** + * 小程序发送消息方法/小程序通知/服务通知 * @param dto * @return */ From 8f14e4e71deadb3fc3b88755e2078e39870f28fa Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 14:09:32 +0800 Subject: [PATCH 14/41] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E6=A1=A9=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E5=85=85=E7=94=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uniapp/customer/PersonPileController.java | 32 ++++++++++++++++++- .../java/com/jsowell/service/PileService.java | 12 +++++-- .../common/enums/ykc/ReturnCodeEnum.java | 2 ++ .../pile/dto/PersonPileStopChargingDTO.java | 24 ++++++++++++++ .../pile/dto/PileMemberBindingDTO.java | 2 +- 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java index eeafe6344..e005c99d1 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java @@ -117,7 +117,7 @@ public class PersonPileController extends BaseController { if (StringUtils.isNotBlank(appId)) { String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId); if (StringUtils.isNotBlank(firstLevelMerchantId)) { - dto.setMerchantId(firstLevelMerchantId); + dto.setFirstLevelMerchantId(firstLevelMerchantId); } } String memberId = getMemberIdByAuthorization(request); @@ -135,6 +135,36 @@ public class PersonPileController extends BaseController { return response; } + /** + * 个人桩停止充电 + * 管理员可以停自己启动的和别人启动的 + * 其他人员只能停止自己启动的 + */ + @PostMapping("/personPileStopCharging") + public RestApiResponse personPileStopCharging(HttpServletRequest request, PersonPileStopChargingDTO dto) { + RestApiResponse response = null; + try { + String appId = request.getHeader("appId"); + if (StringUtils.isNotBlank(appId)) { + String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId); + if (StringUtils.isNotBlank(firstLevelMerchantId)) { + dto.setFirstLevelMerchantId(firstLevelMerchantId); + } + } + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + pileService.personPileStopCharging(dto); + response = new RestApiResponse<>(); + } catch (BusinessException e) { + logger.error("个人桩停止充电error", e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("个人桩停止充电error", e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_PERSON_PILE_STOP_CHARGING_ERROR); + } + return response; + } + /** * 通过memberId查个人桩列表 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 a125815ee..5ed7cfd76 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -339,7 +339,7 @@ public class PileService { */ public void adminIssuePile(PileMemberBindingDTO dto) { // 通过前端传的手机号查询是否有此用户 - MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getPhoneNumber(), dto.getMerchantId()); + MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getPhoneNumber(), dto.getFirstLevelMerchantId()); if (memberBasicInfo == null) { // 为空说明此用户未注册平台账号 throw new BusinessException(ReturnCodeEnum.CODE_USER_IS_NOT_REGISTER); @@ -377,7 +377,7 @@ public class PileService { PileMemberRelation info = new PileMemberRelation(); info.setPileSn(dto.getPileSn()); info.setMemberId(memberBasicInfo.getMemberId()); - info.setType("2"); + info.setType(Constants.TWO); pileMemberRelationService.insertPileMemberRelation(info); } } @@ -656,4 +656,12 @@ public class PileService { // System.out.println(i); return String.valueOf(i); } + + /** + * 个人桩停止充电 + * @param dto + */ + public void personPileStopCharging(PersonPileStopChargingDTO dto) { + + } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index 72c8b2676..48ceef8bf 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -179,6 +179,8 @@ public enum ReturnCodeEnum { CODE_RESERVATION_ALREADY_EXISTS_ERROR("00400017", "已经存在生效中的预约,请关闭后再试"), + CODE_PERSON_PILE_STOP_CHARGING_ERROR("00400018", "个人桩停止充电异常"), + /* 个人桩 end */ CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java new file mode 100644 index 000000000..8f275fa29 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PersonPileStopChargingDTO.java @@ -0,0 +1,24 @@ +package com.jsowell.pile.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PersonPileStopChargingDTO { + private String memberId; + private String firstLevelMerchantId; + + private String pileSn; + + private String ConnectorCode; + + /** + * 桩枪口号 + */ + private String pileConnectorCode; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java index 8bfa748f0..d3a5d1e5a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileMemberBindingDTO.java @@ -38,5 +38,5 @@ public class PileMemberBindingDTO { /** * 一级运营商id */ - private String merchantId; + private String firstLevelMerchantId; } From b05a7e6ac2772439fb5dd95f4e56572423ae8b10 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 16:18:23 +0800 Subject: [PATCH 15/41] =?UTF-8?q?update=20=E4=B8=AA=E4=BA=BA=E6=A1=A9?= =?UTF-8?q?=E9=A2=84=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uniapp/customer/PersonPileController.java | 40 +++++- .../java/com/jsowell/service/PileService.java | 63 +-------- .../jsowell/pile/dto/PileReservationDTO.java | 15 +++ .../PersonalChargingRecordService.java | 3 + .../service/PileReservationInfoService.java | 13 ++ .../PersonalChargingRecordServiceImpl.java | 50 ++++++- .../impl/PileReservationInfoServiceImpl.java | 123 ++++++++++++++++++ .../programlogic/AbstractProgramLogic.java | 5 +- .../DelayMerchantProgramLogic.java | 20 ++- 9 files changed, 255 insertions(+), 77 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java index e005c99d1..f3a006321 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java @@ -13,6 +13,7 @@ import com.jsowell.common.util.StringUtils; import com.jsowell.pile.dto.*; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileMerchantInfoService; +import com.jsowell.pile.service.PileReservationInfoService; import com.jsowell.pile.vo.uniapp.customer.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.customer.PersonPileRealTimeVO; import com.jsowell.pile.vo.uniapp.customer.PersonalPileInfoVO; @@ -43,6 +44,9 @@ public class PersonPileController extends BaseController { @Autowired private PileBasicInfoService pileBasicInfoService; + @Autowired + private PileReservationInfoService pileReservationInfoService; + /** * 用户绑定个人桩 @@ -137,6 +141,7 @@ public class PersonPileController extends BaseController { /** * 个人桩停止充电 + * http://localhost:8080/uniapp/personalPile/personPileStopCharging * 管理员可以停自己启动的和别人启动的 * 其他人员只能停止自己启动的 */ @@ -153,7 +158,7 @@ public class PersonPileController extends BaseController { } String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - pileService.personPileStopCharging(dto); + pileReservationInfoService.personPileStopCharging(dto); response = new RestApiResponse<>(); } catch (BusinessException e) { logger.error("个人桩停止充电error", e); @@ -192,7 +197,6 @@ public class PersonPileController extends BaseController { /** * 获取枪口实时数据 - *

* http://localhost:8080/uniapp/personalPile/getConnectorRealTimeInfo * * @param request @@ -316,7 +320,7 @@ public class PersonPileController extends BaseController { try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - int reservedId = pileService.createReserved(dto); + int reservedId = pileReservationInfoService.createReservation(dto); response = new RestApiResponse<>(ImmutableMap.of("reservedId", reservedId)); } catch (BusinessException e) { logger.error("添加预约充电error, params:{}", dto, e); @@ -340,7 +344,7 @@ public class PersonPileController extends BaseController { try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - PageResponse pageResponse = pileService.queryReservedList(dto); + PageResponse pageResponse = pileReservationInfoService.queryReservationList(dto); response = new RestApiResponse<>(pageResponse); } catch (BusinessException e) { logger.error("查询预约列表error, params:{}", dto, e); @@ -353,6 +357,30 @@ public class PersonPileController extends BaseController { return response; } + /** + * 修改预约充电 + * http://localhost:8080/uniapp/personalPile/updateReservation + */ + @PostMapping("/updateReservation") + public RestApiResponse updateReservation(HttpServletRequest request, @RequestBody PileReservationDTO dto) { + // logger.info("修改预约充电状态params:{}", dto); + RestApiResponse response = null; + try { + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + pileReservationInfoService.updateReservation(dto); + response = new RestApiResponse<>(); + } catch (BusinessException e) { + logger.error("修改预约充电状态error, params:{}", dto, e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("修改预约充电状态error, params:{}", dto, e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_UPDATE_RESERVED_STATUS_ERROR); + } + logger.info("修改预约充电状态params:{}, result:{}", dto, response); + return response; + } + /** * 修改预约充电状态 * http://localhost:8080/uniapp/personalPile/updateReservedStatus @@ -364,7 +392,7 @@ public class PersonPileController extends BaseController { try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - pileService.updateReservedStatus(dto); + pileReservationInfoService.updateReservationStatus(dto); response = new RestApiResponse<>(); } catch (BusinessException e) { logger.error("修改预约充电状态error, params:{}", dto, e); @@ -388,7 +416,7 @@ public class PersonPileController extends BaseController { try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - pileService.deleteReservation(dto); + pileReservationInfoService.deleteReservation(dto); response = new RestApiResponse<>(); } catch (BusinessException e) { logger.error("修改预约充电状态error, params:{}", dto, e); 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 5ed7cfd76..bbbd4f224 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -390,7 +390,7 @@ public class PileService { public PersonPileRealTimeVO getConnectorRealTimeInfo(QueryPersonPileDTO dto) { // 根据memberId查出该用户 正在充电、个人桩启动(白名单支付方式)的订单号 OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder() - .memberId(dto.getMemberId()) + // .memberId(dto.getMemberId()) .orderStatus(OrderStatusEnum.IN_THE_CHARGING.getValue()) .pileConnectorCode(dto.getPileConnectorCode()) .payMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue()) // 3- 白名单支付 @@ -569,60 +569,6 @@ public class PileService { } } - public int createReserved(CreateReservedDTO dto) { - PileReservationInfo reservedInfo = new PileReservationInfo(); - reservedInfo.setMemberId(dto.getMemberId()); - reservedInfo.setPileSn(dto.getPileSn()); - reservedInfo.setPileConnectorCode(dto.getPileConnectorCode()); - reservedInfo.setStatus(Constants.ZERO); // 默认未生效 - // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); - reservedInfo.setStartTime(Time.valueOf(dto.getStartTime())); - // reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime())); - if (StringUtils.isNotBlank(dto.getEndTime())) { - reservedInfo.setEndTime(Time.valueOf(dto.getEndTime())); - } - if (StringUtils.isNotBlank(dto.getFreq())) { - reservedInfo.setReservationType("recurring"); - reservedInfo.setFreq(dto.getFreq()); - } else { - reservedInfo.setReservationType("single"); - reservedInfo.setFreq(null); - } - reservedInfo.setCreateBy(dto.getMemberId()); - pileReservationInfoService.insertSelective(reservedInfo); - return reservedInfo.getId(); - } - - public PageResponse queryReservedList(PileReservationDTO dto) { - int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo(); - int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); - PageHelper.startPage(pageNo, pageSize); - List list = pileReservationInfoService.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn()); - PageInfo pageInfo = new PageInfo<>(list); - - PageResponse pageResponse = new PageResponse(); - pageResponse.setPageNum(pageInfo.getPageNum()); - pageResponse.setPageSize(pageInfo.getPageSize()); - pageResponse.setPages(pageInfo.getPages()); - pageResponse.setTotal(pageInfo.getTotal()); - - List resultList = Lists.newArrayList(); - for (PileReservationInfo reservedInfo : pageInfo.getList()) { - resultList.add( - PileReservedVO.builder() - .reservedId(reservedInfo.getId() + "") - .pileSn(reservedInfo.getPileSn()) - .startTime(reservedInfo.getStartTime().toString()) - .endTime(reservedInfo.getEndTime().toString()) - .freq(reservedInfo.getFreq()) - .status(reservedInfo.getStatus()) - .build() - ); - } - pageResponse.setList(resultList); - return pageResponse; - } - public void deleteReservation(PileReservationDTO dto) { pileReservationInfoService.deleteReservation(dto); } @@ -657,11 +603,4 @@ public class PileService { return String.valueOf(i); } - /** - * 个人桩停止充电 - * @param dto - */ - public void personPileStopCharging(PersonPileStopChargingDTO dto) { - - } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java index 056097d81..2d704d182 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PileReservationDTO.java @@ -28,6 +28,16 @@ public class PileReservationDTO { */ private String pileSn; + /** + * 开始时间 hh:mm:ss + */ + private String startTime; + + /** + * 结束时间 hh:mm:ss + */ + private String endTime; + private Integer pageNo; private Integer pageSize; @@ -38,6 +48,11 @@ public class PileReservationDTO { .append("memberId", memberId) .append("reservedId", reservedId) .append("status", status) + .append("pileSn", pileSn) + .append("startTime", startTime) + .append("endTime", endTime) + .append("pageNo", pageNo) + .append("pageSize", pageSize) .toString(); } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java index 4d9653b0c..2c1e5a179 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PersonalChargingRecordService.java @@ -3,6 +3,7 @@ package com.jsowell.pile.service; import java.util.List; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; +import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.PersonalChargingRecord; public interface PersonalChargingRecordService{ @@ -35,4 +36,6 @@ public interface PersonalChargingRecordService{ * @param data */ void processPersonalChargingRecord(TransactionRecordsData data); + + void processPersonalChargingRecord(OrderBasicInfo orderBasicInfo); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java index 516535ae4..2717ea9b4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileReservationInfoService.java @@ -2,6 +2,9 @@ package com.jsowell.pile.service; import java.util.List; +import com.jsowell.common.core.page.PageResponse; +import com.jsowell.pile.dto.CreateReservedDTO; +import com.jsowell.pile.dto.PersonPileStopChargingDTO; import com.jsowell.pile.dto.PileReservationDTO; import com.jsowell.pile.domain.PileReservationInfo; @@ -55,5 +58,15 @@ public interface PileReservationInfoService { void cancelOneTimeReservation(String pileConnectorCode); void deleteReservation(PileReservationDTO dto); + + int createReservation(CreateReservedDTO dto); + + PageResponse queryReservationList(PileReservationDTO dto); + + void updateReservationStatus(PileReservationDTO dto); + + void updateReservation(PileReservationDTO dto); + + void personPileStopCharging(PersonPileStopChargingDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java index 757b753b9..cd8a45f8f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PersonalChargingRecordServiceImpl.java @@ -1,8 +1,9 @@ package com.jsowell.pile.service.impl; +import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; -import com.jsowell.common.util.Cp56Time2a.Cp56Time2aUtil; import com.jsowell.common.util.DateUtils; +import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.service.PileBasicInfoService; import org.springframework.beans.factory.annotation.Autowired; @@ -82,8 +83,7 @@ public class PersonalChargingRecordServiceImpl implements PersonalChargingRecord } /** - * 处理个人桩充电记录 - * + * 收到交易记录时, 处理个人桩充电记录 * @param data */ @Override @@ -133,4 +133,48 @@ public class PersonalChargingRecordServiceImpl implements PersonalChargingRecord personalChargingRecordMapper.insertOrUpdateSelective(chargingRecord); } + /** + * 一键启动时, 处理个人桩充电记录 + * @param orderBasicInfo + */ + @Override + public void processPersonalChargingRecord(OrderBasicInfo orderBasicInfo) { + // 根据交易流水号查询,如果数据库没有就入库 + PersonalChargingRecord chargingRecord = new PersonalChargingRecord(); + + // 处理数据 + chargingRecord.setTransactionCode(orderBasicInfo.getTransactionCode()); + chargingRecord.setStatus(Constants.ONE); + chargingRecord.setMemberId(orderBasicInfo.getMemberId()); + chargingRecord.setStationId(orderBasicInfo.getStationId()); + chargingRecord.setMerchantId(orderBasicInfo.getMerchantId()); + chargingRecord.setPileSn(orderBasicInfo.getPileSn()); + chargingRecord.setConnectorCode(orderBasicInfo.getConnectorCode()); + chargingRecord.setPileConnectorCode(orderBasicInfo.getPileConnectorCode()); + chargingRecord.setLogicCard(orderBasicInfo.getLogicCard()); + chargingRecord.setVinCode(orderBasicInfo.getVinCode()); + chargingRecord.setStartMode(orderBasicInfo.getStartMode()); + chargingRecord.setPlateNumber(orderBasicInfo.getPlateNumber()); + chargingRecord.setChargeStartTime(orderBasicInfo.getChargeStartTime()); + chargingRecord.setChargeEndTime(orderBasicInfo.getChargeEndTime()); + chargingRecord.setStartType(orderBasicInfo.getStartType()); + chargingRecord.setReservationStartTime(orderBasicInfo.getReservedStartTime()); + chargingRecord.setReservationEndTime(orderBasicInfo.getReservedEndTime()); + chargingRecord.setStartSoc(orderBasicInfo.getStartSoc()); + chargingRecord.setEndSoc(null); + // BigDecimal sharpUsedElectricity = new BigDecimal(data.getSharpUsedElectricity()); + // chargingRecord.setSharpUsedElectricity(sharpUsedElectricity); + // BigDecimal peakUsedElectricity = new BigDecimal(data.getPeakUsedElectricity()); + // chargingRecord.setPeakUsedElectricity(peakUsedElectricity); + // BigDecimal flatUsedElectricity = new BigDecimal(data.getFlatUsedElectricity()); + // chargingRecord.setFlatUsedElectricity(flatUsedElectricity); + // BigDecimal valleyUsedElectricity = new BigDecimal(data.getValleyUsedElectricity()); + // chargingRecord.setValleyUsedElectricity(valleyUsedElectricity); + // BigDecimal totalUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity); + // chargingRecord.setTotalUsedElectricity(totalUsedElectricity); + // chargingRecord.setReason(data.getStopReasonMsg()); + // 创建或更新 + personalChargingRecordMapper.insertOrUpdateSelective(chargingRecord); + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java index 0e3117c54..020699ef1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileReservationInfoServiceImpl.java @@ -1,18 +1,24 @@ package com.jsowell.pile.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.jsowell.common.constant.Constants; +import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.domain.ykcCommond.ReservationChargingCommand; +import com.jsowell.pile.dto.CreateReservedDTO; +import com.jsowell.pile.dto.PersonPileStopChargingDTO; import com.jsowell.pile.dto.PileReservationDTO; import com.jsowell.pile.dto.StartPersonPileDTO; import com.jsowell.pile.service.MemberPlateNumberRelationService; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileRemoteService; +import com.jsowell.pile.vo.PileReservedVO; import com.jsowell.pile.vo.uniapp.customer.MemberPlateNumberVO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -291,5 +297,122 @@ public class PileReservationInfoServiceImpl implements PileReservationInfoServic pileReservationInfo.setDelFlag(DelFlagEnum.DELETE.getValue()); pileReservationInfoMapper.updateByPrimaryKey(pileReservationInfo); } + + @Override + public int createReservation(CreateReservedDTO dto) { + PileReservationInfo reservedInfo = new PileReservationInfo(); + reservedInfo.setMemberId(dto.getMemberId()); + reservedInfo.setPileSn(dto.getPileSn()); + reservedInfo.setPileConnectorCode(dto.getPileConnectorCode()); + reservedInfo.setStatus(Constants.ZERO); // 默认未生效 + // reservedInfo.setStartTime(DateUtils.parseDate(dto.getStartTime())); + reservedInfo.setStartTime(Time.valueOf(dto.getStartTime())); + // reservedInfo.setEndTime(DateUtils.parseDate(dto.getEndTime())); + if (StringUtils.isNotBlank(dto.getEndTime())) { + reservedInfo.setEndTime(Time.valueOf(dto.getEndTime())); + } + + // 2024年7月25日14点36分, 此段代码注释掉, 采用默认设置 + // if (StringUtils.isNotBlank(dto.getFreq())) { + // reservedInfo.setReservationType("recurring"); + // reservedInfo.setFreq(dto.getFreq()); + // } else { + // reservedInfo.setReservationType("single"); + // reservedInfo.setFreq(null); + // } + + // 默认每天 + reservedInfo.setReservationType("recurring"); + reservedInfo.setFreq("daily"); + + reservedInfo.setCreateBy(dto.getMemberId()); + this.insertSelective(reservedInfo); + return reservedInfo.getId(); + } + + @Override + public PageResponse queryReservationList(PileReservationDTO dto) { + int pageNo = dto.getPageNo() == null ? Constants.one : dto.getPageNo(); + int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); + PageHelper.startPage(pageNo, pageSize); + List list = this.getReservationsByMemberIdAndPileSn(dto.getMemberId(), dto.getPileSn()); + PageInfo pageInfo = new PageInfo<>(list); + + PageResponse pageResponse = new PageResponse(); + pageResponse.setPageNum(pageInfo.getPageNum()); + pageResponse.setPageSize(pageInfo.getPageSize()); + pageResponse.setPages(pageInfo.getPages()); + pageResponse.setTotal(pageInfo.getTotal()); + + List resultList = Lists.newArrayList(); + for (PileReservationInfo reservedInfo : pageInfo.getList()) { + resultList.add( + PileReservedVO.builder() + .reservedId(reservedInfo.getId() + "") + .pileSn(reservedInfo.getPileSn()) + .startTime(reservedInfo.getStartTime().toString()) + .endTime(reservedInfo.getEndTime().toString()) + .freq(reservedInfo.getFreq()) + .status(reservedInfo.getStatus()) + .build() + ); + } + pageResponse.setList(resultList); + return pageResponse; + } + + /** + * 修改预约状态 + * @param dto + */ + @Override + public void updateReservationStatus(PileReservationDTO dto) { + if (StringUtils.equals(dto.getStatus(), Constants.ZERO)) { + // 停用 + this.deactivateReserved(dto); + } else if (StringUtils.equals(dto.getStatus(), Constants.ONE)) { + // 启用 + this.activateReserved(dto); + } + } + + /** + * 修改预约充电信息 + * @param dto + */ + @Override + public void updateReservation(PileReservationDTO dto) { + PileReservationInfo pileReservationInfo = pileReservationInfoMapper.selectByPrimaryKey(Integer.valueOf(dto.getReservedId())); + if (pileReservationInfo == null) { + return; + } + if (!StringUtils.equals(dto.getMemberId(), pileReservationInfo.getMemberId())) { + return; + } + + if (StringUtils.isNotBlank(dto.getStartTime())) { + pileReservationInfo.setStartTime(Time.valueOf(dto.getStartTime())); + } + if (StringUtils.isNotBlank(dto.getEndTime())) { + pileReservationInfo.setEndTime(Time.valueOf(dto.getEndTime())); + } + if (StringUtils.isNotBlank(dto.getStatus())) { + pileReservationInfo.setStatus(dto.getStatus()); + } + this.insertOrUpdateSelective(pileReservationInfo); + } + + /** + * 个人桩停止充电 + * @param dto + */ + @Override + public void personPileStopCharging(PersonPileStopChargingDTO dto) { + // 查询个人桩信息 + + // 发送请求的用户有没有权限停止充电 + + + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 2bda3f00b..a9ffca059 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -105,7 +105,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { protected MemberGroupService memberGroupService; @Autowired - private PileStationWhitelistService pileStationWhitelistService; + protected PileStationWhitelistService pileStationWhitelistService; + + @Autowired + protected PersonalChargingRecordService personalChargingRecordService; @Autowired protected RedisCache redisCache; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index 3ab27ab0c..de933a2b3 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -844,7 +844,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { if (!b) { throw new BusinessException("00600006", "个人桩启动失败,无启动权限"); } - String orderCode; + // 生成订单 GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO(); generateOrderDTO.setMemberId(dto.getMemberId()); @@ -853,18 +853,28 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { generateOrderDTO.setStartType(dto.getStartType()); generateOrderDTO.setPileSn(pileSn); generateOrderDTO.setConnectorCode(connectorCode); + + OrderBasicInfo orderBasicInfo; try { - OrderBasicInfo orderBasicInfo = generateOrder(generateOrderDTO); - orderCode = orderBasicInfo.getOrderCode(); + orderBasicInfo = generateOrder(generateOrderDTO); } catch (ParseException e) { throw new RuntimeException(e); } // 支付订单 PayOrderDTO payOrderDTO = new PayOrderDTO(); - payOrderDTO.setOrderCode(orderCode); + payOrderDTO.setOrderCode(orderBasicInfo.getOrderCode()); payOrderDTO.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue()); payOrderDTO.setMemberId(dto.getMemberId()); payOrder(payOrderDTO); - return orderCode; + + // 插入个人桩充电记录表 + try { + personalChargingRecordService.processPersonalChargingRecord(orderBasicInfo); + } catch (Exception e) { + logger.error("插入个人桩充电记录表error, orderCode:{}, transactionCode:{}", + orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); + } + + return orderBasicInfo.getOrderCode(); } } From 64f9797f82cc5cc2fcf89d3ef405fff6f9a668ac Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 17:10:03 +0800 Subject: [PATCH 16/41] =?UTF-8?q?update=20=E5=8D=A0=E6=A1=A9=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/pile/OrderBasicInfoMapper.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 428d84dc0..8e3c2227a 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -2950,7 +2950,6 @@ where t1.del_flag = '0' and `t1`.`member_id` = #{memberId,jdbcType=VARCHAR} and `t1`.`station_id` = #{stationId,jdbcType=VARCHAR} - and `t1`.`create_time` = ]]> #{endTime,jdbcType=VARCHAR} - and `t1`.`update_time` #{startTime,jdbcType=VARCHAR} + and (`t1`.`charge_start_time` = ]]> #{endTime,jdbcType=VARCHAR} or `t1`.`charge_end_time` #{startTime,jdbcType=VARCHAR}) \ No newline at end of file From ed7c0f5e5c0491df3e433160485cb45586768ffb Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 25 Jul 2024 17:22:12 +0800 Subject: [PATCH 17/41] =?UTF-8?q?update=20=E5=8D=A0=E6=A1=A9=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/OrderPileOccupyController.java | 10 +++++++ .../pile/service/OrderPileOccupyService.java | 2 ++ .../impl/OrderPileOccupyServiceImpl.java | 20 +++++++++++++ jsowell-ui/src/api/pile/occupy.js | 11 +++++++- jsowell-ui/src/views/pile/occupy/index.vue | 28 ++++++++++++++++++- 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java index 6bf4fb91e..437ea31b8 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderPileOccupyController.java @@ -111,4 +111,14 @@ public class OrderPileOccupyController extends BaseController { // { // return toAjax(orderPileOccupyService.deleteByPrimaryKey(ids)); // } + + /** + * 重新计算占桩金额 + * retryCalculateOccupyPileOrderAmount + */ + @PreAuthorize("@ss.hasPermi('pile:occupy:edit')") + @PostMapping("/retryCalculateOccupyPileOrderAmount") + public AjaxResult retryCalculateOccupyPileOrderAmount(@RequestBody MakeOrderFreeDTO dto) { + return toAjax(orderPileOccupyService.retryCalculateOccupyPileOrderAmount(dto.getOccupyCode())); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java index 306c8f817..80d99d371 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderPileOccupyService.java @@ -66,6 +66,8 @@ public interface OrderPileOccupyService{ void stopOccupyPileOrder(OrderPileOccupy orderPileOccupy); + int retryCalculateOccupyPileOrderAmount(String occupyCode); + /** * 通过memberid查询挂起状态订单 * @param memberId diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java index 6d3f81324..3dbd24fc4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java @@ -282,6 +282,26 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService { orderPileOccupyMapper.updateByPrimaryKeySelective(orderPileOccupy); } + @Override + public int retryCalculateOccupyPileOrderAmount(String occupyCode) { + OrderPileOccupy orderPileOccupy = queryByOccupyCode(occupyCode); + // 计算金额 + BigDecimal orderAmount = calculateOccupyPileOrderAmount(orderPileOccupy); + + if (orderAmount.compareTo(BigDecimal.ZERO) > 0) { + // 需要支付金额,订单挂起 + orderPileOccupy.setStatus(Constants.TWO); // 2-订单挂起 + } else { + // 订单金额为0 + orderPileOccupy.setPayStatus(Constants.TWO); // 2-无需支付 + orderPileOccupy.setStatus(Constants.ONE); // 1-订单完成 + } + orderPileOccupy.setOrderAmount(orderAmount); + // 更新数据库 + int i = orderPileOccupyMapper.updateByPrimaryKeySelective(orderPileOccupy); + return i; + } + /** * 计算占桩订单金额 * calculateTheAmountOfTheOccupancyOrder diff --git a/jsowell-ui/src/api/pile/occupy.js b/jsowell-ui/src/api/pile/occupy.js index 8348ce6c6..5a9654811 100644 --- a/jsowell-ui/src/api/pile/occupy.js +++ b/jsowell-ui/src/api/pile/occupy.js @@ -50,4 +50,13 @@ export function noNeedPay(data) { method: 'post', data: data }) -} \ No newline at end of file +} + +// 重新计算 +export function retryCalculateOccupyPileOrderAmount(data) { + return request({ + url: '/pile/occupy/retryCalculateOccupyPileOrderAmount', + method: 'post', + data: data + }) +} diff --git a/jsowell-ui/src/views/pile/occupy/index.vue b/jsowell-ui/src/views/pile/occupy/index.vue index 7abeecf62..9b16a5aa9 100644 --- a/jsowell-ui/src/views/pile/occupy/index.vue +++ b/jsowell-ui/src/views/pile/occupy/index.vue @@ -106,6 +106,9 @@ 无需支付 + 重新计算占桩订单金额 + @@ -177,7 +180,15 @@