diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java index 1ac31b6c5..aec246837 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OccupyOrderController.java @@ -46,7 +46,7 @@ public class OccupyOrderController extends BaseController { // logger.info("查询站点占桩费率 params:{}", stationId); RestApiResponse response = null; try { - BillingTemplateVO vo = pileBillingTemplateService.queryUsedBillingTemplate(stationId); + BillingTemplateVO vo = pileBillingTemplateService.queryUsedBillingTemplateForEV(stationId); response = new RestApiResponse<>(vo); } catch (Exception e) { logger.error("查询站点占桩费率 error,", e); diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 559043436..bf2909e90 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -3370,12 +3370,12 @@ public class SpringBootTestController { @Test public void testGenerateBillingTemplateMsgBody() { - String pileSn = "88000000000001"; + String pileSn = "13273881"; // 根据桩号查询计费模板 BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); - - byte[] messageBody = pileBillingTemplateService.generateBillingTemplateMsgBody(pileSn, billingTemplateVO); - System.out.println(BytesUtil.binary(messageBody, 16)); + System.out.println(billingTemplateVO); + // byte[] messageBody = pileBillingTemplateService.generateBillingTemplateMsgBody(pileSn, billingTemplateVO); + // System.out.println(BytesUtil.binary(messageBody, 16)); } @Test diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/EBikeStartChargingCommand.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/EBikeStartChargingCommand.java index 29b3c56fb..507f54e60 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/EBikeStartChargingCommand.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ykcCommond/EBikeStartChargingCommand.java @@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.math.BigDecimal; + /** * 启动充电指令 */ @@ -16,7 +18,7 @@ import lombok.experimental.SuperBuilder; @SuperBuilder public class EBikeStartChargingCommand extends StartChargingCommand{ /** - * 费率模式 + * 费率模式 =0计时,=1包月,=2计量,=3计次。包月、计次默认充满自停,计时、计量可手动设置时长和电量 */ private int rateMode; @@ -25,4 +27,9 @@ public class EBikeStartChargingCommand extends StartChargingCommand{ */ private int balanceOrValidity; + /** + * 根据金额计算出电量 + */ + private BigDecimal electricity; + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java index 0c28c8a59..b017255a9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileBillingTemplateService.java @@ -106,7 +106,9 @@ public interface PileBillingTemplateService { * @param stationId 站点id * @return */ - BillingTemplateVO queryUsedBillingTemplate(String stationId); + BillingTemplateVO queryUsedBillingTemplateForEV(String stationId); + + BillingTemplateVO queryUsedBillingTemplateForEBike(String stationId); List conversionParameters(List billingDetailList); 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 967779e87..5027ec6b5 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 @@ -21,6 +21,7 @@ import com.jsowell.pile.dto.RemoteAccountBalanceUpdateDTO; import com.jsowell.pile.dto.UpdateFirmwareDTO; import com.jsowell.pile.vo.web.BillingTemplateVO; import com.jsowell.pile.vo.web.PileDetailVO; +import com.jsowell.wxpay.service.WxAppletRemoteService; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,6 +55,9 @@ public class PileRemoteService { @Autowired private RedisCache redisCache; + @Autowired + private WxAppletRemoteService wxAppletRemoteService; + @Autowired private EBikeSendCommandService eBikeSendCommandService; @@ -108,6 +112,12 @@ public class PileRemoteService { log.warn("远程启动充电, 充电桩编号和枪口号不能为空"); return; } + + // 发送启动充电指令前,再次下发计费模板 + BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); + this.publishPileBillingTemplate(pileSn, billingTemplateVO); + log.info("发送启动充电指令前,再次下发计费模板, transactionCode:{}, 计费模板:{}", transactionCode, JSON.toJSONString(billingTemplateVO)); + log.info("【=====平台下发指令=====】: 远程启动充电, 桩号:{}, 枪口号:{}", pileSn, connectorCode); StartChargingCommand startChargingCommand = StartChargingCommand.builder() .pileSn(pileSn) @@ -131,7 +141,12 @@ public class PileRemoteService { startChargingCommand.setPileSn(pileSn); startChargingCommand.setConnectorCode(connectorCode); startChargingCommand.setTransactionCode(transactionCode); - startChargingCommand.setChargeAmount(chargeAmount); + startChargingCommand.setChargeAmount(chargeAmount); // 电单车这个字段表示具体度数 + startChargingCommand.setRateMode(2); + + // 根据启动金额计算电量 + BigDecimal electricity = BigDecimal.ZERO; + startChargingCommand.setElectricity(electricity); try { ChargingOperationResponse startChargingResponse = eBikeSendCommandService.sendStartChargingCommand(startChargingCommand); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandServiceImpl.java index 466ba3f1f..1fa456567 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandServiceImpl.java @@ -57,6 +57,9 @@ public class EBikeSendCommandServiceImpl implements EBikeSendCommandService { message.setChargeCommand(1); // 充电时长/功率 int chargeDurationOrPower = 0; + if (command.getElectricity() != null) { + chargeDurationOrPower = command.getElectricity().multiply(new BigDecimal("100")).intValue(); + } message.setChargeTimeOrPower(chargeDurationOrPower); // 订单编号 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 0743fd81a..648d46d83 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -502,7 +502,8 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { /** * 充电桩启动成功 - * + * 汽车桩收到0x33 成功后调用 + * 电单车桩,收到回复成功后调用 * @param transactionCode */ @Override @@ -518,6 +519,9 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { orderInfo.setChargeStartTime(new Date()); } updateOrderBasicInfo(orderInfo); + + // 发送小程序通知 + wxAppletRemoteService.startChargingSendMsg(orderInfo); } /** @@ -1910,7 +1914,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { } // 查到站点计费模板 - BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplate(stationId); + BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplateForEV(stationId); if (billingTemplate != null) { // 尖时段服务费单价 orderDetail.setSharpServicePrice(billingTemplate.getSharpServicePrice()); @@ -3150,14 +3154,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { logger.error("订单:{}支付成功, 启动充电失败, 桩信息为空, pileSn:{}", dto.getOrderCode(), pileSn); return; } - // 发送启动充电指令前,再次下发计费模板 - BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); - if (billingTemplateVO != null && !StringUtils.equals(pileConnectorDetailVO.getChargePortType(), Constants.THREE)) { - logger.info("发送启动充电指令前,再次下发计费模板, orderCode:{}, 计费模板:{}", orderInfo.getOrderCode(), JSON.toJSONString(billingTemplateVO)); - pileRemoteService.publishPileBillingTemplate(pileSn, billingTemplateVO); - } + // 获取启动金额 BigDecimal chargeAmount = computeChargeAmount(orderInfo.getMerchantId(), orderInfo.getStationId(), orderInfo.getMemberId(), orderInfo.getPayAmount()); + // 发送启动指令 if (StringUtils.equals(pileConnectorDetailVO.getChargePortType(), Constants.THREE)) { // 电单车桩 @@ -3178,17 +3178,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { orderInfo.setRemedialAmount(remedialAmount.subtract(payAmount)); } - /* - 推送小程序启动充电消息 - 通过memberId查询openId - */ - if (StringUtils.isNotBlank(orderInfo.getMemberId())) { - try { - wxAppletRemoteService.startChargingSendMsg(orderInfo.getMemberId(), orderInfo.getOrderCode()); - } catch (Exception e) { - logger.error("推送小程序启动充电消息error", e); - } - } + this.updateOrderBasicInfo(orderInfo); } 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 a025a19d6..76883f4f4 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 @@ -316,7 +316,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService { /* 查新站点计费模板 */ - BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplate(orderPileOccupy.getStationId()); + BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplateForEV(orderPileOccupy.getStationId()); if (billingTemplate == null) { log.info("计算占桩订单金额-查询站点:{}计费模板为空, 不收取占桩费用", orderPileOccupy.getStationId()); return resultAmount; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java index 6cd943426..edb5bcebc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBillingTemplateServiceImpl.java @@ -375,7 +375,7 @@ public class PileBillingTemplateServiceImpl implements PileBillingTemplateServic LocalTime localTime = LocalTime.now(); String now = LocalTime.of(localTime.getHour(), localTime.getMinute(), localTime.getSecond()).toString(); // 通过站点id查询计费模板 - BillingTemplateVO billingTemplateVO = queryUsedBillingTemplate(stationId); + BillingTemplateVO billingTemplateVO = queryUsedBillingTemplateForEV(stationId); if (Objects.nonNull(billingTemplateVO)) { result = new CurrentTimePriceDetails(); result.setTemplateCode(billingTemplateVO.getTemplateCode()); @@ -629,9 +629,20 @@ public class PileBillingTemplateServiceImpl implements PileBillingTemplateServic * @return */ @Override - public BillingTemplateVO queryUsedBillingTemplate(String stationId) { + public BillingTemplateVO queryUsedBillingTemplateForEV(String stationId) { List list = queryStationBillingTemplateListForUniApp(stationId); Optional max = list.stream() + .filter(x -> StringUtils.equals(x.getDeviceType(), Constants.ONE)) // 过滤出汽车桩的计费模板 + .filter(x -> StringUtils.isNotBlank(x.getPublishTime())) + .max(Comparator.comparing(BillingTemplateVO::getPublishTime)); + return max.orElse(null); + } + + @Override + public BillingTemplateVO queryUsedBillingTemplateForEBike(String stationId) { + List list = queryStationBillingTemplateListForUniApp(stationId); + Optional max = list.stream() + .filter(x -> StringUtils.equals(x.getDeviceType(), Constants.TWO)) // 过滤出电单车桩的计费模板 .filter(x -> StringUtils.isNotBlank(x.getPublishTime())) .max(Comparator.comparing(BillingTemplateVO::getPublishTime)); return max.orElse(null); @@ -684,7 +695,7 @@ public class PileBillingTemplateServiceImpl implements PileBillingTemplateServic @Override public List queryBillingPriceOld(String stationId) { // 查询站点当前计费模板 有缓存 - BillingTemplateVO billingTemplateVO = queryUsedBillingTemplate(stationId); + BillingTemplateVO billingTemplateVO = queryUsedBillingTemplateForEV(stationId); if (billingTemplateVO == null) { return Lists.newArrayList(); } @@ -737,7 +748,7 @@ public class PileBillingTemplateServiceImpl implements PileBillingTemplateServic @Override public List queryBillingPrice(String stationId) { // 查询站点当前计费模板 有缓存 - BillingTemplateVO billingTemplateVO = queryUsedBillingTemplate(stationId); + BillingTemplateVO billingTemplateVO = queryUsedBillingTemplateForEV(stationId); if (billingTemplateVO == null) { return Lists.newArrayList(); } 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 cb55c5e2f..e5fc9f9df 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 @@ -927,7 +927,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { generateOrderDTO.setConnectorCode(connectorCode); // 通过站点id查询计费模板 - BillingTemplateVO billingTemplateVO = pileBillingTemplateService.queryUsedBillingTemplate(dto.getStationId()); + BillingTemplateVO billingTemplateVO = pileBillingTemplateService.queryUsedBillingTemplateForEV(dto.getStationId()); generateOrderDTO.setBillingTemplate(billingTemplateVO); OrderBasicInfo orderBasicInfo; 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 cc7b5632e..8471bc5c5 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 @@ -15,6 +15,7 @@ import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.http.HttpUtils; import com.jsowell.pile.domain.MemberBasicInfo; +import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.service.MemberBasicInfoService; import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.pile.service.PileBillingTemplateService; @@ -199,6 +200,17 @@ public class WxAppletRemoteService { return this.startChargingSendMsg(sendMsgDTO); } + public Map startChargingSendMsg(OrderBasicInfo orderBasicInfo) { + MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(orderBasicInfo.getMemberId()); + if (memberBasicInfo == null) { + throw new BusinessException("99999", "开始充电发送消息 error, 查询openid为空"); + } + WechatSendMsgDTO sendMsgDTO = new WechatSendMsgDTO(); + sendMsgDTO.setOpenId(memberBasicInfo.getOpenId()); + sendMsgDTO.setOrderCode(orderBasicInfo.getOrderCode()); + return this.startChargingSendMsg(sendMsgDTO); + } + /** * 开始充电发送消息 * @param dto diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/HaiNanPlatformServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/HaiNanPlatformServiceImpl.java index 3ae9644fa..157bb1623 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/HaiNanPlatformServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/HaiNanPlatformServiceImpl.java @@ -227,7 +227,7 @@ public class HaiNanPlatformServiceImpl implements ThirdPartyPlatformService { StringBuilder serviceFee = new StringBuilder("服务费:"); // 查询站点当前使用的计费模板 - BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplate(stationId); + BillingTemplateVO billingTemplate = pileBillingTemplateService.queryUsedBillingTemplateForEV(stationId); if (billingTemplate == null) { resultMap.put("electricityFee", electricityFee.toString()); resultMap.put("serviceFee", serviceFee.toString());