diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java index b440d6197..efa464146 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java @@ -131,7 +131,6 @@ public class JumpController extends BaseController { try { // 进入充电桩详情做一下鉴权 - // String memberId = getMemberIdByAuthorization(request); PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode); if (StringUtils.isNotBlank(memberId)) { addMember2MemberGroup(memberId, vo); diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java index 0933cdc76..b5b077daa 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java @@ -2,6 +2,7 @@ package com.jsowell.api.uniapp; import com.alibaba.fastjson2.JSON; import com.google.common.collect.ImmutableMap; +import com.jsowell.common.UserAgentUtils; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.redis.RedisCache; @@ -135,6 +136,10 @@ public class PayController extends BaseController { if (isLock) { String appId = request.getHeader("appId"); dto.setWechatAppId(appId); + + // 设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); + map = orderService.payOrderV2(dto); } response = new RestApiResponse<>(map); @@ -378,6 +383,10 @@ public class PayController extends BaseController { if (isLock) { String appId = request.getHeader("appId"); dto.setWechatAppId(appId); + + //设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); + map = orderService.payOccupyPileOrder(dto); } response = new RestApiResponse<>(map); diff --git a/jsowell-common/src/main/java/com/jsowell/common/UserAgentUtils.java b/jsowell-common/src/main/java/com/jsowell/common/UserAgentUtils.java new file mode 100644 index 000000000..4f9f5f806 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/UserAgentUtils.java @@ -0,0 +1,26 @@ +package com.jsowell.common; + +import com.jsowell.common.enums.adapay.AdapayPayChannelEnum; +import com.jsowell.common.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +public class UserAgentUtils { + + /** + * 判断请求来自哪里 + */ + public static String determineRequestSource(HttpServletRequest request) { + String userAgent = request.getHeader("user-agent"); + if (StringUtils.isBlank(userAgent)) { + return null; + } + if (userAgent.contains("AlipayClient")) { + return AdapayPayChannelEnum.ALIPAY_LITE.getValue(); + }else if (userAgent.contains("MicroMessenger")) { + return AdapayPayChannelEnum.WX_LITE.getValue(); + }else{ + return null; + } + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index 78d2720a4..a0b1989f6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -23,6 +23,7 @@ import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.DelFlagEnum; +import com.jsowell.common.enums.adapay.AdapayPayChannelEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; @@ -121,7 +122,13 @@ public class AdapayService { createAdaPaymentParam.setOrder_no(orderNo); createAdaPaymentParam.setPay_amt(amount); createAdaPaymentParam.setApp_id(config.getAdapayAppId()); - createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求 + + // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求 + // 2024年6月13日11点55分,需要兼容支付宝小程序,首先判断请求来源,如为空默认微信小程序 + String payChannel = StringUtils.isNotBlank(dto.getRequestSource()) + ? dto.getRequestSource() + : AdapayPayChannelEnum.WX_LITE.getValue(); + createAdaPaymentParam.setPay_channel(payChannel); createAdaPaymentParam.setGoods_title(dto.getGoodsTitle()); createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名 Map map = Maps.newHashMap(); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PayOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PayOrderDTO.java index c0b32ddd9..43776f3b1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/PayOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/PayOrderDTO.java @@ -75,4 +75,9 @@ public class PayOrderDTO { * */ private String delayMode; + + /** + * 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum} + */ + private String requestSource; } 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 417dd7d44..fa691a152 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 @@ -2480,7 +2480,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); // 获取处理逻辑 AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); - orderLogic.payOrder(payOrderDTO); + orderLogic.payOrder(payOrderDTO); // 充电桩主动申请启动充电生成订单 使用支付 // 推送小程序启动充电消息 // 通过memberId查询openId 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 5b2932205..ff66de8e1 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 @@ -177,109 +177,109 @@ public abstract class AbstractProgramLogic implements InitializingBean { * @param dto * @return */ - protected Map generateOrderByCard(GenerateOrderDTO dto) throws Exception { - logger.info("充电桩主动申请启动充电生成订单 param:{}", JSON.toJSONString(dto)); - BigDecimal accountBalance; - String payMode; - // 判断当前用户是否为平台测试员 - PlatformTesterVO platformTesterVO = memberBasicInfoService.selectPlatformTesterStatus(dto.getMemberId()); - PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn()); - PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId()); - - // 运营商id - String merchantId = pileBasicInfo.getMerchantId() + ""; - - if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) { - // 是平台测试员 - accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; - payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); - } else if (pileStationWhitelist != null) { - // 站点白名单 - accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; - payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); - } else { - // 通过memberId获取账户余额 - MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId); - if (memberVO == null) { - throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR); - } - accountBalance = memberVO.getTotalAccountAmount(); - if (accountBalance.compareTo(BigDecimal.ZERO) <= 0) { - logger.info("充电桩主动申请启动充电生成订单 余额不足, memberId:{}, MemberVO:{}", dto.getMemberId(), JSON.toJSONString(memberVO)); - throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT); - } - BigDecimal defaultAmount = Constants.BALANCE_PAY_MAX_AMOUNT; - if (accountBalance.compareTo(defaultAmount) > 0) { - accountBalance = defaultAmount; - } - payMode = OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue(); - // accountBalance = memberVO.getTotalAccountAmount(); - // dto.setChargeAmount(totalAccountAmount); // 充电金额 - // dto.setPayMode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()); // 1-余额支付 - } - dto.setChargeAmount(accountBalance); - dto.setPayMode(payMode); - /* - 生成订单 - */ - OrderBasicInfo basicInfo = generateOrder(dto); - if (basicInfo == null) { - return null; - } - if (StringUtils.equals(StartModeEnum.AUTH_CARD.getValue(), dto.getStartMode())) { - // 将卡状态改为启动锁定 - PileAuthCard pileAuthCard = PileAuthCard.builder() - .id(dto.getPileAuthCardInfo().getId()) - .logicCard(dto.getPileAuthCardInfo().getLogicCard()) - .status("2") - .build(); - pileAuthCardService.updatePileAuthCard(pileAuthCard); - } else if (StringUtils.equals(StartModeEnum.VIN_CODE.getValue(), dto.getStartMode())) { - // 将vin码改成启动锁定 2023.11.4 站点白名单和测试员不需要锁定 - if (!StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(), dto.getPayMode())) { - dto.getMemberPlateNumberRelation().setVinStatus("2"); - } - // 2024.02.06 不再判断锁定状态 - // memberPlateNumberRelationService.updateMemberPlateNumberRelation(dto.getMemberPlateNumberRelation()); - } - - // 组装结果集 - Map map = Maps.newHashMap(); - map.put("orderCode", basicInfo.getOrderCode()); - map.put("transactionCode", basicInfo.getTransactionCode()); - map.put("accountBalance", accountBalance); - - logger.info("生成订单 result:{}", JSON.toJSONString(map)); - - // 支付订单 - PayOrderDTO payOrderDTO = new PayOrderDTO(); - payOrderDTO.setOrderCode(basicInfo.getOrderCode()); - payOrderDTO.setPayAmount(accountBalance); - payOrderDTO.setPayMode(dto.getPayMode()); - payOrderDTO.setMemberId(dto.getMemberId()); - payOrderDTO.setStartMode(dto.getStartMode()); - // payOrderDTO.setCode(); - // payOrderDTO.setLockValue(); - // payOrderDTO.setOrderBasicInfo(basicInfo); - - // payOrder(payOrderDTO); - - String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); - // 获取处理逻辑 - AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); - orderLogic.payOrder(payOrderDTO); - - // 推送小程序启动充电消息 - // 通过memberId查询openId - MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(dto.getMemberId()); - WechatSendMsgDTO sendMsgDTO = new WechatSendMsgDTO(); - sendMsgDTO.setOpenId(memberBasicInfo.getOpenId()); - sendMsgDTO.setOrderCode(basicInfo.getOrderCode()); - - wxAppletRemoteService.startChargingSendMsg(sendMsgDTO); - - return map; - } + // protected Map generateOrderByCard(GenerateOrderDTO dto) throws Exception { + // logger.info("充电桩主动申请启动充电生成订单 param:{}", JSON.toJSONString(dto)); + // BigDecimal accountBalance; + // String payMode; + // // 判断当前用户是否为平台测试员 + // PlatformTesterVO platformTesterVO = memberBasicInfoService.selectPlatformTesterStatus(dto.getMemberId()); + // PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn()); + // PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId()); + // + // // 运营商id + // String merchantId = pileBasicInfo.getMerchantId() + ""; + // + // if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) { + // // 是平台测试员 + // accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; + // payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); + // } else if (pileStationWhitelist != null) { + // // 站点白名单 + // accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; + // payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); + // } else { + // // 通过memberId获取账户余额 + // MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId); + // if (memberVO == null) { + // throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR); + // } + // accountBalance = memberVO.getTotalAccountAmount(); + // if (accountBalance.compareTo(BigDecimal.ZERO) <= 0) { + // logger.info("充电桩主动申请启动充电生成订单 余额不足, memberId:{}, MemberVO:{}", dto.getMemberId(), JSON.toJSONString(memberVO)); + // throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT); + // } + // BigDecimal defaultAmount = Constants.BALANCE_PAY_MAX_AMOUNT; + // if (accountBalance.compareTo(defaultAmount) > 0) { + // accountBalance = defaultAmount; + // } + // payMode = OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue(); + // // accountBalance = memberVO.getTotalAccountAmount(); + // // dto.setChargeAmount(totalAccountAmount); // 充电金额 + // // dto.setPayMode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()); // 1-余额支付 + // } + // dto.setChargeAmount(accountBalance); + // dto.setPayMode(payMode); + // /* + // 生成订单 + // */ + // OrderBasicInfo basicInfo = generateOrder(dto); + // if (basicInfo == null) { + // return null; + // } + // if (StringUtils.equals(StartModeEnum.AUTH_CARD.getValue(), dto.getStartMode())) { + // // 将卡状态改为启动锁定 + // PileAuthCard pileAuthCard = PileAuthCard.builder() + // .id(dto.getPileAuthCardInfo().getId()) + // .logicCard(dto.getPileAuthCardInfo().getLogicCard()) + // .status("2") + // .build(); + // pileAuthCardService.updatePileAuthCard(pileAuthCard); + // } else if (StringUtils.equals(StartModeEnum.VIN_CODE.getValue(), dto.getStartMode())) { + // // 将vin码改成启动锁定 2023.11.4 站点白名单和测试员不需要锁定 + // if (!StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(), dto.getPayMode())) { + // dto.getMemberPlateNumberRelation().setVinStatus("2"); + // } + // // 2024.02.06 不再判断锁定状态 + // // memberPlateNumberRelationService.updateMemberPlateNumberRelation(dto.getMemberPlateNumberRelation()); + // } + // + // // 组装结果集 + // Map map = Maps.newHashMap(); + // map.put("orderCode", basicInfo.getOrderCode()); + // map.put("transactionCode", basicInfo.getTransactionCode()); + // map.put("accountBalance", accountBalance); + // + // logger.info("生成订单 result:{}", JSON.toJSONString(map)); + // + // // 支付订单 + // PayOrderDTO payOrderDTO = new PayOrderDTO(); + // payOrderDTO.setOrderCode(basicInfo.getOrderCode()); + // payOrderDTO.setPayAmount(accountBalance); + // payOrderDTO.setPayMode(dto.getPayMode()); + // payOrderDTO.setMemberId(dto.getMemberId()); + // payOrderDTO.setStartMode(dto.getStartMode()); + // // payOrderDTO.setCode(); + // // payOrderDTO.setLockValue(); + // // payOrderDTO.setOrderBasicInfo(basicInfo); + // + // // payOrder(payOrderDTO); + // + // String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); + // // 获取处理逻辑 + // AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); + // orderLogic.payOrder(payOrderDTO); + // + // // 推送小程序启动充电消息 + // // 通过memberId查询openId + // MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(dto.getMemberId()); + // WechatSendMsgDTO sendMsgDTO = new WechatSendMsgDTO(); + // sendMsgDTO.setOpenId(memberBasicInfo.getOpenId()); + // sendMsgDTO.setOrderCode(basicInfo.getOrderCode()); + // + // wxAppletRemoteService.startChargingSendMsg(sendMsgDTO); + // + // return map; + // } /** * 订单支付成功 支付回调 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/ThirdPartySecretInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/ThirdPartySecretInfoVO.java index 0e4dc576b..6e03e00e6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/ThirdPartySecretInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/ThirdPartySecretInfoVO.java @@ -50,7 +50,7 @@ public class ThirdPartySecretInfoVO { private String platformName; /** - * 对接平台类型 {@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} + * 对接平台类型, 参见{@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} */ private String platformType; diff --git a/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/ThirdpartySecretInfoService.java b/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/ThirdpartySecretInfoService.java index f69710c30..f7fdfa727 100644 --- a/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/ThirdpartySecretInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/ThirdpartySecretInfoService.java @@ -70,7 +70,7 @@ public interface ThirdpartySecretInfoService { /** * 通过第三方平台类型,查询平台密钥配置信息 - * @param thirdPlatformType 第三方平台类型 {@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} + * @param thirdPlatformType 第三方平台类型, 参见{@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} * @return */ ThirdPartySecretInfoVO queryByThirdPlatformType(String thirdPlatformType);