支付占桩订单

This commit is contained in:
2023-08-18 09:52:12 +08:00
parent fe5389ce7a
commit 4af9c7a184
11 changed files with 194 additions and 73 deletions

View File

@@ -129,10 +129,10 @@ public class PayController extends BaseController {
} }
response = new RestApiResponse<>(map); response = new RestApiResponse<>(map);
} catch (BusinessException e) { } catch (BusinessException e) {
logger.warn("wechatpay支付订单 warn param:{}", dto.toString(), e); logger.warn("wechatpay支付订单 warn param:{}", dto, e);
response = new RestApiResponse<>(e.getCode(), e.getMessage()); response = new RestApiResponse<>(e.getCode(), e.getMessage());
} catch (Exception e) { } catch (Exception e) {
logger.error("wechatpay支付订单 error param:{}", dto.toString(), e); logger.error("wechatpay支付订单 error param:{}", dto, e);
response = new RestApiResponse<>(ReturnCodeEnum.CODE_ORDER_PAY_ERROR); response = new RestApiResponse<>(ReturnCodeEnum.CODE_ORDER_PAY_ERROR);
} finally { } finally {
// 支付订单解锁 // 支付订单解锁
@@ -328,15 +328,16 @@ public class PayController extends BaseController {
} }
/** /**
* 支付占桩订单 * 支付占桩订单/占桩订单支付
* https://api.jsowellcloud.com/uniapp/pay/payOccupyPileOrder
*/ */
@PostMapping("/payOccupyPileOrder") @PostMapping("/payOccupyPileOrder")
public RestApiResponse<?> payOccupyPileOrder(HttpServletRequest request, @RequestBody PayOrderDTO dto) { public RestApiResponse<?> payOccupyPileOrder(HttpServletRequest request, @RequestBody PayOrderDTO dto) {
logger.info("wechatpay支付订单 param:{}", dto.toString()); logger.info("支付占桩订单 param:{}", dto.toString());
RestApiResponse<?> response; RestApiResponse<?> response;
// 支付订单加锁 // 支付订单加锁
String lockKey = "pay_order_" + dto.getOrderCode(); String lockKey = "pay_occupy_order_" + dto.getOrderCode();
String lockValue = IdUtils.fastUUID(); String lockValue = IdUtils.fastUUID();
try { try {
String memberId = getMemberIdByAuthorization(request); String memberId = getMemberIdByAuthorization(request);
@@ -354,7 +355,7 @@ public class PayController extends BaseController {
if (isLock) { if (isLock) {
String appId = request.getHeader("appId"); String appId = request.getHeader("appId");
dto.setWechatAppId(appId); dto.setWechatAppId(appId);
map = orderService.payOrder(dto); map = orderService.payOccupyPileOrder(dto);
} }
response = new RestApiResponse<>(map); response = new RestApiResponse<>(map);
} catch (BusinessException e) { } catch (BusinessException e) {

View File

@@ -3,7 +3,7 @@ package com.jsowell.api.uniapp;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.jsowell.adapay.dto.BalancePaymentRequestDTO; import com.jsowell.adapay.dto.BalancePaymentRequestDTO;
import com.jsowell.adapay.service.AdapayMemberService; import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum;
@@ -48,7 +48,7 @@ public class TempController extends BaseController {
private IAdapayMemberAccountService adapayMemberAccountService; private IAdapayMemberAccountService adapayMemberAccountService;
@Autowired @Autowired
private AdapayMemberService adapayMemberService; private AdapayService adapayMemberService;
@Autowired @Autowired
private IMemberBasicInfoService memberBasicInfoService; private IMemberBasicInfoService memberBasicInfoService;

View File

@@ -46,6 +46,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
@@ -111,9 +112,11 @@ public class OrderService {
@Autowired @Autowired
private MemberAdapayRecordService memberAdapayRecordService; private MemberAdapayRecordService memberAdapayRecordService;
@Resource
private OrderPileOccupyService orderPileOccupyService;
/** /**
* 生成订单 * 生成订单
*
* @param dto * @param dto
* @return * @return
*/ */
@@ -125,18 +128,8 @@ public class OrderService {
return null; return null;
} }
/**
* 获取到vin 查询对应的用户,得到余额
*
* 生成订单
*
* 支付订单
*
*/
/** /**
* 订单支付 * 订单支付
*
* @param dto * @param dto
*/ */
public Map<String, Object> payOrder(PayOrderDTO dto) throws Exception { public Map<String, Object> payOrder(PayOrderDTO dto) throws Exception {
@@ -154,7 +147,7 @@ public class OrderService {
// 查询订单详情,验证订单中的桩编号是否正确 // 查询订单详情,验证订单中的桩编号是否正确
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode());
if (orderBasicInfo == null) { if (orderBasicInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
} }
if (!(StringUtils.equals(orderBasicInfo.getPileSn(), dto.getPileSn()) if (!(StringUtils.equals(orderBasicInfo.getPileSn(), dto.getPileSn())
&& StringUtils.equals(orderBasicInfo.getConnectorCode(), dto.getConnectorCode()))) { && StringUtils.equals(orderBasicInfo.getConnectorCode(), dto.getConnectorCode()))) {
@@ -241,7 +234,7 @@ public class OrderService {
// 查订单 // 查订单
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode());
if (orderInfo == null) { if (orderInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
} }
// 判断订单状态是不是已经结算了 // 判断订单状态是不是已经结算了
if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) {
@@ -540,7 +533,7 @@ public class OrderService {
public UniAppOrderVO getUniAppOrderDetail(String orderCode) { public UniAppOrderVO getUniAppOrderDetail(String orderCode) {
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode);
if (orderBasicInfo == null) { if (orderBasicInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
} }
UniAppOrderVO vo = new UniAppOrderVO(); UniAppOrderVO vo = new UniAppOrderVO();
vo.setOrderCode(orderBasicInfo.getOrderCode()); vo.setOrderCode(orderBasicInfo.getOrderCode());
@@ -1148,5 +1141,7 @@ public class OrderService {
log.info("支付撤销失败 data:{}", JSON.toJSONString(data)); log.info("支付撤销失败 data:{}", JSON.toJSONString(data));
} }
public Map<String, Object> payOccupyPileOrder(PayOrderDTO dto) {
return orderPileOccupyService.payOccupyPileOrder(dto);
}
} }

View File

@@ -6,7 +6,7 @@ import com.jsowell.adapay.dto.AdapayMemberInfoDTO;
import com.jsowell.adapay.dto.SettleAccountDTO; import com.jsowell.adapay.dto.SettleAccountDTO;
import com.jsowell.adapay.dto.UpdateAccountConfigDTO; import com.jsowell.adapay.dto.UpdateAccountConfigDTO;
import com.jsowell.adapay.dto.WithdrawDTO; import com.jsowell.adapay.dto.WithdrawDTO;
import com.jsowell.adapay.service.AdapayMemberService; import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.AdapayAccountBalanceVO; import com.jsowell.adapay.vo.AdapayAccountBalanceVO;
import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.domain.AjaxResult; import com.jsowell.common.core.domain.AjaxResult;
@@ -26,7 +26,7 @@ import java.util.Map;
public class AdapayMemberController extends BaseController { public class AdapayMemberController extends BaseController {
@Autowired @Autowired
private AdapayMemberService adapayMemberService; private AdapayService adapayMemberService;
/** /**
* 创建结算账户 * 创建结算账户

View File

@@ -15,7 +15,7 @@ import com.huifu.adapay.model.Refund;
import com.jsowell.JsowellApplication; import com.jsowell.JsowellApplication;
import com.jsowell.adapay.config.AbstractAdapayConfig; import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.factory.AdapayConfigFactory; import com.jsowell.adapay.factory.AdapayConfigFactory;
import com.jsowell.adapay.service.AdapayMemberService; import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.entity.SysDictData; import com.jsowell.common.core.domain.entity.SysDictData;
@@ -175,7 +175,7 @@ public class SpringBootTestController {
private IAdapayRefundRecordService adapayRefundRecordService; private IAdapayRefundRecordService adapayRefundRecordService;
@Autowired @Autowired
private AdapayMemberService adapayMemberService; private AdapayService adapayMemberService;
@Autowired @Autowired
private AMapService aMapService; private AMapService aMapService;
@@ -366,7 +366,7 @@ public class SpringBootTestController {
payOrderDTO.setMemberId(dto.getMemberId()); payOrderDTO.setMemberId(dto.getMemberId());
// payOrderDTO.setCode(); // payOrderDTO.setCode();
// payOrderDTO.setLockValue(); // payOrderDTO.setLockValue();
payOrderDTO.setOrderBasicInfo(basicInfo); // payOrderDTO.setOrderBasicInfo(basicInfo);
Map<String, Object> map = orderBasicInfoService.payOrder(payOrderDTO); Map<String, Object> map = orderBasicInfoService.payOrder(payOrderDTO);

View File

@@ -42,7 +42,7 @@ public enum ReturnCodeEnum {
CODE_ORDER_INFO_ERROR("00100019", "订单信息有误"), CODE_ORDER_INFO_ERROR("00100019", "订单信息有误"),
CODE_QUERY_ORDER_NULL_ERROR("00100020", "查询订单为空"), CODE_QUERY_ORDER_INFO_IS_NULL("00100020", "未查到相关订单信息"),
CODE_ORDER_PILE_MAPPING_ERROR("00100021", "订单与当前桩不匹配"), CODE_ORDER_PILE_MAPPING_ERROR("00100021", "订单与当前桩不匹配"),
@@ -148,8 +148,6 @@ public enum ReturnCodeEnum {
CODE_USER_UNBIND_CARNO_ERROR("00500003", "用户解绑车牌号异常"), CODE_USER_UNBIND_CARNO_ERROR("00500003", "用户解绑车牌号异常"),
CODE_QUERY_ORDER_INFO_IS_NULL("00400011", "未查到相关订单信息!"),
CODE_PILE_NOT_INFO("00400012", "未查到该该桩的信息,请检查!"), CODE_PILE_NOT_INFO("00400012", "未查到该该桩的信息,请检查!"),
CODE_SECRET_KEY_ERROR("00400013", "填写的桩密钥有误,请检查!"), CODE_SECRET_KEY_ERROR("00400013", "填写的桩密钥有误,请检查!"),

View File

@@ -2,10 +2,13 @@ package com.jsowell.adapay.service;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.*; import com.huifu.adapay.model.*;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember; import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.config.AbstractAdapayConfig; import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.dto.SettleAccountDTO; import com.jsowell.adapay.dto.SettleAccountDTO;
@@ -17,10 +20,13 @@ import com.jsowell.adapay.vo.AdapayAccountBalanceVO;
import com.jsowell.adapay.vo.AdapayCorpMemberVO; import com.jsowell.adapay.vo.AdapayCorpMemberVO;
import com.jsowell.adapay.vo.AdapayMemberInfoVO; import com.jsowell.adapay.vo.AdapayMemberInfoVO;
import com.jsowell.adapay.vo.AdapaySettleAccountVO; import com.jsowell.adapay.vo.AdapaySettleAccountVO;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import com.jsowell.common.exception.BusinessException; import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.StringUtils;
@@ -29,14 +35,17 @@ import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.AdapayMemberAccount; import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.ClearingBillInfo; import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.domain.ClearingWithdrawInfo; import com.jsowell.pile.domain.ClearingWithdrawInfo;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.service.ClearingBillInfoService; import com.jsowell.pile.service.ClearingBillInfoService;
import com.jsowell.pile.service.ClearingWithdrawInfoService; import com.jsowell.pile.service.ClearingWithdrawInfoService;
import com.jsowell.pile.service.IAdapayMemberAccountService; import com.jsowell.pile.service.IAdapayMemberAccountService;
import com.jsowell.pile.service.IPileMerchantInfoService; import com.jsowell.pile.service.IPileMerchantInfoService;
import com.jsowell.wxpay.service.WxAppletRemoteService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -46,11 +55,15 @@ import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class AdapayMemberService { public class AdapayService {
@Autowired
private RedisCache redisCache;
@Value("${adapay.jsowell.appId}") @Value("${adapay.jsowell.appId}")
private String ADAPAY_APP_ID; private String ADAPAY_APP_ID;
@@ -70,6 +83,75 @@ public class AdapayMemberService {
@Autowired @Autowired
private IPileMerchantInfoService pileMerchantInfoService; private IPileMerchantInfoService pileMerchantInfoService;
@Autowired
private WxAppletRemoteService wxAppletRemoteService;
/**
* 获取支付参数
*/
public Map<String, Object> createPayment(PayOrderDTO dto) {
log.info("===============使用汇付支付-获取支付参数");
// 相同参数重复请求返回同一个支付对象
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
Map<String, Object> cacheObject = redisCache.getCacheObject(redisKey);
if (cacheObject != null) {
// 表示已经获取到支付参数了后续再有支付请求就拒绝
return cacheObject;
}
// 获取支付配置
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(dto.getWechatAppId());
if (config == null) {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
}
// 获取openId
String openId = wxAppletRemoteService.getOpenIdByCode(dto.getCode());
if (StringUtils.isBlank(openId)) {
throw new BusinessException(ReturnCodeEnum.CODE_GET_OPEN_ID_BY_CODE_ERROR);
}
// 封装对象
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
createAdaPaymentParam.setOrder_no(dto.getOrderCode());
createAdaPaymentParam.setPay_amt(amount);
createAdaPaymentParam.setApp_id(config.getAdapayAppId());
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道这里需要做修改判断是什么渠道的请求
createAdaPaymentParam.setGoods_title(dto.getGoodsTitle());
createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名
Map<String, String> map = Maps.newHashMap();
map.put("type", ScenarioEnum.ORDER.getValue());
map.put("orderCode", dto.getOrderCode());
map.put("payMode", payMode);
map.put("memberId", dto.getMemberId());
createAdaPaymentParam.setDescription(JSON.toJSONString(map));
// 异步通知地址url为http/https路径服务器POST回调URL 上请勿附带参数
createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL);
createAdaPaymentParam.setExpend(JSONObject.toJSONString(ImmutableMap.of("open_id", openId)));
// 延时分账
createAdaPaymentParam.setPay_mode(payMode);
try {
log.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam));
Map<String, Object> response = Payment.create(BeanMap.create(createAdaPaymentParam), config.getWechatAppId());
if (response != null && !response.isEmpty()) {
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
JSONObject pay_info = expend.getJSONObject("pay_info");
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
if (resultMap != null) {
// 请求参数放入缓存15分钟以内返回同一个支付参数
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
}
return resultMap;
}
} catch (BaseAdaPayException e) {
log.error("汇付-获取支付对象发生异常", e);
}
return null;
}
/** /**
* 创建结算账户 * 创建结算账户
* *

View File

@@ -1,9 +1,6 @@
package com.jsowell.pile.dto; package com.jsowell.pile.dto;
import com.jsowell.pile.domain.OrderBasicInfo;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -49,21 +46,21 @@ public class PayOrderDTO {
*/ */
private String lockValue; private String lockValue;
private OrderBasicInfo orderBasicInfo; // private OrderBasicInfo orderBasicInfo;
/** /**
* 微信小程序appId * 微信小程序appId
*/ */
private String wechatAppId; private String wechatAppId;
@Override /**
public String toString() { * 商品标题
return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) */
.append("memberId", memberId) private String goodsTitle;
.append("orderCode", orderCode)
.append("payMode", payMode) /**
.append("payAmount", payAmount) * 商品描述信息微信小程序和微信公众号该字段最大长度42个字符
.append("code", code) * 这个字段是微信支付凭证的商品名
.toString(); */
} private String goodsDesc;
} }

View File

@@ -1,9 +1,12 @@
package com.jsowell.pile.service; package com.jsowell.pile.service;
import com.jsowell.pile.domain.OrderPileOccupy; import com.jsowell.pile.domain.OrderPileOccupy;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.dto.QueryOccupyOrderDTO; import com.jsowell.pile.dto.QueryOccupyOrderDTO;
import java.util.List; import java.util.List;
import java.util.Map;
public interface OrderPileOccupyService{ public interface OrderPileOccupyService{
int deleteByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id);
@@ -49,4 +52,6 @@ public interface OrderPileOccupyService{
* @return * @return
*/ */
List<OrderPileOccupy> queryUnPayOrderByMemberId(String memberId); List<OrderPileOccupy> queryUnPayOrderByMemberId(String memberId);
Map<String, Object> payOccupyPileOrder(PayOrderDTO dto);
} }

View File

@@ -2,23 +2,17 @@ package com.jsowell.pile.service.impl;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.Payment;
import com.huifu.adapay.model.PaymentConfirm; import com.huifu.adapay.model.PaymentConfirm;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember; import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.factory.AdapayConfigFactory;
import com.jsowell.adapay.response.PaymentConfirmResponse; import com.jsowell.adapay.response.PaymentConfirmResponse;
import com.jsowell.adapay.response.PaymentReverseResponse; import com.jsowell.adapay.response.PaymentReverseResponse;
import com.jsowell.adapay.service.AdapayMemberService; import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.OrderSettleResult; import com.jsowell.adapay.vo.OrderSettleResult;
import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
@@ -58,7 +52,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -168,7 +161,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
private IPileStationWhitelistService pileStationWhitelistService; private IPileStationWhitelistService pileStationWhitelistService;
@Autowired @Autowired
private AdapayMemberService adapayMemberService; private AdapayService adapayService;
@Autowired @Autowired
private MemberAdapayRecordService memberAdapayRecordService; private MemberAdapayRecordService memberAdapayRecordService;
@@ -1166,7 +1159,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String paymentId = vo.getPaymentId(); String paymentId = vo.getPaymentId();
BigDecimal deductionAmount = vo.getDeductionAmount(); BigDecimal deductionAmount = vo.getDeductionAmount();
// 调汇付的分账接口 确认交易 // 调汇付的分账接口 确认交易
PaymentConfirmResponse paymentConfirmResponse = adapayMemberService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode); PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode);
if (paymentConfirmResponse != null) { if (paymentConfirmResponse != null) {
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt())); confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt()));
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt())); feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
@@ -2145,7 +2138,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
payOrderDTO.setStartMode(dto.getStartMode()); payOrderDTO.setStartMode(dto.getStartMode());
// payOrderDTO.setCode(); // payOrderDTO.setCode();
// payOrderDTO.setLockValue(); // payOrderDTO.setLockValue();
payOrderDTO.setOrderBasicInfo(basicInfo); // payOrderDTO.setOrderBasicInfo(basicInfo);
payOrder(payOrderDTO); payOrder(payOrderDTO);
@@ -2358,10 +2351,10 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String payMode = "delay"; String payMode = "delay";
if (StringUtils.equals("", payMode)) { if (StringUtils.equals("", payMode)) {
// 延迟分账确认的调退款接口 // 延迟分账确认的调退款接口
adapayMemberService.createRefundRequest(paymentId, refundAmount); adapayService.createRefundRequest(paymentId, refundAmount);
} else { } else {
// 延迟分账未确认调撤销调撤销接口退款 // 延迟分账未确认调撤销调撤销接口退款
PaymentReverseResponse response = adapayMemberService.createPaymentReverseRequest( PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(), paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
dto.getOrderCode()); dto.getOrderCode());
if (response != null) { if (response != null) {
@@ -2405,7 +2398,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
BigDecimal deductionAmount = vo.getDeductionAmount(); BigDecimal deductionAmount = vo.getDeductionAmount();
// 调汇付的交易撤销接口 // 调汇付的交易撤销接口
adapayMemberService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(), adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null); dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
// 更新这笔交易的剩余金额 // 更新这笔交易的剩余金额
@@ -2623,7 +2616,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
public Map<String, Object> payOrder(PayOrderDTO dto) { public Map<String, Object> payOrder(PayOrderDTO dto) {
OrderBasicInfo orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode()); OrderBasicInfo orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode());
if (orderInfo == null) { if (orderInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
} }
if (!StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.unpaid.getValue())) { if (!StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.unpaid.getValue())) {
// 订单已支付 // 订单已支付
@@ -2635,10 +2628,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
balancePayOrder(dto); balancePayOrder(dto);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
// 微信支付 // 微信支付
dto.setOrderBasicInfo(orderInfo); // dto.setOrderBasicInfo(orderInfo);
// 2023-07-11 全部改为汇付支付 // 2023-07-11 全部改为汇付支付
Map<String, Object> weixinMap = adapayPayOrder(dto); dto.setGoodsTitle("充电费用");
dto.setGoodsDesc("充电桩预付款金额");
Map<String, Object> weixinMap = adapayService.createPayment(dto);
// 返回微信支付参数 // 返回微信支付参数
resultMap.put("weixinMap", weixinMap); resultMap.put("weixinMap", weixinMap);
@@ -2751,7 +2746,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
// 通过支付id查询退款记录 // 通过支付id查询退款记录
String paymentId = adapayCallbackRecord.getPaymentId(); String paymentId = adapayCallbackRecord.getPaymentId();
try { try {
resultList = adapayMemberService.queryPaymentReverse(paymentId, wechatAppId); resultList = adapayService.queryPaymentReverse(paymentId, wechatAppId);
} catch (BaseAdaPayException e) { } catch (BaseAdaPayException e) {
logger.error("查询支付撤销对象发生异常", e); logger.error("查询支付撤销对象发生异常", e);
} }
@@ -2798,7 +2793,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
List<PaymentReverseResponse> paymentReverses = queryOrderAdapayRefund(orderBasicInfo); List<PaymentReverseResponse> paymentReverses = queryOrderAdapayRefund(orderBasicInfo);
if (CollectionUtils.isEmpty(paymentReverses)) { if (CollectionUtils.isEmpty(paymentReverses)) {
// 如果没有退款过,重新执行一遍退款 // 如果没有退款过,重新执行一遍退款
PaymentReverseResponse response = adapayMemberService.createPaymentReverseRequest( PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(), paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(),
orderCode); orderCode);
logger.info("重试订单退款response:{}", JSON.toJSONString(response)); logger.info("重试订单退款response:{}", JSON.toJSONString(response));
@@ -2822,7 +2817,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
* @param dto * @param dto
* @return * @return
*/ */
private Map<String, Object> adapayPayOrder(PayOrderDTO dto) { /*private Map<String, Object> adapayPayOrder(PayOrderDTO dto) {
logger.info("===============使用汇付支付"); logger.info("===============使用汇付支付");
// 相同参数重复请求,返回同一个支付对象 // 相同参数重复请求,返回同一个支付对象
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode(); String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
@@ -2837,11 +2832,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
} }
OrderBasicInfo orderInfo = dto.getOrderBasicInfo(); // OrderBasicInfo orderInfo = dto.getOrderBasicInfo();
if (orderInfo == null) { // if (orderInfo == null) {
// 订单为空重新查询 // // 订单为空重新查询
orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode()); // orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode());
} // }
// 获取openId // 获取openId
String openId = wxAppletRemoteService.getOpenIdByCode(dto.getCode()); String openId = wxAppletRemoteService.getOpenIdByCode(dto.getCode());
if (StringUtils.isBlank(openId)) { if (StringUtils.isBlank(openId)) {
@@ -2852,7 +2848,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额 String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账 String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode()); createAdaPaymentParam.setOrder_no(dto.getOrderCode());
createAdaPaymentParam.setPay_amt(amount); createAdaPaymentParam.setPay_amt(amount);
createAdaPaymentParam.setApp_id(config.getAdapayAppId()); createAdaPaymentParam.setApp_id(config.getAdapayAppId());
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求 createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
@@ -2890,7 +2886,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
logger.error("汇付-获取支付对象发生异常", e); logger.error("汇付-获取支付对象发生异常", e);
} }
return null; return null;
} }*/
/** /**
* 余额支付订单逻辑 * 余额支付订单逻辑

View File

@@ -1,11 +1,17 @@
package com.jsowell.pile.service.impl; package com.jsowell.pile.service.impl;
import com.google.common.collect.Maps;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.id.IdUtils; import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.OrderPileOccupy; import com.jsowell.pile.domain.OrderPileOccupy;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.dto.QueryOccupyOrderDTO; import com.jsowell.pile.dto.QueryOccupyOrderDTO;
import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.mapper.OrderPileOccupyMapper; import com.jsowell.pile.mapper.OrderPileOccupyMapper;
@@ -23,6 +29,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@Service @Service
@@ -40,6 +47,9 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
@Resource @Resource
private IPileBillingTemplateService pileBillingTemplateService; private IPileBillingTemplateService pileBillingTemplateService;
@Resource
private AdapayService adapayService;
@Override @Override
public int deleteByPrimaryKey(Integer id) { public int deleteByPrimaryKey(Integer id) {
return orderPileOccupyMapper.deleteByPrimaryKey(id); return orderPileOccupyMapper.deleteByPrimaryKey(id);
@@ -260,5 +270,42 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
return orderPileOccupyMapper.queryUnPayOrderByMemberId(memberId); return orderPileOccupyMapper.queryUnPayOrderByMemberId(memberId);
} }
/**
* 支付占桩订单
* @param dto
* @return
*/
@Override
public Map<String, Object> payOccupyPileOrder(PayOrderDTO dto) {
// 查询占桩订单详情
OrderPileOccupy orderPileOccupy = queryByOccupyCode(dto.getOrderCode());
if (orderPileOccupy == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
}
// 校验订单状态
// 支付方式
Map<String, Object> resultMap = Maps.newHashMap();
if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {
// 余额支付占桩订单
balancePayOccupyPileOrder(dto);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
// 返回支付参数
dto.setGoodsTitle("占桩费用");
dto.setGoodsDesc("占桩订单金额");
Map<String, Object> weixinMap = adapayService.createPayment(dto);
resultMap.put("weixinMap", weixinMap);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
whiteListPayOccupyPileOrder(dto);
}
return resultMap;
}
private void balancePayOccupyPileOrder(PayOrderDTO dto) {
}
private void whiteListPayOccupyPileOrder(PayOrderDTO dto) {
}
} }