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 d3f08e3d4..15e265fbe 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -172,7 +172,7 @@ public class OrderService { * @param dto * @return */ - public String generateOrderV2(GenerateOrderDTO dto) throws ParseException { + public String generateOrderV2(GenerateOrderDTO dto) throws Exception { String delayMode = null; if (StringUtils.equals(dto.getRequestSource(), AdapayPayChannelEnum.WX_LITE.getValue())) { delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getAppId()); diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 52b0222cd..f6510e125 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -2264,7 +2264,7 @@ public class SpringBootTestController { @Test public void testGetPileTypeNum() { - Long stationId = 1L; + Long stationId = 201L; pileConnectorInfoService.getPileTypeNum(stationId); } 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 cbc8ce5d2..b87c20e78 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 @@ -143,6 +143,8 @@ public enum ReturnCodeEnum { CODE_ALIPAY_ACCESS_TOKEN_ERROR("00100066", "获取支付宝accessToken失败"), + CODE_PENDING_PAYMENT_ORDERS_EXIST_ERROR("00100067", "存在待支付订单"), + /* 个人桩 start */ CODE_PILE_HAS_BEEN_BINDING_ERROR("00400001", "此桩已被绑定,请联系管理员!"), @@ -216,7 +218,7 @@ public enum ReturnCodeEnum { CODE_SELECT_INFO_IS_NULL("00700001", "查询信息为空!"), CODE_THIS_VIN_HAS_BEEN_BINDING("00700002", "该vin已被绑定,请检查!"), - ; + ; private String value; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 18f8927fc..688939576 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -378,4 +378,6 @@ public interface OrderBasicInfoMapper { * @return */ List getOrderDetailByStationIds(@Param("stationIds") List stationIds, @Param("startTime") String startTime, @Param("endTime") String endTime); + + List queryOrdersByPileConnectorCodeAndStatus(@Param("pileConnectorCode") String pileConnectorCode, @Param("orderStatus") String orderStatus, @Param("payStatus") String payStatus); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index 454b822f7..844e739dd 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -485,4 +485,11 @@ public interface OrderBasicInfoService{ BusinessOrderDetailInfoVO getBusinessOrderDetail(String orderCode); + + /** + * 根据枪口编号和状态查询订单 + * @param pileConnectorCode + * @return + */ + List queryOrdersByPileConnectorCodeAndStatus(String pileConnectorCode, String orderStatus, String payStatus); } 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 648d46d83..1074a8a3d 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 @@ -726,8 +726,8 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { if (StringUtils.isBlank(pileConnectorCode)) { return null; } - String pileSn = pileConnectorCode.substring(0, pileConnectorCode.length() - 2); - String connectorCode = pileConnectorCode.substring(pileConnectorCode.length() - 2); + String pileSn = YKCUtils.getPileSn(pileConnectorCode); + String connectorCode = YKCUtils.getConnectorCode(pileConnectorCode); return queryChargingByPileSnAndConnectorCode(pileSn, connectorCode); } @@ -4066,5 +4066,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return vo; } + + @Override + public List queryOrdersByPileConnectorCodeAndStatus(String pileConnectorCode, String orderStatus, String payStatus) { + return orderBasicInfoMapper.queryOrdersByPileConnectorCodeAndStatus(pileConnectorCode, orderStatus, payStatus); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java index f99914013..cd9a003b8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java @@ -779,7 +779,9 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService { public Map getPileTypeNum(Long stationId) { // 获取充电站枪口列表 List connectorList = getUniAppConnectorList(stationId); - return getPileTypeNum(connectorList); + Map pileTypeNum = getPileTypeNum(connectorList); + log.info("根据站点id:{}, 查询快、慢充设备数量:{}", stationId, pileTypeNum); + return pileTypeNum; } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java index 7a8c7d655..5880a5c77 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java @@ -563,13 +563,13 @@ public class PileStationInfoServiceImpl implements PileStationInfoService { // 查询快慢充数量 Map map = pileConnectorInfoService.getPileTypeNum(Long.parseLong(pileStationVO.getId())); - Integer fastFree = map.get("fastFree"); - Integer slowFree = map.get("slowFree"); + // Integer fastFree = map.get("fastFree"); + // Integer slowFree = map.get("slowFree"); stationVO.setFastTotal(map.get("fastTotal")); - stationVO.setFastFree(fastFree); + stationVO.setFastFree(map.get("fastFree")); stationVO.setSlowTotal(map.get("slowTotal")); stationVO.setSlowFree(map.get("slowFree")); - stationVO.setTotalFree(fastFree + slowFree); + stationVO.setTotalFree(stationVO.getFastFree() + stationVO.getSlowFree()); // 查询当前时段电费 CurrentTimePriceDetails currentTimePriceDetails = pileBillingTemplateService.getCurrentTimePriceDetails(stationVO.getStationId()); 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 3a9649562..33288373b 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 @@ -36,7 +36,6 @@ import org.springframework.beans.factory.annotation.Value; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; -import java.text.ParseException; import java.util.List; import java.util.Map; import java.util.Objects; @@ -123,7 +122,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { /** * 生成订单 */ - public abstract OrderBasicInfo generateOrder(GenerateOrderDTO dto) throws ParseException; + public abstract OrderBasicInfo generateOrder(GenerateOrderDTO dto) throws Exception; /** * 支付订单 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 e5fc9f9df..9044cd693 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 @@ -69,7 +69,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { * @param dto */ @Override - public OrderBasicInfo generateOrder(GenerateOrderDTO dto) throws ParseException { + public OrderBasicInfo generateOrder(GenerateOrderDTO dto) throws Exception { // 处理前端传的参数 orderBasicInfoService.analysisPileParameter(dto); @@ -112,9 +112,33 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 无transactionCode, 表示由平台端启动充电, 需要验证充电桩状态 orderBasicInfoService.checkPileInfoForEBike(dto); } + + // 校验该桩号枪口是否有待支付订单 + checkPileConnectorOrder(dto); + return orderBasicInfoService.saveOrderForEBike(dto); } + /** + * 校验该桩号枪口是否有待支付订单 + */ + private void checkPileConnectorOrder(GenerateOrderDTO dto) { + String pileConnectorCode = dto.getPileConnectorCode(); + List orderBasicInfoList = orderBasicInfoService.queryOrdersByPileConnectorCodeAndStatus(pileConnectorCode, null, OrderPayStatusEnum.unpaid.getValue()); + + if (CollectionUtils.isNotEmpty(orderBasicInfoList)) { + List collect = orderBasicInfoList.stream() + // 这个会员有待支付订单 + .filter(x -> StringUtils.equals(x.getMemberId(), dto.getMemberId())) + // 10分钟内的订单 + .filter(x -> DateUtils.intervalTime(x.getCreateTime(), DateUtils.getNowDate()) < 10 * 60 * 1000) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(collect)) { + throw new BusinessException(ReturnCodeEnum.CODE_PENDING_PAYMENT_ORDERS_EXIST_ERROR); + } + } + } + /** * 支付订单 * @param dto @@ -933,7 +957,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { OrderBasicInfo orderBasicInfo; try { orderBasicInfo = generateOrder(generateOrderDTO); - } catch (ParseException e) { + } catch (Exception e) { throw new RuntimeException(e); } // 支付订单 diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 4a9b0c112..6c6ea7886 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -2989,4 +2989,21 @@ AND t1.create_time BETWEEN #{startTime,jdbcType=VARCHAR} AND DATE_ADD(#{endTime,jdbcType=VARCHAR}, INTERVAL 1 DAY) order by t1.create_time + + + \ No newline at end of file