Commit f840612e by jiangxiaoyang

Merge branch '3.0.21-剩余支付时间-20221010-jxy'

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/ExposureOrderService.java
parents 85a2a114 c7f6966a
...@@ -62,6 +62,12 @@ public class ExposureOrderController { ...@@ -62,6 +62,12 @@ public class ExposureOrderController {
return ResponseUtil.success(exposureOrderService.getPaySuccessData(request)); return ResponseUtil.success(exposureOrderService.getPaySuccessData(request));
} }
@ApiAnnotation(logMessage = "获取超时时间, 生成取餐码,上线后删除getPaySuccessData")
@PostMapping("/getPaySuccessDataV2")
public BaseResponse<PaySuccessDataVo> getPaySuccessDataV2(@Validated @LogParams @RequestBody GetPaySuccessDataV2Request request) {
return ResponseUtil.success(exposureOrderService.getPaySuccessDataV2(request));
}
/** /**
* 发送支付成功模板消息 * 发送支付成功模板消息
......
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class GetPaySuccessDataV2Request {
private Integer orderType;
private String orderClient;
private String partnerId;
private String storeId;
/**
* 订单业务类型 1:普通订单 2:虚拟订单
*/
private Integer bizType;
/**
* 订单特殊类型
*/
private Integer marketingType;
}
package cn.freemud.entities.vo.order;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
@Data
public class QueryByKeysReq {
/**
* 商户号
*/
private String partnerId;
/**
* 订单类型
* 外卖先付 UNPAID_TIMEOUT_CLOSE_TIME_WMXF
* 堂食先付 UNPAID_TIMEOUT_CLOSE_TIME_TSXF
* 堂食后付 UNPAID_TIMEOUT_CLOSE_TIME_TSHF
*/
private List<String> configNames = Arrays.asList("UNPAID_TIMEOUT_CLOSE_TIME_WMXF","UNPAID_TIMEOUT_CLOSE_TIME_TSXF","UNPAID_TIMEOUT_CLOSE_TIME_TSHF");
public QueryByKeysReq(String partnerId) {
this.partnerId = partnerId;
}
}
package cn.freemud.entities.vo.order;
import lombok.Data;
@Data
public class QueryByKeysResp {
/**
* 外卖先付 UNPAID_TIMEOUT_CLOSE_TIME_WMXF
* 堂食先付 UNPAID_TIMEOUT_CLOSE_TIME_TSXF
* 堂食后付 UNPAID_TIMEOUT_CLOSE_TIME_TSHF
*/
private String configName;
/**
* 单位分钟
*/
private String configValue;
}
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.GetMallPayConfigVo; import cn.freemud.entities.vo.GetMallPayConfigVo;
import cn.freemud.entities.vo.GetPayConfigVo; import cn.freemud.entities.vo.GetPayConfigVo;
import cn.freemud.entities.vo.GetPaySuccessDataRequest; import cn.freemud.entities.vo.GetPaySuccessDataRequest;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.GetPaySuccessDataV2Request;
import cn.freemud.entities.vo.order.PayConfigVo; import cn.freemud.entities.vo.order.PayConfigVo;
import cn.freemud.entities.vo.order.PaySuccessDataVo; import cn.freemud.entities.vo.order.PaySuccessDataVo;
import cn.freemud.entities.vo.order.QueryByKeysReq;
import cn.freemud.entities.vo.order.QueryByKeysResp;
import cn.freemud.enums.AggregationTypeEnum; import cn.freemud.enums.AggregationTypeEnum;
import cn.freemud.enums.OrderTackCodeFactory; import cn.freemud.enums.OrderTackCodeFactory;
import cn.freemud.enums.TakeCodeOrderType; import cn.freemud.enums.TakeCodeOrderType;
import cn.freemud.manager.OrderTackCodeManager; import cn.freemud.manager.OrderTackCodeManager;
import cn.freemud.service.business.impl.OrderBusinessServiceImpl; import cn.freemud.service.business.impl.OrderBusinessServiceImpl;
import cn.freemud.service.impl.PayServiceImpl; import cn.freemud.service.impl.PayServiceImpl;
import cn.freemud.service.thirdparty.OrderServiceClient;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.application.sdk.api.ordercenter.adapter.OrderCenterSdkAdapter; import com.freemud.application.sdk.api.ordercenter.adapter.OrderCenterSdkAdapter;
import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.MarketTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Objects;
/** /**
* @author Clover.z * @author Clover.z
* @version 1.0.0 * @version 1.0.0
...@@ -32,6 +43,7 @@ public class ExposureOrderService { ...@@ -32,6 +43,7 @@ public class ExposureOrderService {
private final OrderTackCodeManager orderTackCodeManager; private final OrderTackCodeManager orderTackCodeManager;
private final OrderBusinessServiceImpl orderBusinessService; private final OrderBusinessServiceImpl orderBusinessService;
private final OrderCenterSdkAdapter orderCenterSdkAdapter; private final OrderCenterSdkAdapter orderCenterSdkAdapter;
private final OrderServiceClient orderServiceClient;
public PayConfigVo getPayConfig(GetPayConfigVo req) { public PayConfigVo getPayConfig(GetPayConfigVo req) {
PayConfigVo vo = new PayConfigVo(); PayConfigVo vo = new PayConfigVo();
...@@ -59,6 +71,46 @@ public class ExposureOrderService { ...@@ -59,6 +71,46 @@ public class ExposureOrderService {
return vo; return vo;
} }
/**
* 获取超时时间, 生成取餐码,上线后删除getPaySuccessData
* @param reqVo
* @return
*/
public PaySuccessDataVo getPaySuccessDataV2(GetPaySuccessDataV2Request reqVo) {
Integer type = TakeCodeOrderType.getTakeCodeOrderType(reqVo.getOrderType());
String takeCode = orderTackCodeManager.generateTackCode(type,
reqVo.getPartnerId(),
reqVo.getStoreId(),
null,
OrderTackCodeFactory.getByOrderClient(reqVo.getOrderClient()).getGenerateTackCodeFunc());
Integer timeout = 0;
//查询待支付订单时效配置
BaseResponse<List<QueryByKeysResp>> listBaseResponse = orderServiceClient.queryByKeys(new QueryByKeysReq(reqVo.getPartnerId()));
if (listBaseResponse == null || !Objects.equals("100", listBaseResponse.getCode())) {
timeout = 30;
}
Integer v1Type = orderCenterSdkAdapter.getOldOrderType(reqVo.getOrderType());
for(QueryByKeysResp resp : listBaseResponse.getResult()){
// 外卖订单
if (Objects.equals(v1Type, OrderTypeV1.TAKE_OUT.getCode()) && Objects.equals("UNPAID_TIMEOUT_CLOSE_TIME_WMXF",resp.getConfigName())) {
timeout = Integer.valueOf(resp.getConfigValue());
}else if(Objects.equals(reqVo.getBizType(), BizTypeEnum.ORDINARY.getBizType()) && (Objects.equals(reqVo.getMarketingType(), MarketTypeEnum.ORDER.getIndex()) || Objects.equals(reqVo.getMarketingType(), MarketTypeEnum.CASHIER.getIndex()) )
&& Objects.equals("UNPAID_TIMEOUT_CLOSE_TIME_TSXF",resp.getConfigName())){
//堂食先付
timeout = Integer.valueOf(resp.getConfigValue());
}else if(Objects.equals(reqVo.getBizType(), BizTypeEnum.ORDINARY.getBizType()) && Objects.equals(reqVo.getMarketingType(), MarketTypeEnum.POST_ORDER.getIndex())
&& Objects.equals("UNPAID_TIMEOUT_CLOSE_TIME_TSHF",resp.getConfigName())){
//堂食后付
timeout = Integer.valueOf(resp.getConfigValue());
}
}
PaySuccessDataVo vo = new PaySuccessDataVo();
vo.setTakeCode(takeCode);
vo.setTimeout(timeout);
return vo;
}
/** /**
* 新商城支付门店配置 * 新商城支付门店配置
......
...@@ -452,11 +452,11 @@ public class PayServiceImpl { ...@@ -452,11 +452,11 @@ public class PayServiceImpl {
paymentRequest.setReverseNotifyiDcUrl(reverseNotifyiDcUrl); paymentRequest.setReverseNotifyiDcUrl(reverseNotifyiDcUrl);
paymentRequest.setPayCode(payCode); paymentRequest.setPayCode(payCode);
// if ("2080".equals(partnerId)) { // if ("2080".equals(partnerId)) {
//【ID1035981】【蜜雪冰城】订单C端,拼接order_body字段:蜜雪冰城+门店编号 //【ID1035981】【蜜雪冰城】订单C端,拼接order_body字段:蜜雪冰城+门店编号
// paymentRequest.setPrincipalName("蜜雪冰城" + storeId + "店"); // paymentRequest.setPrincipalName("蜜雪冰城" + storeId + "店");
// } else { // } else {
// saas 查询小程序配置 // saas 查询小程序配置
paymentRequest.setPrincipalName(this.getPaymentPrincipalName(partnerId, appId)); paymentRequest.setPrincipalName(this.getPaymentPrincipalName(partnerId, appId));
// } // }
return paymentRequest; return paymentRequest;
} }
...@@ -585,51 +585,51 @@ public class PayServiceImpl { ...@@ -585,51 +585,51 @@ public class PayServiceImpl {
} }
//使用支付FeignClient //使用支付FeignClient
// if (usePayFeignClient) { // if (usePayFeignClient) {
orderPayResponse = new OrderPayResponse(); orderPayResponse = new OrderPayResponse();
String clientCode = this.getPayCodeByChanel(paymentRequest.getWxAppId(), orderBean.getShopId()); String clientCode = this.getPayCodeByChanel(paymentRequest.getWxAppId(), orderBean.getShopId());
if (StringUtils.isBlank(clientCode)) { if (StringUtils.isBlank(clientCode)) {
orderPayResponse.setMsg("请先联系相关人员配置商户对应的支付渠道"); orderPayResponse.setMsg("请先联系相关人员配置商户对应的支付渠道");
return orderPayResponse; return orderPayResponse;
} }
requestDto.setClientCode(Long.parseLong(clientCode)); requestDto.setClientCode(Long.parseLong(clientCode));
// com.freemud.application.sdk.api.base.BaseResponse<UnifiedPayResponseDto> response = paymentNewClient.unifiedOrder(requestDto); // com.freemud.application.sdk.api.base.BaseResponse<UnifiedPayResponseDto> response = paymentNewClient.unifiedOrder(requestDto);
com.freemud.application.sdk.api.base.BaseResponse<UnifiedPayResponseDto> response = null; com.freemud.application.sdk.api.base.BaseResponse<UnifiedPayResponseDto> response = null;
//处理超时情况,后续冲正mq正常冲正,同支付sdk逻辑 //处理超时情况,后续冲正mq正常冲正,同支付sdk逻辑
try { try {
response = this.unifiedOrder(requestDto); response = this.unifiedOrder(requestDto);
} catch (Exception e) { } catch (Exception e) {
AppLogUtil.errorLog("获取预支付信息异常", JSONObject.toJSONString(requestDto), null, e); AppLogUtil.errorLog("获取预支付信息异常", JSONObject.toJSONString(requestDto), null, e);
} }
//预支付接口失败 //预支付接口失败
if (null == response || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, response.getCode()) if (null == response || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, response.getCode())
|| !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) { || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) {
String errorMessage = "unified fail"; String errorMessage = "unified fail";
if (null != response) { if (null != response) {
errorMessage = StringUtils.isNotEmpty(response.getMessage()) ? response.getMessage() : response.getData().getResultMsg(); errorMessage = StringUtils.isNotEmpty(response.getMessage()) ? response.getMessage() : response.getData().getResultMsg();
}
//打印业务异常
if (response != null && printUnifiedPayResponseError) {
AppLogUtil.errorLog("获取预支付信息失败", JSONObject.toJSONString(requestDto), JSONObject.toJSONString(response), null);
}
//预支付失败需要把原因进行记录
orderPayResponse.setMsg(errorMessage);
return orderPayResponse;
}
putDelMq(request.getPartnerId(), request.getStoreId(), response.getData().getFmId(), orderBean.getOid(), null);
this.convent2CreateOrderResponseVo(orderPayResponse, paymentRequest.getWxAppId(), response.getData());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
orderPayResponse.setPayChannelType(PayChannelType.WECHAT);
if (orderPayResponse.getPayOrder() != null && StringUtils.isNotBlank(orderPayResponse.getPayOrder().getAliPayOrder())
&& !orderPayResponse.getPayOrder().getAliPayOrder().startsWith("wx")) {
orderPayResponse.setPayChannelType(PayChannelType.ALIPAY);
} }
//抖音支付 //打印业务异常
if (PayChannelType.TIKTOKPAY.getIndex().toString().equalsIgnoreCase(orderBean.getPayChannelType())) { if (response != null && printUnifiedPayResponseError) {
orderPayResponse.setPayChannelType(PayChannelType.TIKTOKPAY); AppLogUtil.errorLog("获取预支付信息失败", JSONObject.toJSONString(requestDto), JSONObject.toJSONString(response), null);
} }
//预支付失败需要把原因进行记录
orderPayResponse.setMsg(errorMessage);
return orderPayResponse; return orderPayResponse;
}
putDelMq(request.getPartnerId(), request.getStoreId(), response.getData().getFmId(), orderBean.getOid(), null);
this.convent2CreateOrderResponseVo(orderPayResponse, paymentRequest.getWxAppId(), response.getData());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
orderPayResponse.setPayChannelType(PayChannelType.WECHAT);
if (orderPayResponse.getPayOrder() != null && StringUtils.isNotBlank(orderPayResponse.getPayOrder().getAliPayOrder())
&& !orderPayResponse.getPayOrder().getAliPayOrder().startsWith("wx")) {
orderPayResponse.setPayChannelType(PayChannelType.ALIPAY);
}
//抖音支付
if (PayChannelType.TIKTOKPAY.getIndex().toString().equalsIgnoreCase(orderBean.getPayChannelType())) {
orderPayResponse.setPayChannelType(PayChannelType.TIKTOKPAY);
}
return orderPayResponse;
// } // }
// com.freemud.application.sdk.api.base.BaseResponse<UnifiedOrderResponse> responseBase = standardPaymentService.unifiedOrder(request, trackingNo); // com.freemud.application.sdk.api.base.BaseResponse<UnifiedOrderResponse> responseBase = standardPaymentService.unifiedOrder(request, trackingNo);
// if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) { // if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) {
...@@ -1392,7 +1392,7 @@ public class PayServiceImpl { ...@@ -1392,7 +1392,7 @@ public class PayServiceImpl {
paymentQueryOrderRequest.setPartnerId(refundRequest.getPartnerId()); paymentQueryOrderRequest.setPartnerId(refundRequest.getPartnerId());
paymentQueryOrderRequest.setStoreId(refundRequest.getStoreId()); paymentQueryOrderRequest.setStoreId(refundRequest.getStoreId());
paymentQueryOrderRequest.setFrontTransId(refundRequest.getOrgTransId()); paymentQueryOrderRequest.setFrontTransId(refundRequest.getOrgTransId());
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse = null; com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse = null;
try { try {
payQueryOrderResponse = omsPaymentClient.payQueryOrder(paymentQueryOrderRequest); payQueryOrderResponse = omsPaymentClient.payQueryOrder(paymentQueryOrderRequest);
}catch (Exception e){ }catch (Exception e){
......
...@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty; ...@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty;
import cn.freemud.entities.vo.order.EditLogisticsReq; import cn.freemud.entities.vo.order.EditLogisticsReq;
import cn.freemud.entities.vo.order.DirectDeliveryReq; import cn.freemud.entities.vo.order.DirectDeliveryReq;
import cn.freemud.entities.vo.order.QueryByKeysReq;
import cn.freemud.entities.vo.order.QueryByKeysResp;
import com.freemud.application.sdk.api.ordercenter.annotation.LogIgnoreFeign; import com.freemud.application.sdk.api.ordercenter.annotation.LogIgnoreFeign;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.QueryInvoiceRepDto; import cn.freemud.entities.dto.QueryInvoiceRepDto;
...@@ -81,4 +83,11 @@ public interface OrderServiceClient { ...@@ -81,4 +83,11 @@ public interface OrderServiceClient {
@PostMapping(value = "/order/v2/directDelivery") @PostMapping(value = "/order/v2/directDelivery")
BaseResponse directDelivery(@RequestBody DirectDeliveryReq DeditLogisticsReq); BaseResponse directDelivery(@RequestBody DirectDeliveryReq DeditLogisticsReq);
/**
* 查询待支付订单时效配置
*/
@LogIgnoreFeign(logMessage="queryByKeys")
@PostMapping(value = "/order/config/queryByKeys")
BaseResponse<List<QueryByKeysResp>> queryByKeys(@RequestBody QueryByKeysReq req);
} }
...@@ -14,6 +14,7 @@ public enum MarketTypeEnum { ...@@ -14,6 +14,7 @@ public enum MarketTypeEnum {
SVC(8, "储值卡充值"), SVC(8, "储值卡充值"),
WE_CHAT_LIVE_SELL(9, "微信视频号卖券"), WE_CHAT_LIVE_SELL(9, "微信视频号卖券"),
TIKTOK_MARKET_ORDER(11, "抖音卖券换购营销"), TIKTOK_MARKET_ORDER(11, "抖音卖券换购营销"),
POST_ORDER(12, "多人点单后付"),
; ;
private Integer index; private Integer index;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment