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 443b94f9b..91a1ce697 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 @@ -127,6 +127,7 @@ public class PayController extends BaseController { if (isLock) { String appId = request.getHeader("appId"); dto.setWechatAppId(appId); + map = orderService.payOrderV2(dto); map = orderService.payOrder(dto); } response = new RestApiResponse<>(map); diff --git a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java index 4c235345b..a78fec72a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java @@ -18,6 +18,7 @@ import com.jsowell.common.constant.Constants; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.TitleTypeEnum; +import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.uniapp.BalanceChangesEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; @@ -609,8 +610,8 @@ public class MemberService { log.info("使用汇付支付充值余额 支付配置参数:{}", JSON.toJSONString(config)); // 查询延时支付模式,由一级运营商配置决定 - String payMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); - + String delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); + String payMode = MerchantDelayModeEnum.getAdapayPayMode(delayMode); // 封装对象 // String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账 CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); 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 1afd51289..4b59fa048 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -120,6 +120,9 @@ public class OrderService { @Resource private OrderPileOccupyService orderPileOccupyService; + @Resource + private IPileMerchantInfoService pileMerchantInfoService; + @Resource private RedisCache redisCache; @@ -1206,4 +1209,11 @@ public class OrderService { public Map payOccupyPileOrder(PayOrderDTO dto) { return orderPileOccupyService.payOccupyPileOrder(dto); } + + public Map payOrderV2(PayOrderDTO dto) { + String mode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); + // 获取处理逻辑 + // OrderLogicFactory.getOrderLogic(); + return null; + } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModeEnum.java new file mode 100644 index 000000000..e8080c989 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModeEnum.java @@ -0,0 +1,58 @@ +package com.jsowell.common.enums.adapay; + +/** + * 汇付支付 分账模式 + */ + +public enum MerchantDelayModeEnum { + DELAY("1", "延时分账", "delay"), + NOT_DELAY("0", "非延时分账", null), + ; + private String value; + private String label; + private String mode; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + /** + * 传入value获取 给汇付的payMode + * @param value + * @return + */ + public static String getAdapayPayMode(String value) { + for (MerchantDelayModeEnum merchantDelayModeEnum : MerchantDelayModeEnum.values()) { + if (merchantDelayModeEnum.getValue().equals(value)) { + return merchantDelayModeEnum.getMode(); + } + } + return null; + } + + MerchantDelayModeEnum(String value, String label, String mode) { + this.value = value; + this.label = label; + this.mode = mode; + } +} diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModelEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModelEnum.java deleted file mode 100644 index 9bf812888..000000000 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/MerchantDelayModelEnum.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.jsowell.common.enums.adapay; - -/** - * 汇付支付 分账模式 - */ -public enum MerchantDelayModelEnum { - DELAY("1", "延时分账"), - NOT_DELAY("0", "非延时分账"), - ; - private String value; - private String label; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - MerchantDelayModelEnum(String value, String label) { - this.value = value; - this.label = label; - } -} 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 d228e0f7c..c83419014 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 @@ -120,6 +120,8 @@ public enum ReturnCodeEnum { CODE_QUERY_PARKING_INFO_IS_NULL("00100057", "未查到停车平台信息"), + CODE_GET_FIRST_LEVEL_MERCHANT_BY_APP_ID("00100058", "根据小程序appId未查询到一级运营商信息"), + /* 个人桩 start */ CODE_PILE_HAS_BEEN_BINDING_ERROR("00400001", "此桩已被绑定,请联系管理员!"), 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 bafd2a76b..b46d7f128 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 @@ -105,7 +105,7 @@ public class AdapayService { // 封装对象 String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额 // String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账 - String payMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); + // String payMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); createAdaPaymentParam.setOrder_no(dto.getOrderCode()); createAdaPaymentParam.setPay_amt(amount); 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 0f8974048..c0b32ddd9 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 @@ -70,4 +70,9 @@ public class PayOrderDTO { * 这个字段是微信支付凭证的商品名 */ private String goodsDesc; + + /** + * + */ + private String delayMode; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java index 1d04232ff..b445ce823 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java @@ -5,6 +5,7 @@ import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.entity.SysDept; import com.jsowell.common.core.domain.entity.SysUser; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.DictUtils; @@ -395,16 +396,30 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService { * @param wechatAppId 微信小程序id * @return */ + // @Override + // public String getDelayModeByWechatAppId(String wechatAppId) { + // PileMerchantInfo merchant = getFirstLevelMerchantByAppId(wechatAppId); + // if (merchant != null) { + // String delayMode = merchant.getDelayMode(); + // if (StringUtils.equals(delayMode, Constants.ONE)) { + // return Constants.ADAPAY_PAY_MODE_DELAY; + // } + // } + // return null; + // } + + /** + * 通过wechatAppId查询一级运营商的延时支付模式配置 + * @param wechatAppId 微信小程序id + * @return 延时分账模式(0-不延时;1-延时分账) + */ @Override public String getDelayModeByWechatAppId(String wechatAppId) { PileMerchantInfo merchant = getFirstLevelMerchantByAppId(wechatAppId); - if (merchant != null) { - String delayMode = merchant.getDelayMode(); - if (StringUtils.equals(delayMode, Constants.ONE)) { - return Constants.ADAPAY_PAY_MODE_DELAY; - } + if (merchant == null) { + throw new BusinessException(ReturnCodeEnum.CODE_GET_FIRST_LEVEL_MERCHANT_BY_APP_ID); } - return null; + return merchant.getDelayMode(); } @Override diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java index 42f959b0f..5246e4949 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java @@ -85,25 +85,21 @@ public abstract class AbstractOrderLogic implements InitializingBean { protected RedisCache redisCache; /** - * 余额支付订单 + * 支付订单 + * @param dto + * @return */ - public abstract void balancePayOrder(PayOrderDTO dto); - - /** - * 在线支付订单 - */ - public abstract Map onlinePaymentOrder(PayOrderDTO dto); - - /** - * 白名单支付订单 - */ - public abstract void whitelistPaymentOrder(PayOrderDTO dto); + public abstract Map payOrder(PayOrderDTO dto); /** * 订单结算 */ public abstract void orderSettle(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); + /** + * 订单退款 + */ + /** * 余额支付订单退款 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java index 2e1d52fc4..d22a5e4ac 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java @@ -3,6 +3,7 @@ package com.jsowell.pile.service.orderlogic; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.jsowell.adapay.operation.PaymentReverseOperation; import com.jsowell.adapay.response.PaymentReverseResponse; import com.jsowell.adapay.vo.OrderSettleResult; @@ -11,7 +12,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.enums.AcquirerEnum; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.MemberWalletEnum; -import com.jsowell.common.enums.adapay.MerchantDelayModelEnum; +import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.StringUtils; @@ -42,13 +43,43 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { @Override public void afterPropertiesSet() throws Exception { - OrderLogicFactory.register(MerchantDelayModelEnum.DELAY.getValue(), this); + OrderLogicFactory.register(MerchantDelayModeEnum.DELAY.getValue(), this); + } + + @Override + public Map payOrder(PayOrderDTO dto) { + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + if (orderInfo == null) { + throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL); + } + if (!StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.unpaid.getValue())) { + // 订单已支付 + throw new BusinessException(ReturnCodeEnum.CODE_ORDER_IS_NOT_TO_BE_PAID_ERROR); + } + Map resultMap = Maps.newHashMap(); + if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) { + // 余额支付 + balancePayOrder(dto); + } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { + // 2023-07-11 全部改为汇付支付 + dto.setGoodsTitle("充电费用"); + dto.setGoodsDesc("充电桩预付款金额"); + dto.setType(ScenarioEnum.ORDER.getValue()); + Map weixinMap = onlinePaymentOrder(dto); + + // 返回微信支付参数 + resultMap.put("weixinMap", weixinMap); + } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付 + // 白名单支付可以直接调支付回调方法 + dto.setPayAmount(new BigDecimal("500")); + whitelistPaymentOrder(dto); + } + return resultMap; } /** * 余额支付订单 */ - @Override public void balancePayOrder(PayOrderDTO dto) { String orderCode = dto.getOrderCode(); // 订单编号 BigDecimal chargeAmount = dto.getPayAmount(); // 支付金额 @@ -132,11 +163,11 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { /** * 在线支付订单 */ - @Override public Map onlinePaymentOrder(PayOrderDTO dto) { + // 2023-07-11 全部改为汇付支付 - dto.setGoodsTitle("充电费用"); - dto.setGoodsDesc("充电桩预付款金额"); + // dto.setGoodsTitle("充电费用"); + // dto.setGoodsDesc("充电桩预付款金额"); Map weixinMap = adapayService.createPayment(dto); return weixinMap; } @@ -144,7 +175,6 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { /** * 白名单支付订单 */ - @Override public void whitelistPaymentOrder(PayOrderDTO dto) { String orderCode = dto.getOrderCode(); BigDecimal payAmount = dto.getPayAmount(); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java index e52bec395..fd13d0640 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java @@ -3,6 +3,7 @@ package com.jsowell.pile.service.orderlogic; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.jsowell.adapay.response.RefundResponse; import com.jsowell.adapay.vo.OrderSettleResult; import com.jsowell.common.constant.Constants; @@ -10,7 +11,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.enums.AcquirerEnum; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.MemberWalletEnum; -import com.jsowell.common.enums.adapay.MerchantDelayModelEnum; +import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.StringUtils; @@ -41,15 +42,46 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{ @Override public void afterPropertiesSet() throws Exception { - OrderLogicFactory.register(MerchantDelayModelEnum.NOT_DELAY.getValue(), this); + OrderLogicFactory.register(MerchantDelayModeEnum.NOT_DELAY.getValue(), this); } + @Override + public Map payOrder(PayOrderDTO dto) { + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + if (orderInfo == null) { + throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL); + } + if (!StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.unpaid.getValue())) { + // 订单已支付 + throw new BusinessException(ReturnCodeEnum.CODE_ORDER_IS_NOT_TO_BE_PAID_ERROR); + } + Map resultMap = Maps.newHashMap(); + if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) { + // 余额支付 + balancePayOrder(dto); + } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { + // 2023-07-11 全部改为汇付支付 + dto.setGoodsTitle("充电费用"); + dto.setGoodsDesc("充电桩预付款金额"); + dto.setType(ScenarioEnum.ORDER.getValue()); + Map weixinMap = onlinePaymentOrder(dto); + + // 返回微信支付参数 + resultMap.put("weixinMap", weixinMap); + } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付 + // 白名单支付可以直接调支付回调方法 + dto.setPayAmount(new BigDecimal("500")); + whitelistPaymentOrder(dto); + } + return resultMap; + } + + /** * 余额支付订单 * * @param dto */ - @Override public void balancePayOrder(PayOrderDTO dto) { String orderCode = dto.getOrderCode(); // 订单编号 BigDecimal chargeAmount = dto.getPayAmount(); // 支付金额 @@ -135,7 +167,6 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{ * * @param dto */ - @Override public Map onlinePaymentOrder(PayOrderDTO dto) { // 2023-07-11 全部改为汇付支付 dto.setGoodsTitle("充电费用"); @@ -149,7 +180,6 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{ * * @param dto */ - @Override public void whitelistPaymentOrder(PayOrderDTO dto) { String orderCode = dto.getOrderCode(); BigDecimal payAmount = dto.getPayAmount();